dockview-react 6.2.2 → 6.4.0

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.
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * dockview-react
3
- * @version 6.2.2
3
+ * @version 6.4.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
7
7
  import{DockviewDisposable as e,PROPERTY_KEYS_DOCKVIEW as t,createDockview as n,PROPERTY_KEYS_SPLITVIEW as o,createSplitview as r,PROPERTY_KEYS_GRIDVIEW as a,createGridview as i,PROPERTY_KEYS_PANEVIEW as s,createPaneview as c,DockviewEmitter as p,SplitviewPanel as l,SplitviewApi as d,GridviewPanel as u,GridviewApi as m,DockviewMutableDisposable as h,DockviewCompositeDisposable as f}from"dockview-core";export*from"dockview-core";import v from"react";import C from"react-dom";
8
8
  /**
9
9
  * dockview
10
- * @version 6.2.2
10
+ * @version 6.4.0
11
11
  * @link https://github.com/mathuo/dockview
12
12
  * @license MIT
13
- */const P=(e,t)=>{const[,n]=v.useState(0),o=v.useRef(e.componentProps);return v.useImperativeHandle(t,()=>({update:e=>{o.current=Object.assign(Object.assign({},o.current),e),n(e=>e+1)}}),[]),v.createElement(e.component,o.current)};P.displayName="DockviewReactJsBridge";const w=(()=>{let e=1;return{next:()=>`dockview_react_portal_key_${(e++).toString()}`}})(),b=v.createContext({});class g{constructor(e,t,n,o,r){this.parent=e,this.portalStore=t,this.component=n,this.parameters=o,this.context=r,this._initialProps={},this.disposed=!1,this.createPortal()}update(e){if(this.disposed)throw new Error("invalid operation: resource is already disposed");this.componentInstance?this.componentInstance.update(e):this._initialProps=Object.assign(Object.assign({},this._initialProps),e)}createPortal(){if(this.disposed)throw new Error("invalid operation: resource is already disposed");if(!y(this.component))throw new Error("Dockview: Only React.memo(...), React.ForwardRef(...) and functional components are accepted as components");const e=v.createElement(v.forwardRef(P),{component:this.component,componentProps:this.parameters,ref:e=>{this.componentInstance=e,Object.keys(this._initialProps).length>0&&(this.componentInstance.update(this._initialProps),this._initialProps={})}}),t=this.context?v.createElement(b.Provider,{value:this.context},e):e,n=C.createPortal(t,this.parent,w.next());this.ref={portal:n,disposable:this.portalStore.addPortal(n)}}dispose(){var e;null===(e=this.ref)||void 0===e||e.disposable.dispose(),this.disposed=!0}}const _=()=>{const[t,n]=v.useState([]);v.useDebugValue(`Portal count: ${t.length}`);return[t,v.useCallback(t=>{n(e=>[...e,t]);let o=!1;return e.from(()=>{if(o)throw new Error("invalid operation: resource already disposed");o=!0,n(e=>e.filter(e=>e!==t))})},[])]};function y(e){return"function"==typeof e||!!(null==e?void 0:e.$$typeof)}class E{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._onDidFocus=new p,this.onDidFocus=this._onDidFocus.event,this._onDidBlur=new p,this.onDidBlur=this._onDidBlur.event,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}focus(){}init(e){this.part=new g(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,containerApi:e.containerApi})}update(e){var t;null===(t=this.part)||void 0===t||t.update({params:e.params})}layout(e,t){}dispose(){var e;this._onDidFocus.dispose(),this._onDidBlur.dispose(),null===(e=this.part)||void 0===e||e.dispose()}}class D{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}focus(){}init(e){this.part=new g(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,containerApi:e.containerApi,tabLocation:e.tabLocation})}update(e){var t;null===(t=this.part)||void 0===t||t.update({params:e.params})}layout(e,t){}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class A{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new g(this.element,this.reactPortalStore,this.component,{group:e.group,containerApi:e.containerApi})}focus(){}update(e){var t,n,o;this.parameters&&(this.parameters.params=e.params),null===(t=this.part)||void 0===t||t.update({params:null!==(o=null===(n=this.parameters)||void 0===n?void 0:n.params)&&void 0!==o?o:{}})}layout(e,t){}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class O{get element(){return this._element}get part(){return this._part}constructor(e,t,n){this.component=e,this.reactPortalStore=t,this._group=n,this.mutableDisposable=new h,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.mutableDisposable.value=new f(this._group.model.onDidAddPanel(()=>{this.updatePanels()}),this._group.model.onDidRemovePanel(()=>{this.updatePanels()}),this._group.model.onDidActivePanelChange(()=>{this.updateActivePanel()}),e.api.onDidActiveChange(()=>{this.updateGroupActive()}),e.api.onDidLocationChange(e=>{this.updateLocation(e.location)})),this._part=new g(this.element,this.reactPortalStore,this.component,{api:e.api,containerApi:e.containerApi,panels:this._group.model.panels,activePanel:this._group.model.activePanel,isGroupActive:this._group.api.isActive,group:this._group,headerPosition:this._group.model.headerPosition,location:e.api.location})}dispose(){var e;this.mutableDisposable.dispose(),null===(e=this._part)||void 0===e||e.dispose()}update(e){var t;null===(t=this._part)||void 0===t||t.update(e.params)}updatePanels(){this.update({params:{panels:this._group.model.panels}})}updateActivePanel(){this.update({params:{activePanel:this._group.model.activePanel}})}updateGroupActive(){this.update({params:{isGroupActive:this._group.api.isActive}})}updateLocation(e){this.update({params:{location:e}})}}class R{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new g(this._element,this.reactPortalStore,this.component,e)}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class S{get element(){return this._element}constructor(e,t){this.component=e,this.reactPortalStore=t,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.display="inline-flex"}init(e){this.part=new g(this._element,this.reactPortalStore,this.component,{tabGroup:e.tabGroup,api:e.api})}update(e){var t;null===(t=this.part)||void 0===t||t.update({tabGroup:e.tabGroup})}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}function H(e,t){return e?n=>new O(e,t,n):void 0}const k="props.defaultTabComponent";const L=v.forwardRef((e,o)=>{const r=v.useRef(null),a=v.useRef(void 0),[i,s]=_();v.useImperativeHandle(o,()=>r.current,[]);const c=v.useRef({});return v.useEffect(()=>{const n={};t.forEach(t=>{const o=t,r=e[o];o in e&&r!==c.current[o]&&(n[o]=r)}),a.current&&a.current.updateOptions(n),c.current=e},t.map(t=>e[t])),v.useEffect(()=>{var o;if(!r.current)return;const i=null!==(o=e.tabComponents)&&void 0!==o?o:{};e.defaultTabComponent&&(i[k]=e.defaultTabComponent);const c={createLeftHeaderActionComponent:H(e.leftHeaderActionsComponent,{addPortal:s}),createRightHeaderActionComponent:H(e.rightHeaderActionsComponent,{addPortal:s}),createPrefixHeaderActionComponent:H(e.prefixHeaderActionsComponent,{addPortal:s}),createComponent:t=>new E(t.id,e.components[t.name],{addPortal:s}),createTabComponent:e=>new D(e.id,i[e.name],{addPortal:s}),createWatermarkComponent:e.watermarkComponent?()=>new A("watermark",e.watermarkComponent,{addPortal:s}):void 0,defaultTabComponent:e.defaultTabComponent?k:void 0,createContextMenuItemComponent:e=>{if(e.component)return new R(e.id,e.component,{addPortal:s})}},p=function(e){return t.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e);if(e.tabGroupChipComponent){const t=e.tabGroupChipComponent;p.createTabGroupChipComponent=()=>new S(t,{addPortal:s})}const l=n(r.current,Object.assign(Object.assign({},p),c)),{clientWidth:d,clientHeight:u}=r.current;return l.layout(d,u),e.onReady&&e.onReady({api:l}),a.current=l,()=>{a.current=void 0,l.dispose()}},[]),v.useEffect(()=>{if(!a.current)return()=>{};const t=a.current.onDidDrop(t=>{e.onDidDrop&&e.onDidDrop(t)});return()=>{t.dispose()}},[e.onDidDrop]),v.useEffect(()=>{if(!a.current)return()=>{};const t=a.current.onWillDrop(t=>{e.onWillDrop&&e.onWillDrop(t)});return()=>{t.dispose()}},[e.onWillDrop]),v.useEffect(()=>{a.current&&a.current.updateOptions({createTabGroupChipComponent:e.tabGroupChipComponent?()=>new S(e.tabGroupChipComponent,{addPortal:s}):void 0})},[e.tabGroupChipComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createComponent:t=>new E(t.id,e.components[t.name],{addPortal:s})})},[e.components]),v.useEffect(()=>{var t;if(!a.current)return;const n=null!==(t=e.tabComponents)&&void 0!==t?t:{};e.defaultTabComponent&&(n[k]=e.defaultTabComponent),a.current.updateOptions({defaultTabComponent:e.defaultTabComponent?k:void 0,createTabComponent:e=>new D(e.id,n[e.name],{addPortal:s})})},[e.tabComponents,e.defaultTabComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createWatermarkComponent:e.watermarkComponent?()=>new A("watermark",e.watermarkComponent,{addPortal:s}):void 0})},[e.watermarkComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createRightHeaderActionComponent:H(e.rightHeaderActionsComponent,{addPortal:s})})},[e.rightHeaderActionsComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createLeftHeaderActionComponent:H(e.leftHeaderActionsComponent,{addPortal:s})})},[e.leftHeaderActionsComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createPrefixHeaderActionComponent:H(e.prefixHeaderActionsComponent,{addPortal:s})})},[e.prefixHeaderActionsComponent]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:r},i)});L.displayName="DockviewComponent","function"==typeof SuppressedError&&SuppressedError;const x=()=>v.createElement("svg",{height:"11",width:"11",viewBox:"0 0 28 28","aria-hidden":"false",focusable:!1,className:"dv-svg"},v.createElement("path",{d:"M2.1 27.3L0 25.2L11.55 13.65L0 2.1L2.1 0L13.65 11.55L25.2 0L27.3 2.1L15.75 13.65L27.3 25.2L25.2 27.3L13.65 15.75L2.1 27.3Z"}));const j=e=>{var{api:t,containerApi:n,params:o,hideClose:r,closeActionOverride:a,onPointerDown:i,onPointerUp:s,onPointerLeave:c,tabLocation:p}=e,l=function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]])}return n}(e,["api","containerApi","params","hideClose","closeActionOverride","onPointerDown","onPointerUp","onPointerLeave","tabLocation"]);const d=function(e){const[t,n]=v.useState(e.title);return v.useEffect(()=>{const o=e.onDidTitleChange(e=>{n(e.title)});return t!==e.title&&n(e.title),()=>{o.dispose()}},[e]),t}(t),u=v.useRef(!1),m=v.useCallback(e=>{e.preventDefault(),a?a():t.close()},[t,a]),h=v.useCallback(e=>{e.preventDefault()},[]),f=v.useCallback(e=>{u.current=1===e.button,null==i||i(e)},[i]),C=v.useCallback(e=>{u&&1===e.button&&!r&&(u.current=!1,m(e)),null==s||s(e)},[s,m,r]),P=v.useCallback(e=>{u.current=!1,null==c||c(e)},[c]);return v.createElement("div",Object.assign({"data-testid":"dockview-dv-default-tab"},l,{onPointerDown:f,onPointerUp:C,onPointerLeave:P,className:"dv-default-tab"}),v.createElement("span",{className:"dv-default-tab-content"},d),!r&&v.createElement("div",{className:"dv-default-tab-action",onPointerDown:h,onClick:m},v.createElement(x,null)))};class G extends l{constructor(e,t,n,o){super(e,t),this.reactComponent=n,this.reactPortalStore=o}getComponent(){var e,t;return new g(this.element,this.reactPortalStore,this.reactComponent,{params:null!==(t=null===(e=this._params)||void 0===e?void 0:e.params)&&void 0!==t?t:{},api:this.api,containerApi:new d(this._params.accessor)})}}const N=v.forwardRef((e,t)=>{const n=v.useRef(null),a=v.useRef(void 0),[i,s]=_();v.useImperativeHandle(t,()=>n.current,[]);const c=v.useRef({});return v.useEffect(()=>{const t={};o.forEach(n=>{const o=n,r=e[o];o in e&&r!==c.current[o]&&(t[o]=r)}),a.current&&a.current.updateOptions(t),c.current=e},o.map(t=>e[t])),v.useEffect(()=>{if(!n.current)return()=>{};const t={createComponent:t=>new G(t.id,t.name,e.components[t.name],{addPortal:s})},i=r(n.current,Object.assign(Object.assign({},function(e){return o.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),t)),{clientWidth:c,clientHeight:p}=n.current;return i.layout(c,p),e.onReady&&e.onReady({api:i}),a.current=i,()=>{a.current=void 0,i.dispose()}},[]),v.useEffect(()=>{a.current&&a.current.updateOptions({createComponent:t=>new G(t.id,t.name,e.components[t.name],{addPortal:s})})},[e.components]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},i)});N.displayName="SplitviewComponent";class T extends u{constructor(e,t,n,o){super(e,t),this.reactComponent=n,this.reactPortalStore=o}getComponent(){var e,t;return new g(this.element,this.reactPortalStore,this.reactComponent,{params:null!==(t=null===(e=this._params)||void 0===e?void 0:e.params)&&void 0!==t?t:{},api:this.api,containerApi:new m(this._params.accessor)})}}const I=v.forwardRef((e,t)=>{const n=v.useRef(null),o=v.useRef(void 0),[r,s]=_();v.useImperativeHandle(t,()=>n.current,[]);const c=v.useRef({});return v.useEffect(()=>{const t={};a.forEach(n=>{const o=n,r=e[o];o in e&&r!==c.current[o]&&(t[o]=r)}),o.current&&o.current.updateOptions(t),c.current=e},a.map(t=>e[t])),v.useEffect(()=>{if(!n.current)return()=>{};const t={createComponent:t=>new T(t.id,t.name,e.components[t.name],{addPortal:s})},r=i(n.current,Object.assign(Object.assign({},function(e){return a.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),t)),{clientWidth:c,clientHeight:p}=n.current;return r.layout(c,p),e.onReady&&e.onReady({api:r}),o.current=r,()=>{o.current=void 0,r.dispose()}},[]),v.useEffect(()=>{o.current&&o.current.updateOptions({createComponent:t=>new T(t.id,t.name,e.components[t.name],{addPortal:s})})},[e.components]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},r)});I.displayName="GridviewComponent";class W{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new g(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,title:e.title,containerApi:e.containerApi})}toJSON(){return{id:this.id}}update(e){var t;null===(t=this.part)||void 0===t||t.update(e.params)}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}const B=v.forwardRef((e,t)=>{const n=v.useRef(null),o=v.useRef(void 0),[r,a]=_();v.useImperativeHandle(t,()=>n.current,[]);const i=v.useRef({});return v.useEffect(()=>{const t={};s.forEach(n=>{const o=n,r=e[o];o in e&&r!==i.current[o]&&(t[o]=r)}),o.current&&o.current.updateOptions(t),i.current=e},s.map(t=>e[t])),v.useEffect(()=>{var t;if(!n.current)return()=>{};const r=null!==(t=e.headerComponents)&&void 0!==t?t:{},i={createComponent:t=>new W(t.id,e.components[t.name],{addPortal:a}),createHeaderComponent:e=>new W(e.id,r[e.name],{addPortal:a})},p=c(n.current,Object.assign(Object.assign({},function(e){return s.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),i)),{clientWidth:l,clientHeight:d}=n.current;return p.layout(l,d),e.onReady&&e.onReady({api:p}),o.current=p,()=>{o.current=void 0,p.dispose()}},[]),v.useEffect(()=>{o.current&&o.current.updateOptions({createComponent:t=>new W(t.id,e.components[t.name],{addPortal:a})})},[e.components]),v.useEffect(()=>{var t;if(!o.current)return;const n=null!==(t=e.headerComponents)&&void 0!==t?t:{};o.current.updateOptions({createHeaderComponent:e=>new W(e.id,n[e.name],{addPortal:a})})},[e.headerComponents]),v.useEffect(()=>{if(!o.current)return()=>{};const t=o.current.onDidDrop(t=>{e.onDidDrop&&e.onDidDrop(t)});return()=>{t.dispose()}},[e.onDidDrop]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},r)});B.displayName="PaneviewComponent";export{j as DockviewDefaultTab,L as DockviewReact,I as GridviewReact,B as PaneviewReact,g as ReactPart,b as ReactPartContext,N as SplitviewReact,y as isReactComponent,_ as usePortalsLifecycle};
13
+ */const P=(e,t)=>{const[,n]=v.useState(0),o=v.useRef(e.componentProps);return v.useImperativeHandle(t,()=>({update:e=>{o.current=Object.assign(Object.assign({},o.current),e),n(e=>e+1)}}),[]),v.createElement(e.component,o.current)};P.displayName="DockviewReactJsBridge";const g=(()=>{let e=1;return{next:()=>`dockview_react_portal_key_${(e++).toString()}`}})(),w=v.createContext({});class _{constructor(e,t,n,o,r){this.parent=e,this.portalStore=t,this.component=n,this.parameters=o,this.context=r,this._initialProps={},this.disposed=!1,this.createPortal()}update(e){if(this.disposed)throw new Error("invalid operation: resource is already disposed");this.componentInstance?this.componentInstance.update(e):this._initialProps=Object.assign(Object.assign({},this._initialProps),e)}createPortal(){if(this.disposed)throw new Error("invalid operation: resource is already disposed");if(!y(this.component))throw new Error("Dockview: Only React.memo(...), React.ForwardRef(...) and functional components are accepted as components");const e=v.createElement(v.forwardRef(P),{component:this.component,componentProps:this.parameters,ref:e=>{this.componentInstance=e,Object.keys(this._initialProps).length>0&&(this.componentInstance.update(this._initialProps),this._initialProps={})}}),t=this.context?v.createElement(w.Provider,{value:this.context},e):e,n=C.createPortal(t,this.parent,g.next());this.ref={portal:n,disposable:this.portalStore.addPortal(n)}}dispose(){var e;null===(e=this.ref)||void 0===e||e.disposable.dispose(),this.disposed=!0}}const b=()=>{const[t,n]=v.useState([]);v.useDebugValue(`Portal count: ${t.length}`);return[t,v.useCallback(t=>{n(e=>[...e,t]);let o=!1;return e.from(()=>{if(o)throw new Error("invalid operation: resource already disposed");o=!0,n(e=>e.filter(e=>e!==t))})},[])]};function y(e){return"function"==typeof e||!!(null==e?void 0:e.$$typeof)}class E{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._onDidFocus=new p,this.onDidFocus=this._onDidFocus.event,this._onDidBlur=new p,this.onDidBlur=this._onDidBlur.event,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}focus(){}init(e){this.part=new _(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,containerApi:e.containerApi})}update(e){var t;null===(t=this.part)||void 0===t||t.update({params:e.params})}layout(e,t){}dispose(){var e;this._onDidFocus.dispose(),this._onDidBlur.dispose(),null===(e=this.part)||void 0===e||e.dispose()}}class D{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}focus(){}init(e){this.part=new _(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,containerApi:e.containerApi,tabLocation:e.tabLocation})}update(e){var t;null===(t=this.part)||void 0===t||t.update({params:e.params})}layout(e,t){}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class O{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new _(this.element,this.reactPortalStore,this.component,{group:e.group,containerApi:e.containerApi})}focus(){}update(e){var t,n,o;this.parameters&&(this.parameters.params=e.params),null===(t=this.part)||void 0===t||t.update({params:null!==(o=null===(n=this.parameters)||void 0===n?void 0:n.params)&&void 0!==o?o:{}})}layout(e,t){}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class A{get element(){return this._element}get part(){return this._part}constructor(e,t,n){this.component=e,this.reactPortalStore=t,this._group=n,this.mutableDisposable=new h,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.mutableDisposable.value=new f(this._group.model.onDidAddPanel(()=>{this.updatePanels()}),this._group.model.onDidRemovePanel(()=>{this.updatePanels()}),this._group.model.onDidActivePanelChange(()=>{this.updateActivePanel()}),e.api.onDidActiveChange(()=>{this.updateGroupActive()}),e.api.onDidLocationChange(e=>{this.updateLocation(e.location)})),this._part=new _(this.element,this.reactPortalStore,this.component,{api:e.api,containerApi:e.containerApi,panels:this._group.model.panels,activePanel:this._group.model.activePanel,isGroupActive:this._group.api.isActive,group:this._group,headerPosition:this._group.model.headerPosition,location:e.api.location})}dispose(){var e;this.mutableDisposable.dispose(),null===(e=this._part)||void 0===e||e.dispose()}update(e){var t;null===(t=this._part)||void 0===t||t.update(e.params)}updatePanels(){this.update({params:{panels:this._group.model.panels}})}updateActivePanel(){this.update({params:{activePanel:this._group.model.activePanel}})}updateGroupActive(){this.update({params:{isGroupActive:this._group.api.isActive}})}updateLocation(e){this.update({params:{location:e}})}}class R{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new _(this._element,this.reactPortalStore,this.component,e)}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class S{get element(){return this._element}constructor(e,t){this.component=e,this.reactPortalStore=t,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.display="inline-flex"}init(e){this.part=new _(this._element,this.reactPortalStore,this.component,{tabGroup:e.tabGroup,api:e.api})}update(e){var t;null===(t=this.part)||void 0===t||t.update({tabGroup:e.tabGroup})}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}class H{get element(){return this._element}constructor(e,t){this.component=e,this.reactPortalStore=t,this._element=document.createElement("div"),this._element.className="dv-react-part",this._element.style.display="inline-flex"}init(e){this.part=new _(this._element,this.reactPortalStore,this.component,{group:e.group,api:e.api})}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}function k(e,t){return e?n=>new A(e,t,n):void 0}const G="props.defaultTabComponent";const L=v.forwardRef((e,o)=>{const r=v.useRef(null),a=v.useRef(void 0),[i,s]=b();v.useImperativeHandle(o,()=>r.current,[]);const c=v.useRef({});return v.useEffect(()=>{const n={};t.forEach(t=>{const o=t,r=e[o];o in e&&r!==c.current[o]&&(n[o]=r)}),a.current&&a.current.updateOptions(n),c.current=e},t.map(t=>e[t])),v.useEffect(()=>{var o;if(!r.current)return;const i=null!==(o=e.tabComponents)&&void 0!==o?o:{};e.defaultTabComponent&&(i[G]=e.defaultTabComponent);const c={createLeftHeaderActionComponent:k(e.leftHeaderActionsComponent,{addPortal:s}),createRightHeaderActionComponent:k(e.rightHeaderActionsComponent,{addPortal:s}),createPrefixHeaderActionComponent:k(e.prefixHeaderActionsComponent,{addPortal:s}),createComponent:t=>new E(t.id,e.components[t.name],{addPortal:s}),createTabComponent:e=>new D(e.id,i[e.name],{addPortal:s}),createWatermarkComponent:e.watermarkComponent?()=>new O("watermark",e.watermarkComponent,{addPortal:s}):void 0,defaultTabComponent:e.defaultTabComponent?G:void 0,createContextMenuItemComponent:e=>{if(e.component)return new R(e.id,e.component,{addPortal:s})}},p=function(e){return t.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e);if(e.tabGroupChipComponent){const t=e.tabGroupChipComponent;p.createTabGroupChipComponent=()=>new S(t,{addPortal:s})}if(e.groupDragGhostComponent){const t=e.groupDragGhostComponent;p.createGroupDragGhostComponent=()=>new H(t,{addPortal:s})}const l=n(r.current,Object.assign(Object.assign({},p),c)),{clientWidth:d,clientHeight:u}=r.current;return l.layout(d,u),e.onReady&&e.onReady({api:l}),a.current=l,()=>{a.current=void 0,l.dispose()}},[]),v.useEffect(()=>{if(!a.current)return()=>{};const t=a.current.onDidDrop(t=>{e.onDidDrop&&e.onDidDrop(t)});return()=>{t.dispose()}},[e.onDidDrop]),v.useEffect(()=>{if(!a.current)return()=>{};const t=a.current.onWillDrop(t=>{e.onWillDrop&&e.onWillDrop(t)});return()=>{t.dispose()}},[e.onWillDrop]),v.useEffect(()=>{a.current&&a.current.updateOptions({createTabGroupChipComponent:e.tabGroupChipComponent?()=>new S(e.tabGroupChipComponent,{addPortal:s}):void 0})},[e.tabGroupChipComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createGroupDragGhostComponent:e.groupDragGhostComponent?()=>new H(e.groupDragGhostComponent,{addPortal:s}):void 0})},[e.groupDragGhostComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createComponent:t=>new E(t.id,e.components[t.name],{addPortal:s})})},[e.components]),v.useEffect(()=>{var t;if(!a.current)return;const n=null!==(t=e.tabComponents)&&void 0!==t?t:{};e.defaultTabComponent&&(n[G]=e.defaultTabComponent),a.current.updateOptions({defaultTabComponent:e.defaultTabComponent?G:void 0,createTabComponent:e=>new D(e.id,n[e.name],{addPortal:s})})},[e.tabComponents,e.defaultTabComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createWatermarkComponent:e.watermarkComponent?()=>new O("watermark",e.watermarkComponent,{addPortal:s}):void 0})},[e.watermarkComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createRightHeaderActionComponent:k(e.rightHeaderActionsComponent,{addPortal:s})})},[e.rightHeaderActionsComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createLeftHeaderActionComponent:k(e.leftHeaderActionsComponent,{addPortal:s})})},[e.leftHeaderActionsComponent]),v.useEffect(()=>{a.current&&a.current.updateOptions({createPrefixHeaderActionComponent:k(e.prefixHeaderActionsComponent,{addPortal:s})})},[e.prefixHeaderActionsComponent]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:r},i)});L.displayName="DockviewComponent","function"==typeof SuppressedError&&SuppressedError;const x=()=>v.createElement("svg",{height:"11",width:"11",viewBox:"0 0 28 28","aria-hidden":"false",focusable:!1,className:"dv-svg"},v.createElement("path",{d:"M2.1 27.3L0 25.2L11.55 13.65L0 2.1L2.1 0L13.65 11.55L25.2 0L27.3 2.1L15.75 13.65L27.3 25.2L25.2 27.3L13.65 15.75L2.1 27.3Z"}));const j=e=>{var{api:t,containerApi:n,params:o,hideClose:r,closeActionOverride:a,onPointerDown:i,onPointerUp:s,onPointerLeave:c,tabLocation:p}=e,l=function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]])}return n}(e,["api","containerApi","params","hideClose","closeActionOverride","onPointerDown","onPointerUp","onPointerLeave","tabLocation"]);const d=function(e){const[t,n]=v.useState(e.title);return v.useEffect(()=>{const o=e.onDidTitleChange(e=>{n(e.title)});return t!==e.title&&n(e.title),()=>{o.dispose()}},[e]),t}(t),u=v.useRef(!1),m=v.useCallback(e=>{e.preventDefault(),a?a():t.close()},[t,a]),h=v.useCallback(e=>{e.preventDefault()},[]),f=v.useCallback(e=>{u.current=1===e.button,null==i||i(e)},[i]),C=v.useCallback(e=>{u&&1===e.button&&!r&&(u.current=!1,m(e)),null==s||s(e)},[s,m,r]),P=v.useCallback(e=>{u.current=!1,null==c||c(e)},[c]);return v.createElement("div",Object.assign({"data-testid":"dockview-dv-default-tab"},l,{onPointerDown:f,onPointerUp:C,onPointerLeave:P,className:"dv-default-tab"}),v.createElement("span",{className:"dv-default-tab-content"},d),!r&&v.createElement("div",{className:"dv-default-tab-action",onPointerDown:h,onClick:m},v.createElement(x,null)))};class N extends l{constructor(e,t,n,o){super(e,t),this.reactComponent=n,this.reactPortalStore=o}getComponent(){var e,t;return new _(this.element,this.reactPortalStore,this.reactComponent,{params:null!==(t=null===(e=this._params)||void 0===e?void 0:e.params)&&void 0!==t?t:{},api:this.api,containerApi:new d(this._params.accessor)})}}const T=v.forwardRef((e,t)=>{const n=v.useRef(null),a=v.useRef(void 0),[i,s]=b();v.useImperativeHandle(t,()=>n.current,[]);const c=v.useRef({});return v.useEffect(()=>{const t={};o.forEach(n=>{const o=n,r=e[o];o in e&&r!==c.current[o]&&(t[o]=r)}),a.current&&a.current.updateOptions(t),c.current=e},o.map(t=>e[t])),v.useEffect(()=>{if(!n.current)return()=>{};const t={createComponent:t=>new N(t.id,t.name,e.components[t.name],{addPortal:s})},i=r(n.current,Object.assign(Object.assign({},function(e){return o.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),t)),{clientWidth:c,clientHeight:p}=n.current;return i.layout(c,p),e.onReady&&e.onReady({api:i}),a.current=i,()=>{a.current=void 0,i.dispose()}},[]),v.useEffect(()=>{a.current&&a.current.updateOptions({createComponent:t=>new N(t.id,t.name,e.components[t.name],{addPortal:s})})},[e.components]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},i)});T.displayName="SplitviewComponent";class I extends u{constructor(e,t,n,o){super(e,t),this.reactComponent=n,this.reactPortalStore=o}getComponent(){var e,t;return new _(this.element,this.reactPortalStore,this.reactComponent,{params:null!==(t=null===(e=this._params)||void 0===e?void 0:e.params)&&void 0!==t?t:{},api:this.api,containerApi:new m(this._params.accessor)})}}const W=v.forwardRef((e,t)=>{const n=v.useRef(null),o=v.useRef(void 0),[r,s]=b();v.useImperativeHandle(t,()=>n.current,[]);const c=v.useRef({});return v.useEffect(()=>{const t={};a.forEach(n=>{const o=n,r=e[o];o in e&&r!==c.current[o]&&(t[o]=r)}),o.current&&o.current.updateOptions(t),c.current=e},a.map(t=>e[t])),v.useEffect(()=>{if(!n.current)return()=>{};const t={createComponent:t=>new I(t.id,t.name,e.components[t.name],{addPortal:s})},r=i(n.current,Object.assign(Object.assign({},function(e){return a.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),t)),{clientWidth:c,clientHeight:p}=n.current;return r.layout(c,p),e.onReady&&e.onReady({api:r}),o.current=r,()=>{o.current=void 0,r.dispose()}},[]),v.useEffect(()=>{o.current&&o.current.updateOptions({createComponent:t=>new I(t.id,t.name,e.components[t.name],{addPortal:s})})},[e.components]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},r)});W.displayName="GridviewComponent";class B{get element(){return this._element}constructor(e,t,n){this.id=e,this.component=t,this.reactPortalStore=n,this._element=document.createElement("div"),this._element.style.height="100%",this._element.style.width="100%"}init(e){this.part=new _(this.element,this.reactPortalStore,this.component,{params:e.params,api:e.api,title:e.title,containerApi:e.containerApi})}toJSON(){return{id:this.id}}update(e){var t;null===(t=this.part)||void 0===t||t.update(e.params)}dispose(){var e;null===(e=this.part)||void 0===e||e.dispose()}}const F=v.forwardRef((e,t)=>{const n=v.useRef(null),o=v.useRef(void 0),[r,a]=b();v.useImperativeHandle(t,()=>n.current,[]);const i=v.useRef({});return v.useEffect(()=>{const t={};s.forEach(n=>{const o=n,r=e[o];o in e&&r!==i.current[o]&&(t[o]=r)}),o.current&&o.current.updateOptions(t),i.current=e},s.map(t=>e[t])),v.useEffect(()=>{var t;if(!n.current)return()=>{};const r=null!==(t=e.headerComponents)&&void 0!==t?t:{},i={createComponent:t=>new B(t.id,e.components[t.name],{addPortal:a}),createHeaderComponent:e=>new B(e.id,r[e.name],{addPortal:a})},p=c(n.current,Object.assign(Object.assign({},function(e){return s.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{})}(e)),i)),{clientWidth:l,clientHeight:d}=n.current;return p.layout(l,d),e.onReady&&e.onReady({api:p}),o.current=p,()=>{o.current=void 0,p.dispose()}},[]),v.useEffect(()=>{o.current&&o.current.updateOptions({createComponent:t=>new B(t.id,e.components[t.name],{addPortal:a})})},[e.components]),v.useEffect(()=>{var t;if(!o.current)return;const n=null!==(t=e.headerComponents)&&void 0!==t?t:{};o.current.updateOptions({createHeaderComponent:e=>new B(e.id,n[e.name],{addPortal:a})})},[e.headerComponents]),v.useEffect(()=>{if(!o.current)return()=>{};const t=o.current.onDidDrop(t=>{e.onDidDrop&&e.onDidDrop(t)});return()=>{t.dispose()}},[e.onDidDrop]),v.createElement("div",{style:{height:"100%",width:"100%"},ref:n},r)});F.displayName="PaneviewComponent";export{j as DockviewDefaultTab,L as DockviewReact,W as GridviewReact,F as PaneviewReact,_ as ReactPart,w as ReactPartContext,T as SplitviewReact,y as isReactComponent,b as usePortalsLifecycle};
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * dockview-react
3
- * @version 6.2.2
3
+ * @version 6.4.0
4
4
  * @link https://github.com/mathuo/dockview
5
5
  * @license MIT
6
6
  */
@@ -2344,6 +2344,16 @@
2344
2344
  /* Enhanced GPU acceleration during drag */
2345
2345
  will-change: transform, opacity;
2346
2346
  }
2347
+ .dv-resize-container .dv-resize-handle-top,
2348
+ .dv-resize-container .dv-resize-handle-bottom,
2349
+ .dv-resize-container .dv-resize-handle-left,
2350
+ .dv-resize-container .dv-resize-handle-right,
2351
+ .dv-resize-container .dv-resize-handle-topleft,
2352
+ .dv-resize-container .dv-resize-handle-topright,
2353
+ .dv-resize-container .dv-resize-handle-bottomleft,
2354
+ .dv-resize-container .dv-resize-handle-bottomright {
2355
+ touch-action: none;
2356
+ }
2347
2357
  .dv-resize-container .dv-resize-handle-top {
2348
2358
  height: 4px;
2349
2359
  width: calc(100% - 8px);
@@ -2416,6 +2426,55 @@
2416
2426
  position: absolute;
2417
2427
  cursor: se-resize;
2418
2428
  }
2429
+ @media (pointer: coarse) {
2430
+ .dv-resize-container .dv-resize-handle-top,
2431
+ .dv-resize-container .dv-resize-handle-bottom {
2432
+ height: 16px;
2433
+ width: calc(100% - 48px);
2434
+ left: 24px;
2435
+ }
2436
+ .dv-resize-container .dv-resize-handle-top {
2437
+ top: -10px;
2438
+ }
2439
+ .dv-resize-container .dv-resize-handle-bottom {
2440
+ bottom: -10px;
2441
+ }
2442
+ .dv-resize-container .dv-resize-handle-left,
2443
+ .dv-resize-container .dv-resize-handle-right {
2444
+ width: 16px;
2445
+ height: calc(100% - 48px);
2446
+ top: 24px;
2447
+ }
2448
+ .dv-resize-container .dv-resize-handle-left {
2449
+ left: -10px;
2450
+ }
2451
+ .dv-resize-container .dv-resize-handle-right {
2452
+ right: -10px;
2453
+ }
2454
+ .dv-resize-container .dv-resize-handle-topleft,
2455
+ .dv-resize-container .dv-resize-handle-topright,
2456
+ .dv-resize-container .dv-resize-handle-bottomleft,
2457
+ .dv-resize-container .dv-resize-handle-bottomright {
2458
+ height: 24px;
2459
+ width: 24px;
2460
+ }
2461
+ .dv-resize-container .dv-resize-handle-topleft {
2462
+ top: -12px;
2463
+ left: -12px;
2464
+ }
2465
+ .dv-resize-container .dv-resize-handle-topright {
2466
+ top: -12px;
2467
+ right: -12px;
2468
+ }
2469
+ .dv-resize-container .dv-resize-handle-bottomleft {
2470
+ bottom: -12px;
2471
+ left: -12px;
2472
+ }
2473
+ .dv-resize-container .dv-resize-handle-bottomright {
2474
+ bottom: -12px;
2475
+ right: -12px;
2476
+ }
2477
+ }
2419
2478
  .dv-render-overlay {
2420
2479
  --dv-overlay-z-index: var(--dv-overlay-z-index, 999);
2421
2480
  position: absolute;
@@ -2633,6 +2692,25 @@
2633
2692
  transition-duration: var(--dv-active-sash-transition-duration, 0.1s);
2634
2693
  transition-delay: var(--dv-active-sash-transition-delay, 0.5s);
2635
2694
  }
2695
+ @media (pointer: coarse) {
2696
+ .dv-split-view-container .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
2697
+ content: "";
2698
+ position: absolute;
2699
+ background: transparent;
2700
+ }
2701
+ .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
2702
+ top: 0;
2703
+ bottom: 0;
2704
+ left: -10px;
2705
+ right: -10px;
2706
+ }
2707
+ .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash:not(.dv-disabled)::before {
2708
+ left: 0;
2709
+ right: 0;
2710
+ top: -10px;
2711
+ bottom: -10px;
2712
+ }
2713
+ }
2636
2714
  .dv-split-view-container .dv-view-container {
2637
2715
  position: relative;
2638
2716
  height: 100%;
@@ -2704,6 +2782,11 @@
2704
2782
  .dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action {
2705
2783
  visibility: visible;
2706
2784
  }
2785
+ @media (hover: none) {
2786
+ .dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action {
2787
+ visibility: visible;
2788
+ }
2789
+ }
2707
2790
  .dv-tab .dv-default-tab {
2708
2791
  position: relative;
2709
2792
  height: 100%;
@@ -2728,6 +2811,11 @@
2728
2811
  border-radius: 2px;
2729
2812
  background-color: var(--dv-icon-hover-background-color);
2730
2813
  }
2814
+ @media (pointer: coarse) {
2815
+ .dv-tab .dv-default-tab .dv-default-tab-action {
2816
+ padding: 8px;
2817
+ }
2818
+ }
2731
2819
  .dv-tabs-overflow-dropdown-default {
2732
2820
  height: 100%;
2733
2821
  color: var(--dv-activegroup-hiddenpanel-tab-color);
@@ -2748,6 +2836,7 @@
2748
2836
  border-radius: 2px;
2749
2837
  background-color: var(--dv-icon-hover-background-color);
2750
2838
  }
2839
+ @charset "UTF-8";
2751
2840
  .dv-tabs-container {
2752
2841
  display: flex;
2753
2842
  position: relative;
@@ -2757,12 +2846,29 @@
2757
2846
  /* GPU optimizations for smooth scrolling */
2758
2847
  will-change: scroll-position;
2759
2848
  transform: translate3d(0, 0, 0);
2849
+ /**
2850
+ * Stop scroll-chaining at the tab strip so that wheel / trackpad
2851
+ * overscroll past the strip's edges doesn't trigger the browser's
2852
+ * swipe-to-go-back-or-forward gesture (and doesn't scroll the page
2853
+ * either). `contain` keeps the native bounce visuals; `none` would
2854
+ * also disable them.
2855
+ */
2856
+ overscroll-behavior: contain;
2857
+ /**
2858
+ * Empty space between tabs (and the scrollbar lane) keeps pan-x so a
2859
+ * flick on those areas produces native momentum scroll. The tab and
2860
+ * chip elements themselves opt out (`touch-action: none`) so the
2861
+ * pointer drag source owns the gesture from pointerdown — a flick on
2862
+ * a tab or chip always becomes a drag, regardless of direction.
2863
+ */
2864
+ touch-action: pan-x;
2760
2865
  }
2761
2866
  .dv-tabs-container.dv-tabs-container-vertical {
2762
2867
  width: 100%;
2763
2868
  height: fit-content;
2764
2869
  max-height: 100%;
2765
2870
  writing-mode: vertical-rl;
2871
+ touch-action: pan-y;
2766
2872
  }
2767
2873
  .dv-tabs-container.dv-horizontal .dv-tab:not(:first-child)::before, .dv-tabs-container.dv-vertical .dv-tab:not(:first-child)::before {
2768
2874
  content: " ";
@@ -2802,7 +2908,10 @@
2802
2908
  }
2803
2909
 
2804
2910
  .dv-tab {
2805
- -webkit-user-drag: element;
2911
+ user-select: none;
2912
+ -webkit-user-select: none;
2913
+ -moz-user-select: none;
2914
+ -ms-user-select: none;
2806
2915
  outline: none;
2807
2916
  padding: 0.25rem 0.5rem;
2808
2917
  cursor: pointer;
@@ -2810,6 +2919,7 @@
2810
2919
  box-sizing: border-box;
2811
2920
  font-size: var(--dv-tab-font-size);
2812
2921
  margin: var(--dv-tab-margin);
2922
+ touch-action: none;
2813
2923
  }
2814
2924
  .dv-tab.dv-tab--shifting {
2815
2925
  will-change: transform, margin-left, margin-right, margin-top, margin-bottom;
@@ -2860,6 +2970,7 @@
2860
2970
  white-space: nowrap;
2861
2971
  box-sizing: border-box;
2862
2972
  line-height: 1;
2973
+ touch-action: none;
2863
2974
  background-color: var(--dv-tab-group-color);
2864
2975
  color: white;
2865
2976
  }
@@ -3037,6 +3148,11 @@
3037
3148
  .dv-tabs-and-actions-container .dv-void-container {
3038
3149
  display: flex;
3039
3150
  flex-grow: 1;
3151
+ user-select: none;
3152
+ -webkit-user-select: none;
3153
+ -moz-user-select: none;
3154
+ -ms-user-select: none;
3155
+ touch-action: none;
3040
3156
  }
3041
3157
  .dv-tabs-and-actions-container .dv-void-container.dv-draggable {
3042
3158
  cursor: grab;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dockview-react",
3
- "version": "6.2.2",
3
+ "version": "6.4.0",
4
4
  "description": "React docking layout manager — tabs, groups, grids, splitviews, drag and drop, floating panels",
5
5
  "keywords": [
6
6
  "splitview",
@@ -20,6 +20,8 @@
20
20
  "drag-and-drop",
21
21
  "drag",
22
22
  "drop",
23
+ "touch",
24
+ "mobile",
23
25
  "typescript",
24
26
  "zero-dependency",
25
27
  "ide-layout",
@@ -68,6 +70,6 @@
68
70
  "format:check": "prettier --check 'src/**/*.{ts,tsx,js,jsx}'"
69
71
  },
70
72
  "dependencies": {
71
- "dockview": "^6.2.2"
73
+ "dockview": "^6.4.0"
72
74
  }
73
75
  }