@deephaven/code-studio 0.61.1 → 0.61.2-beta.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.
Files changed (29) hide show
  1. package/build/assets/AppRoot-0b838593.js +5 -0
  2. package/build/assets/AppRoot-0b838593.js.map +1 -0
  3. package/build/assets/ControlType-b74763eb.js +22 -0
  4. package/build/assets/ControlType-b74763eb.js.map +1 -0
  5. package/build/assets/{FontBootstrap-08ab4efe.js → FontBootstrap-813f5b26.js} +2 -2
  6. package/build/assets/{FontBootstrap-08ab4efe.js.map → FontBootstrap-813f5b26.js.map} +1 -1
  7. package/build/assets/{IrisGrid-b1db485c.js → IrisGrid-9d785221.js} +6 -6
  8. package/build/assets/{IrisGrid-b1db485c.js.map → IrisGrid-9d785221.js.map} +1 -1
  9. package/build/assets/{StyleGuideRoot-ec2ecd3d.js → StyleGuideRoot-3e6b5532.js} +5 -5
  10. package/build/assets/{StyleGuideRoot-ec2ecd3d.js.map → StyleGuideRoot-3e6b5532.js.map} +1 -1
  11. package/build/assets/{index-d7bc9619.js → index-9bba811f.js} +2 -2
  12. package/build/assets/{index-d7bc9619.js.map → index-9bba811f.js.map} +1 -1
  13. package/build/assets/{index-d3a19fa4.js → index-b412d367.js} +6 -6
  14. package/build/assets/index-b412d367.js.map +1 -0
  15. package/build/assets/index-f7db9d10.js +2 -0
  16. package/build/assets/index-f7db9d10.js.map +1 -0
  17. package/build/assets/useUser-daf248b8.js +2 -0
  18. package/build/assets/useUser-daf248b8.js.map +1 -0
  19. package/build/index.html +1 -1
  20. package/package.json +31 -31
  21. package/build/assets/AppRoot-12ae9481.js +0 -5
  22. package/build/assets/AppRoot-12ae9481.js.map +0 -1
  23. package/build/assets/ControlType-9fd03f7c.js +0 -22
  24. package/build/assets/ControlType-9fd03f7c.js.map +0 -1
  25. package/build/assets/index-9592d8ee.js +0 -2
  26. package/build/assets/index-9592d8ee.js.map +0 -1
  27. package/build/assets/index-d3a19fa4.js.map +0 -1
  28. package/build/assets/useUser-456d27e9.js +0 -2
  29. package/build/assets/useUser-456d27e9.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{r as s,C as c,H as Pe,G as K,D as xe,F as A,N as L,ao as Ee,ap as De,aq as je,ab as Le,ar as Te,ac as _e,S as H,V as Ae,ag as Ne}from"./vendor-b0c4c01d.js";import{M as Re,c as ke,j as Ie,ah as $e,ai as Me,L as ce,B as fe}from"./index-9bba811f.js";import{B as U,al as We,aU as X,a$ as Be,u as Ke,aK as N,b4 as Ue,bw as Fe,c0 as Ge,bz as qe,bB as ze,c1 as Ve,Y as He,a1 as Ye,a0 as Je}from"./ControlType-b74763eb.js";function Qe(e){var r=e;e instanceof CustomEvent&&(r=e.detail);var t="";if(r instanceof Error?t=r.message:r!=null&&(t="".concat(r)),t=t.trim(),t.length>0)return t}function Xe(e,r){var[t,n]=s.useState(!0),[a,o]=s.useState(e),[u,i]=s.useState(e),[l,f]=s.useState(r);return(e!==u||r!==l)&&(n(!0),i(e),f(r)),s.useEffect(()=>{var y=!1,h=setTimeout(()=>{y||(n(!1),o(e))},r);return()=>{y=!0,clearTimeout(h)}},[e,r]),{isDebouncing:t,value:a}}function de(e,r){s.useEffect(()=>{if(e!=null){var t=new window.ResizeObserver(r);return t.observe(e),()=>{e!=null&&t.unobserve(e)}}},[e,r])}function Yr(e){var{blockInteraction:r=!0,children:t,debounceMs:n,isOpen:a=!1}=e,{value:o}=Xe(a,n);return c.jsxs(c.Fragment,{children:[r&&a&&c.jsx("div",{className:"modal-backdrop",style:{backgroundColor:"transparent"},"data-testid":"debounced-modal-backdrop"}),Pe.cloneElement(t,{isOpen:a&&o})]})}function Jr(e){var{className:r,icon:t,isOpen:n=!1,subtitle:a,title:o}=e;return c.jsx(Re,{isOpen:n,className:r,children:c.jsx(ke,{children:c.jsxs("div",{className:"info-modal",children:[t!=null&&c.jsx("div",{className:"message-icon",children:c.jsx(K,{icon:t})}),c.jsx("div",{className:"message-header",children:o}),a!=null&&c.jsx("div",{className:"message-content",children:a})]})})})}function ve(e,r,t){return r=Ze(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Ze(e){var r=er(e,"string");return typeof r=="symbol"?r:String(r)}function er(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}class x extends s.Component{static handleEnter(r){var t=r;t.style.height="0"}static handleEntering(r){var t=r;t.style.height="".concat(x.getHeight(t),"px")}static handleExiting(r){var t=r;t.style.height="0"}static handleExit(r){var t=r;t.style.height="".concat(x.getHeight(t),"px")}static getHeight(r){var t=r.scrollWidth-r.clientWidth;return r.scrollHeight-t}constructor(r){super(r),this.handleEntered=this.handleEntered.bind(this)}handleEntered(r){var t=r;t.style.height="";var{autoFocusOnShow:n}=this.props;if(n!==void 0&&n){var a=t.querySelector("input, select, textarea");a?.focus()}}render(){var{children:r,className:t,in:n,"data-testid":a}=this.props;return c.jsx(xe,{in:n,classNames:{enterActive:"collapsing",enterDone:"collapse show",exitActive:"collapsing",exitDone:"collapse"},onEnter:x.handleEnter,onEntering:x.handleEntering,onEntered:this.handleEntered,onExit:x.handleExit,onExiting:x.handleExiting,timeout:350,children:o=>c.jsx("div",{className:A({collapse:o==="exited"},t),"data-testid":a,children:r})})}}ve(x,"propTypes",{className:L.string,in:L.bool.isRequired,children:L.node.isRequired,autoFocusOnShow:L.bool,"data-testid":L.string});ve(x,"defaultProps",{className:"",autoFocusOnShow:!1,"data-testid":void 0});const Qr=x;function Z(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function M(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?Z(Object(t),!0).forEach(function(n){rr(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Z(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function rr(e,r,t){return r=tr(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function tr(e){var r=nr(e,"string");return typeof r=="symbol"?r:String(r)}function nr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}var ge=s.memo(e=>{var{tab:r,onClose:t,onSelect:n,isActive:a,activeRef:o,index:u,isDraggable:i,contextActions:l}=e,{key:f,isClosable:y=t!=null,title:h}=r;return c.jsx(Ee,{draggableId:f,index:u,isDragDisabled:!i,children:(w,C)=>c.jsxs("div",{className:"context-menu-wrapper",ref:a?o:null,children:[c.jsxs("div",M(M(M({ref:w.innerRef},w.draggableProps),w.dragHandleProps),{},{className:A("btn btn-link btn-nav-tab",{active:a},{dragging:C.isDragging}),"data-testid":"btn-nav-tab-".concat(h),role:"tab",tabIndex:0,onClick:O=>{O.target.focus(),n(f)},onKeyPress:O=>{O.key==="Enter"&&n(f)},children:[h,y&&c.jsx(U,{kind:"ghost",className:"btn-nav-tab-close",onClick:O=>{t?.(f),O.stopPropagation(),O.preventDefault()},icon:Ie,tooltip:"Close"})]})),c.jsx(We,{actions:l})]})},f)});ge.displayName="NavTab";const ar=ge;function ee(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function re(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?ee(Object(t),!0).forEach(function(n){ir(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ee(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function ir(e,r,t){return r=or(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function or(e){var r=sr(e,"string");return typeof r=="symbol"?r:String(r)}function sr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}var lr=500,ur=.01,cr=5e-4;function te(e){return e.scrollLeft===0}function ne(e){return e.scrollLeft+e.clientWidth===e.scrollWidth||e.scrollWidth===0}function fr(e,r,t){var{isClosable:n=!1,key:a}=e,o=[];if(n&&t!=null){o.push({title:"Close",order:10,group:20,action:()=>{t(a)}});for(var u=!0,i=r.length-1;i>0&&r[i].key!==e.key;i-=1)if(r[i].isClosable===!0){u=!1;break}o.push({title:"Close to the Right",order:20,group:20,action:()=>{for(var l=r.length-1;l>0&&r[l].key!==a;l-=1)r[l].isClosable===!0&&t(r[l].key)},disabled:u}),o.push({title:"Close All",order:30,group:20,action:()=>{r.forEach(l=>{l.isClosable===!0&&t(l.key)})}})}return o}function Xr(e){var{activeKey:r,tabs:t,onSelect:n,onReorder:a,onClose:o,makeContextActions:u}=e,i=s.useRef(),[l,f]=s.useState(!0),[y,h]=s.useState(!0),[w,C]=s.useState(!0),O=s.useCallback(()=>{i.current!=null&&(i.current.clientWidth<i.current.scrollWidth&&t.length>0?f(!0):f(!1),h(te(i.current)),C(ne(i.current)))},[t]);de(i.current,O);var T=s.useCallback(d=>{X.stopDragging(),d.destination&&a?.(d.source.index,d.destination.index)},[a]),S=s.useCallback(()=>{if(i.current!=null){var d=te(i.current);d!==y&&h(d);var v=ne(i.current);v!==w&&C(v)}},[y,w]),m=s.useRef({cancelClick:!1}),k=s.useCallback(()=>{if(!(i.current==null||m.current.cancelClick))for(var{children:d}=i.current,v=d.length-1;v>=0;v-=1){var g=d[v];if(g.offsetLeft<i.current.scrollLeft-5){g.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"});return}}},[]),Y=s.useCallback(()=>{if(!(i.current==null||m.current.cancelClick))for(var{children:d}=i.current,v=0;v<d.length;v+=1){var g=d[v];if(g.offsetLeft+5>i.current.scrollLeft+i.current.offsetWidth){g.scrollIntoView({behavior:"smooth",block:"nearest",inline:"end"});return}}},[]),E=s.useCallback(function(d,v){var g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,p=arguments.length>3?arguments[3]:void 0,P=i.current;P!=null&&(m.current.cancelClick=!0,d==="left"?P.scrollLeft=v-g:d==="right"&&(P.scrollLeft=v+g),m.current.rAF=requestAnimationFrame(_=>{var J=p??_,Q=_-J,$=ur*Q+.5*cr*Q**2;$=Math.min($,P.scrollWidth),E(d,v,$,J)}))},[]),b=s.useCallback(()=>{var{holdTimer:d,rAF:v}=m.current;d!=null&&(clearTimeout(d),m.current.holdTimer=void 0),v!=null&&(cancelAnimationFrame(v),m.current.rAF=void 0),window.removeEventListener("mouseup",b)},[]);s.useEffect(()=>()=>window.removeEventListener("mouseup",b),[b]);var D=s.useCallback(d=>{i.current!=null&&(m.current.holdTimer=window.setTimeout(E,lr,d,i.current.scrollLeft)),m.current.cancelClick=!1,window.addEventListener("mouseup",b)},[b,E]),ye=s.useCallback(()=>{D("left")},[D]),we=s.useCallback(()=>{D("right")},[D]);s.useEffect(function(){var v,g=p=>{p.stopPropagation(),p.preventDefault();var P=p.currentTarget,_=Math.abs(p.deltaY)>Math.abs(p.deltaX)?p.deltaY:p.deltaX;P.scrollLeft+=Le(_,-30,30)};return(v=i.current)===null||v===void 0||v.addEventListener("wheel",g),()=>{var p;(p=i.current)===null||p===void 0||p.removeEventListener("wheel",g)}},[]);var Ce=s.useMemo(()=>{var d=new Map;return t.forEach(v=>{var{key:g}=v,p=[()=>fr(v,t,o),()=>{var P;return(P=u?.(v))!==null&&P!==void 0?P:[]}];d.set(g,p)}),d},[u,t,o]),I=s.useRef(null),Se=t.find(d=>d.key===r),Oe=t.map((d,v)=>{var{key:g}=d,p=d===Se;return c.jsx(ar,{tab:d,index:v,isActive:p,activeRef:I,onSelect:n,onClose:o,isDraggable:a!=null,contextActions:Ce.get(g)},g)});return s.useEffect(function(){I.current!=null&&I.current.scrollIntoView({block:"nearest",inline:"nearest"})},[r]),c.jsxs("nav",{className:"nav-container",children:[l&&c.jsx(U,{kind:"ghost",icon:c.jsx(K,{icon:$e,transform:"grow-4"}),className:"tab-controls-btn tab-controls-btn-left",tooltip:"Scroll left",onClick:k,onMouseDown:ye,disabled:y}),c.jsx(De,{onDragStart:X.startDragging,onDragEnd:T,children:c.jsx(je,{droppableId:"droppable-tab-navigation",direction:"horizontal",children:(d,v)=>c.jsxs("div",re(re({ref:g=>{g!=null&&(i.current=g,d.innerRef(g))}},d.droppableProps),{},{className:A("nav nav-tabs",{dragging:v.draggingFromThisWith}),role:"tablist",onScroll:S,children:[Oe,d.placeholder]}))})}),l&&c.jsx(U,{kind:"ghost",icon:c.jsx(K,{icon:Me,transform:"grow-4"}),className:"tab-controls-btn tab-controls-btn-right",tooltip:"Scroll right",onClick:Y,onMouseDown:we,disabled:w})]})}function Zr(){var{selectedThemeKey:e,setSelectedThemeKey:r,themes:t}=Be(),n=s.useCallback(a=>{r(a)},[r]);return c.jsx(Te,{label:"Pick a color scheme",items:t,selectedKey:e,onSelectionChange:n,children:a=>c.jsx(_e,{children:a.name},a.themeKey)})}function et(e){var{className:r,style:t}=e;return c.jsx("div",{className:A("dh-logo",r),style:t})}function dr(e,r){var t=Ke(),n=s.useMemo(()=>new t.CoreClient(e,r),[t,e,r]);return s.useEffect(()=>()=>{n.disconnect()},[n]),n}var pe=s.createContext(null);function rt(e){var{serverUrl:r,options:t,children:n}=e,a=dr(r,t);return c.jsx(pe.Provider,{value:a,children:n})}function vr(){return N(pe,"No Client available in useClient. Was code wrapped in ClientBootstrap or ClientContext.Provider?")}function ae(e,r,t,n,a,o,u){try{var i=e[o](u),l=i.value}catch(f){t(f);return}i.done?r(l):Promise.resolve(l).then(n,a)}function gr(e){return function(){var r=this,t=arguments;return new Promise(function(n,a){var o=e.apply(r,t);function u(l){ae(o,n,a,u,i,"next",l)}function i(l){ae(o,n,a,u,i,"throw",l)}u(void 0)})}}var W=ce.module("MessageUtils"),tt="io.deephaven.message.LoginOptions.request",pr="io.deephaven.message.SessionDetails.request",nt="io.deephaven.broadcast",hr="io.deephaven.broadcast.Login",mr="io.deephaven.broadcast.Logout";function he(e){var r=e;return r!=null&&typeof r.id=="string"&&typeof r.message=="string"}function at(e){return he(e)&&e.message===hr}function it(e){return he(e)&&e.message===mr}function br(e){var r=e;return r!=null&&typeof r.id=="string"}function yr(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:H(),t=arguments.length>2?arguments[2]:void 0;return{message:e,id:r,payload:t}}function ot(e,r){return{id:e,payload:r}}function wr(){return window.opener!=null?window.opener:window.parent!=null&&window.parent!==window?window.parent:null}function Cr(e){return F.apply(this,arguments)}function F(){return F=gr(function*(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3e4,t=wr();if(t==null)throw new Error("window parent is null, unable to send request.");return new Promise((n,a)=>{var o,u=H(),i=l=>{var{data:f}=l;if(!br(f)){W.debug("Ignoring non-deephaven response",f);return}if(W.debug("Received message",f),f?.id!==u){W.debug("Ignore message, id doesn't match",f);return}window.clearTimeout(o),window.removeEventListener("message",i),n(f.payload)};window.addEventListener("message",i),o=window.setTimeout(()=>{window.removeEventListener("message",i),a(new Ue("Request timed out"))},r),t.postMessage(yr(e,u),"*")})}),F.apply(this,arguments)}function Sr(e,r,t){return r=Or(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Or(e){var r=Pr(e,"string");return typeof r=="symbol"?r:String(r)}function Pr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}class xr extends Error{constructor(){super(...arguments),Sr(this,"isNoConsolesError",!0)}}function Er(e){return e.isNoConsolesError}function ie(e,r,t,n,a,o,u){try{var i=e[o](u),l=i.value}catch(f){t(f);return}i.done?r(l):Promise.resolve(l).then(n,a)}function R(e){return function(){var r=this,t=arguments;return new Promise(function(n,a){var o=e.apply(r,t);function u(l){ie(o,n,a,u,i,"next",l)}function i(l){ie(o,n,a,u,i,"throw",l)}u(void 0)})}}var j=ce.module("SessionUtils");function st(e,r){return j.info("Starting connection to '".concat(r,"'...")),new e.IdeConnection(r)}function Dr(e,r,t){return G.apply(this,arguments)}function G(){return G=R(function*(e,r,t){j.info("Getting console types...");var n=yield r.getConsoleTypes();if(n.length===0)throw new xr("No console types available");j.info("Available types:",n);var a=n[0];j.info("Starting session with type",a);var o=yield r.startSession(a),u={type:a,id:H.generate()};return j.info("Console session established",u),{session:o,config:u,connection:r,details:t,dh:e}}),G.apply(this,arguments)}function lt(e,r,t){return j.info("createCoreClient",r),new e.CoreClient(r,t)}function jr(e){return e!=null&&typeof e=="object"}function Lr(){return q.apply(this,arguments)}function q(){return q=R(function*(){var e=yield Cr(pr);if(!jr(e))throw new Error("Unexpected session details response: ".concat(e));return e}),q.apply(this,arguments)}function ut(){return z.apply(this,arguments)}function z(){return z=R(function*(){var e=new URLSearchParams(window.location.search);switch(e.get("authProvider")){case"parent":return Lr()}return{}}),z.apply(this,arguments)}function ct(e,r,t){return V.apply(this,arguments)}function V(){return V=R(function*(e,r,t){var n;try{n=yield Dr(e,r,t)}catch(a){if(!Er(a))throw a}return n}),V.apply(this,arguments)}function oe(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function Tr(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?oe(Object(t),!0).forEach(function(n){_r(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):oe(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function _r(e,r,t){return r=Ar(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Ar(e){var r=Nr(e,"string");return typeof r=="symbol"?r:String(r)}function Nr(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}var Rr=100,B=()=>{},kr=Object.freeze({});function Ir(e){var{id:r="default",children:t,emptyDashboard:n,layoutConfig:a,layoutSettings:o=kr,onLayoutConfigChange:u=B,onGoldenLayoutChange:i=B,onLayoutInitialized:l=B,fallbackComponent:f=Ve,hydrate:y,dehydrate:h,panelWrapper:w}=e,C=s.useRef(null),[O,T]=s.useState(!1),[S,m]=s.useState();s.useEffect(function(){if(!C.current){m(void 0);return}var E=Tr({},Fe.makeDefaultLayout());E.settings===void 0&&(E.settings={}),Object.assign(E.settings,o),E.content=[];var b=new Ge(E,C.current),D=()=>{b.off("initialised",D),T(!0)};return b.on("initialised",D),f!=null&&b.setFallbackComponent(f),b.init(),m(b),i(b),()=>{b.destroy()}},[o,f,i,T,m]);var k=s.useMemo(()=>Ae(()=>{S!=null&&S.isInitialised&&S?.updateSize()},Rr),[S]);return de(C.current,k),c.jsxs("div",{className:"dashboard-container w-100 h-100",children:[c.jsx("div",{className:"w-100 h-100",ref:C}),O&&S&&c.jsx(qe.Provider,{value:S,children:c.jsx(ze,{emptyDashboard:n,id:r,layout:S,layoutConfig:a,onLayoutChange:u,onLayoutInitialized:l,hydrate:y,dehydrate:h,panelWrapper:w,children:t})})]})}var me="CREATE_DASHBOARD";function ft(e,r){e.on(me,r)}function dt(e,r){e.emit(me,r)}var $r=["id","isActive","plugins"];function se(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),t.push.apply(t,n)}return t}function le(e){for(var r=1;r<arguments.length;r++){var t=arguments[r]!=null?arguments[r]:{};r%2?se(Object(t),!0).forEach(function(n){Mr(e,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):se(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function Mr(e,r,t){return r=Wr(r),r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Wr(e){var r=Br(e,"string");return typeof r=="symbol"?r:String(r)}function Br(e,r){if(typeof e!="object"||e===null)return e;var t=e[Symbol.toPrimitive];if(t!==void 0){var n=t.call(e,r||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)}function Kr(e,r){if(e==null)return{};var t=Ur(e,r),n,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],!(r.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}function Ur(e,r){if(e==null)return{};var t={},n=Object.keys(e),a,o;for(o=0;o<n.length;o++)a=n[o],!(r.indexOf(a)>=0)&&(t[a]=e[a]);return t}function vt(e){var{id:r,isActive:t,plugins:n}=e,a=Kr(e,$r),[o,u]=s.useState(t),i=Ne(),l=s.useCallback(f=>{i(r===He?Ye({layoutConfig:f}):Je(r,{layoutConfig:f}))},[r,i]);return!o&&t&&u(!0),o?c.jsx(Ir,le(le({id:r,onLayoutConfigChange:l},a),{},{children:n})):c.jsx(fe,{})}var gt=s.createContext({}),pt=s.createContext({}),Fr=s.createContext(null),Gr=s.createContext(null);function ue(e,r,t,n,a,o,u){try{var i=e[o](u),l=i.value}catch(f){t(f);return}i.done?r(l):Promise.resolve(l).then(n,a)}function qr(e){return function(){var r=this,t=arguments;return new Promise(function(n,a){var o=e.apply(r,t);function u(l){ue(o,n,a,u,i,"next",l)}function i(l){ue(o,n,a,u,i,"throw",l)}u(void 0)})}}var be=s.createContext(null);function ht(e){var{children:r}=e,t=vr(),[n,a]=s.useState(),[o,u]=s.useState();s.useEffect(function(){var f=!1;function y(){return h.apply(this,arguments)}function h(){return h=qr(function*(){try{var w=yield t.getServerConfigValues();f||a(new Map(w))}catch(C){f||u(C)}}),h.apply(this,arguments)}return y(),()=>{f=!0}},[t]);var i=n==null;return i||o!=null?c.jsx(fe,{isLoading:i&&o==null,errorMessage:Qe(o)}):c.jsx(be.Provider,{value:n,children:r})}function mt(){return N(be,"No server config available in useServerConfig. Was code wrapped in ServerConfigBootstrap or ServerConfigContext.Provider?")}function bt(){return N(Gr,"No IdeConnection available in useConnection. Was code wrapped in ConnectionContext.Provider?")}function yt(){return N(Fr,"No user available in useUser. Was code wrapped in UserBootstrap or UserContext.Provider?")}export{ot as A,nt as B,Qr as C,Yr as D,Cr as E,Ir as F,me as G,dt as H,Jr as I,Qe as J,Fr as K,et as L,gt as M,Xr as N,Gr as O,ht as P,pr as S,Zr as T,pt as U,mr as a,vt as b,bt as c,mt as d,yt as e,ct as f,ut as g,Xe as h,de as i,rt as j,pe as k,ft as l,yr as m,hr as n,tt as o,xr as p,st as q,lt as r,Dr as s,wr as t,vr as u,at as v,it as w,he as x,Er as y,br as z};
2
+ //# sourceMappingURL=useUser-daf248b8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUser-daf248b8.js","sources":["../../../utils/dist/ErrorUtils.js","../../../react-hooks/dist/useDebouncedValue.js","../../../react-hooks/dist/useResizeObserver.js","../../../components/dist/modal/DebouncedModal.js","../../../components/dist/modal/InfoModal.js","../../../components/dist/Collapse.js","../../../components/dist/navigation/NavTab.js","../../../components/dist/navigation/NavTabList.js","../../../components/dist/theme/ThemePicker.js","../../../components/dist/theme/Logo.js","../../../jsapi-bootstrap/dist/useCreateClient.js","../../../jsapi-bootstrap/dist/ClientBootstrap.js","../../../jsapi-bootstrap/dist/useClient.js","../../../jsapi-utils/dist/MessageUtils.js","../../../jsapi-utils/dist/NoConsolesError.js","../../../jsapi-utils/dist/SessionUtils.js","../../../dashboard/dist/Dashboard.js","../../../dashboard/dist/DashboardEvents.js","../../../dashboard/dist/LazyDashboard.js","../../../auth-plugins/dist/UserContexts.js","../../../app-utils/dist/components/ConnectionContext.js","../../../app-utils/dist/components/ServerConfigBootstrap.js","../../../app-utils/dist/components/useServerConfig.js","../../../app-utils/dist/components/useConnection.js","../../../app-utils/dist/components/useUser.js"],"sourcesContent":["/**\n * Returns an error message from an object. Guaranteed not to be an empty string.\n * @param error Error object to get the message from.\n * @returns Error message, or undefined if there is no message.\n */\nexport function getErrorMessage(error) {\n var errorObj = error;\n if (error instanceof CustomEvent) {\n errorObj = error.detail;\n }\n var message = '';\n if (errorObj instanceof Error) {\n message = errorObj.message;\n } else if (errorObj != null) {\n message = \"\".concat(errorObj);\n }\n message = message.trim();\n if (message.length > 0) {\n return message;\n }\n return undefined;\n}\nexport default getErrorMessage;\n//# sourceMappingURL=ErrorUtils.js.map","import { useEffect, useState } from 'react';\n\n/**\n * Debounces a value.\n * Returns the initial value immediately.\n * Returns the latest value after no changes have occurred for the debounce duration.\n * @param value Value to debounce\n * @param debounceMs Amount of time to debounce\n * @returns The debounced value + whether the value is still debouncing\n */\nexport function useDebouncedValue(value, debounceMs) {\n var [isDebouncing, setIsDebouncing] = useState(true);\n var [debouncedValue, setDebouncedValue] = useState(value);\n\n // Keep `isDebouncing` in sync with `value` and `debounceMs` by setting state\n // during render instead of in `useEffect`\n // https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes\n var [previousValue, setPreviousValue] = useState(value);\n var [previousDebounceMs, setPreviousDebounceMs] = useState(debounceMs);\n if (value !== previousValue || debounceMs !== previousDebounceMs) {\n setIsDebouncing(true);\n setPreviousValue(value);\n setPreviousDebounceMs(debounceMs);\n }\n useEffect(() => {\n var isCancelled = false;\n var timeoutId = setTimeout(() => {\n if (!isCancelled) {\n setIsDebouncing(false);\n setDebouncedValue(value);\n }\n }, debounceMs);\n return () => {\n isCancelled = true;\n clearTimeout(timeoutId);\n };\n }, [value, debounceMs]);\n return {\n isDebouncing,\n value: debouncedValue\n };\n}\nexport default useDebouncedValue;\n//# sourceMappingURL=useDebouncedValue.js.map","import { useEffect } from 'react';\n\n/**\n * Listen for resize events on an element using ResizeObserver\n * @param element Element to listen for resizing on\n * @param onResize Callback triggered when the element resizes\n */\nexport function useResizeObserver(element, onResize) {\n useEffect(() => {\n if (element == null) {\n return;\n }\n var resizeObserverInstance = new window.ResizeObserver(onResize);\n resizeObserverInstance.observe(element);\n return () => {\n if (element != null) {\n resizeObserverInstance.unobserve(element);\n }\n };\n }, [element, onResize]);\n}\nexport default useResizeObserver;\n//# sourceMappingURL=useResizeObserver.js.map","import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal(_ref) {\n var {\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false\n } = _ref;\n var {\n value: debouncedIsOpen\n } = useDebouncedValue(isOpen, debounceMs);\n return /*#__PURE__*/_jsxs(_Fragment, {\n children: [blockInteraction && isOpen && /*#__PURE__*/_jsx(\"div\", {\n className: \"modal-backdrop\",\n style: {\n backgroundColor: 'transparent'\n },\n \"data-testid\": \"debounced-modal-backdrop\"\n }), /*#__PURE__*/React.cloneElement(children, {\n isOpen: isOpen && debouncedIsOpen\n })]\n });\n}\nexport default DebouncedModal;\n//# sourceMappingURL=DebouncedModal.js.map","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Modal from \"./Modal.js\";\nimport ModalBody from \"./ModalBody.js\";\nimport \"./InfoModal.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal(_ref) {\n var {\n className,\n icon,\n isOpen = false,\n subtitle,\n title\n } = _ref;\n return /*#__PURE__*/_jsx(Modal, {\n isOpen: isOpen,\n className: className,\n children: /*#__PURE__*/_jsx(ModalBody, {\n children: /*#__PURE__*/_jsxs(\"div\", {\n className: \"info-modal\",\n children: [icon != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"message-icon\",\n children: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: icon\n })\n }), /*#__PURE__*/_jsx(\"div\", {\n className: \"message-header\",\n children: title\n }), subtitle != null && /*#__PURE__*/_jsx(\"div\", {\n className: \"message-content\",\n children: subtitle\n })]\n })\n })\n });\n}\nexport default InfoModal;\n//# sourceMappingURL=InfoModal.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nclass Collapse extends Component {\n static handleEnter(elemParam) {\n var elem = elemParam;\n elem.style.height = '0';\n }\n static handleEntering(elemParam) {\n var elem = elemParam;\n elem.style.height = \"\".concat(Collapse.getHeight(elem), \"px\");\n }\n static handleExiting(elemParam) {\n var elem = elemParam;\n elem.style.height = '0';\n }\n static handleExit(elemParam) {\n var elem = elemParam;\n elem.style.height = \"\".concat(Collapse.getHeight(elem), \"px\");\n }\n static getHeight(elem) {\n var scrollBarWidth = elem.scrollWidth - elem.clientWidth;\n return elem.scrollHeight - scrollBarWidth;\n }\n constructor(props) {\n super(props);\n this.handleEntered = this.handleEntered.bind(this);\n }\n handleEntered(elemParam) {\n var elem = elemParam;\n elem.style.height = '';\n var {\n autoFocusOnShow\n } = this.props;\n if (autoFocusOnShow !== undefined && autoFocusOnShow) {\n var input = elem.querySelector('input, select, textarea');\n if (input != null) {\n input.focus();\n }\n }\n }\n render() {\n var {\n children: _children,\n className,\n in: inTransition,\n 'data-testid': dataTestId\n } = this.props;\n return /*#__PURE__*/_jsx(CSSTransition, {\n in: inTransition,\n classNames: {\n enterActive: 'collapsing',\n enterDone: 'collapse show',\n exitActive: 'collapsing',\n exitDone: 'collapse'\n },\n onEnter: Collapse.handleEnter,\n onEntering: Collapse.handleEntering,\n onEntered: this.handleEntered,\n onExit: Collapse.handleExit,\n onExiting: Collapse.handleExiting,\n timeout: 350,\n children: state => /*#__PURE__*/_jsx(\"div\", {\n className: classNames({\n collapse: state === 'exited'\n }, className),\n \"data-testid\": dataTestId,\n children: _children\n })\n });\n }\n}\n_defineProperty(Collapse, \"propTypes\", {\n className: PropTypes.string,\n in: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n autoFocusOnShow: PropTypes.bool,\n 'data-testid': PropTypes.string\n});\n_defineProperty(Collapse, \"defaultProps\", {\n className: '',\n autoFocusOnShow: false,\n 'data-testid': undefined\n});\nexport default Collapse;\n//# sourceMappingURL=Collapse.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from 'react-beautiful-dnd';\nimport { vsClose } from '@deephaven/icons';\nimport Button from \"../Button.js\";\nimport ContextActions from \"../context-actions/ContextActions.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar NavTab = /*#__PURE__*/memo(_ref => {\n var {\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions\n } = _ref;\n var {\n key,\n isClosable = onClose != null,\n title\n } = tab;\n return /*#__PURE__*/_jsx(Draggable, {\n draggableId: key,\n index: index,\n isDragDisabled: !isDraggable,\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", {\n className: \"context-menu-wrapper\",\n ref: isActive ? activeRef : null,\n children: [/*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread(_objectSpread({\n ref: provided.innerRef\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.draggableProps), provided.dragHandleProps), {}, {\n className: classNames('btn btn-link btn-nav-tab', {\n active: isActive\n }, {\n dragging: snapshot.isDragging\n }),\n \"data-testid\": \"btn-nav-tab-\".concat(title),\n role: \"tab\",\n tabIndex: 0,\n onClick: e => {\n e.target.focus();\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n\n onSelect(key);\n },\n onKeyPress: event => {\n if (event.key === 'Enter') onSelect(key);\n },\n children: [title, isClosable && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n className: \"btn-nav-tab-close\",\n onClick: event => {\n onClose === null || onClose === void 0 ? void 0 : onClose(key);\n event.stopPropagation();\n event.preventDefault();\n },\n icon: vsClose,\n tooltip: \"Close\"\n })]\n })), /*#__PURE__*/_jsx(ContextActions, {\n actions: contextActions\n })]\n })\n }, key);\n});\nNavTab.displayName = 'NavTab';\nexport default NavTab;\n//# sourceMappingURL=NavTab.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'lodash.clamp';\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight, vsChevronLeft } from '@deephaven/icons';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport DragUtils from \"../DragUtils.js\";\nimport Button from \"../Button.js\";\nimport NavTab from \"./NavTab.js\";\nimport \"./NavTabList.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\n// mouse hold timeout to act as hold instead of click\nvar CLICK_TIMEOUT = 500;\n\n// mouse hold acceleration\nvar START_SPEED = 0.01;\nvar ACCELERATION = 0.0005;\nfunction isScrolledLeft(element) {\n return element.scrollLeft === 0;\n}\nfunction isScrolledRight(element) {\n return element.scrollLeft + element.clientWidth === element.scrollWidth || element.scrollWidth === 0;\n}\nfunction makeBaseContextActions(tab, tabs, onClose) {\n var {\n isClosable = false,\n key\n } = tab;\n var contextActions = [];\n if (isClosable && onClose != null) {\n contextActions.push({\n title: 'Close',\n order: 10,\n group: 20,\n action: () => {\n onClose(key);\n }\n });\n var disabled = true;\n for (var i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === tab.key) break;\n if (tabs[i].isClosable === true) {\n disabled = false;\n break;\n }\n }\n contextActions.push({\n title: 'Close to the Right',\n order: 20,\n group: 20,\n action: () => {\n for (var _i = tabs.length - 1; _i > 0; _i -= 1) {\n if (tabs[_i].key === key) break;\n if (tabs[_i].isClosable === true) onClose(tabs[_i].key);\n }\n },\n disabled\n });\n contextActions.push({\n title: 'Close All',\n order: 30,\n group: 20,\n action: () => {\n tabs.forEach(t => {\n if (t.isClosable === true) onClose(t.key);\n });\n }\n });\n }\n return contextActions;\n}\nfunction NavTabList(_ref) {\n var {\n activeKey,\n tabs,\n onSelect,\n onReorder,\n onClose,\n makeContextActions\n } = _ref;\n var containerRef = useRef();\n var [isOverflowing, setIsOverflowing] = useState(true);\n var [disableScrollLeft, setDisableScrollLeft] = useState(true);\n var [disableScrollRight, setDisableScrollRight] = useState(true);\n var handleResize = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n if (containerRef.current.clientWidth < containerRef.current.scrollWidth && tabs.length > 0) {\n setIsOverflowing(true);\n } else {\n setIsOverflowing(false);\n }\n setDisableScrollLeft(isScrolledLeft(containerRef.current));\n setDisableScrollRight(isScrolledRight(containerRef.current));\n }, [tabs]);\n useResizeObserver(containerRef.current, handleResize);\n var onDragEnd = useCallback(result => {\n DragUtils.stopDragging();\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n onReorder === null || onReorder === void 0 ? void 0 : onReorder(result.source.index, result.destination.index);\n }, [onReorder]);\n var handleScroll = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n var shouldDisableScrollLeft = isScrolledLeft(containerRef.current);\n if (shouldDisableScrollLeft !== disableScrollLeft) {\n setDisableScrollLeft(shouldDisableScrollLeft);\n }\n var shouldDisableScrollRight = isScrolledRight(containerRef.current);\n if (shouldDisableScrollRight !== disableScrollRight) {\n setDisableScrollRight(shouldDisableScrollRight);\n }\n }, [disableScrollLeft, disableScrollRight]);\n var continuousScrollRef = useRef({\n cancelClick: false\n });\n var handleLeftClick = useCallback(() => {\n if (containerRef.current == null || continuousScrollRef.current.cancelClick) {\n return;\n }\n var {\n children\n } = containerRef.current;\n for (var i = children.length - 1; i >= 0; i -= 1) {\n var child = children[i];\n // Subtract 5px from left edge to account for rounding of offset values\n if (child.offsetLeft < containerRef.current.scrollLeft - 5) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start'\n });\n return;\n }\n }\n }, []);\n var handleRightClick = useCallback(() => {\n if (containerRef.current == null || continuousScrollRef.current.cancelClick) {\n return;\n }\n var {\n children\n } = containerRef.current;\n for (var i = 0; i < children.length; i += 1) {\n var child = children[i];\n // Add 5px to right edge to account for rounding of offset values\n if (child.offsetLeft + 5 > containerRef.current.scrollLeft + containerRef.current.offsetWidth) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end'\n });\n return;\n }\n }\n }, []);\n\n /**\n * Recurively called after initial timeout on mousedown. Continuously scroll with acceleration.\n * Cancelled by mouseup handler cancelling the animationFrame.\n * @param direction of scroll, left or right\n * @param startX starting position of scroll\n * @param deltaX delta from intial startX calculated recursively\n * @param prevTimestamp called on subsequent delta frames\n */\n var handleMouseRepeat = useCallback(function (direction, startX) {\n var deltaX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var prevTimestamp = arguments.length > 3 ? arguments[3] : undefined;\n var container = containerRef.current;\n if (container == null) {\n return;\n }\n continuousScrollRef.current.cancelClick = true;\n if (direction === 'left') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX - deltaX;\n } else if (direction === 'right') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX + deltaX;\n }\n\n // eslint-disable-next-line no-param-reassign\n continuousScrollRef.current.rAF = requestAnimationFrame(timestamp => {\n var startTime = prevTimestamp !== null && prevTimestamp !== void 0 ? prevTimestamp : timestamp;\n var deltaTime = timestamp - startTime;\n var newDeltaX = START_SPEED * deltaTime + 0.5 * ACCELERATION * deltaTime ** 2;\n newDeltaX = Math.min(newDeltaX, container.scrollWidth);\n // scrollLeft enforces a limit but no point letting delta increment beyond scrollWidth\n\n handleMouseRepeat(direction, startX, newDeltaX, startTime);\n });\n }, []);\n var endContinuousScroll = useCallback(() => {\n var {\n holdTimer,\n rAF\n } = continuousScrollRef.current;\n if (holdTimer != null) {\n clearTimeout(holdTimer);\n continuousScrollRef.current.holdTimer = undefined;\n }\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n continuousScrollRef.current.rAF = undefined;\n }\n window.removeEventListener('mouseup', endContinuousScroll);\n }, []);\n useEffect(() => () => window.removeEventListener('mouseup', endContinuousScroll), [endContinuousScroll]);\n var handleMouseDown = useCallback(direction => {\n if (containerRef.current != null) {\n continuousScrollRef.current.holdTimer = window.setTimeout(handleMouseRepeat, CLICK_TIMEOUT, direction, containerRef.current.scrollLeft);\n }\n continuousScrollRef.current.cancelClick = false;\n window.addEventListener('mouseup', endContinuousScroll);\n }, [endContinuousScroll, handleMouseRepeat]);\n var handleMouseDownLeft = useCallback(() => {\n handleMouseDown('left');\n }, [handleMouseDown]);\n var handleMouseDownRight = useCallback(() => {\n handleMouseDown('right');\n }, [handleMouseDown]);\n\n // React binds to the root as a passive listener for wheel\n // This prevents the wheel event from being canceled\n // Bypass React's event system so we can prevent the default behavior\n // https://github.com/facebook/react/issues/14856\n useEffect(function handleWheel() {\n var _containerRef$current;\n var onWheel = e => {\n e.stopPropagation();\n e.preventDefault();\n var nav = e.currentTarget;\n var delta = Math.abs(e.deltaY) > Math.abs(e.deltaX) ? e.deltaY : e.deltaX;\n\n // Scrolling jumps too far sometimes, so clamp to get a smoother scroll\n nav.scrollLeft += clamp(delta, -30, 30);\n };\n (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.addEventListener('wheel', onWheel);\n return () => {\n var _containerRef$current2;\n (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.removeEventListener('wheel', onWheel);\n };\n }, []);\n var tabContextActionMap = useMemo(() => {\n var tabContextActions = new Map();\n tabs.forEach(tab => {\n var {\n key\n } = tab;\n var contextActions = [() => makeBaseContextActions(tab, tabs, onClose), () => {\n var _makeContextActions;\n return (_makeContextActions = makeContextActions === null || makeContextActions === void 0 ? void 0 : makeContextActions(tab)) !== null && _makeContextActions !== void 0 ? _makeContextActions : [];\n }];\n tabContextActions.set(key, contextActions);\n });\n return tabContextActions;\n }, [makeContextActions, tabs, onClose]);\n var activeTabRef = useRef(null);\n var activeTab = tabs.find(tab => tab.key === activeKey);\n var navTabs = tabs.map((tab, index) => {\n var {\n key\n } = tab;\n var isActive = tab === activeTab;\n return /*#__PURE__*/_jsx(NavTab, {\n tab: tab,\n index: index,\n isActive: isActive,\n activeRef: activeTabRef,\n onSelect: onSelect,\n onClose: onClose,\n isDraggable: onReorder != null,\n contextActions: tabContextActionMap.get(key)\n }, key);\n });\n useEffect(\n // Needs to be in a useEffect so the ref is updated\n function scrollActiveTabIntoView() {\n if (activeTabRef.current != null) {\n activeTabRef.current.scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n }, [activeKey]);\n return /*#__PURE__*/_jsxs(\"nav\", {\n className: \"nav-container\",\n children: [isOverflowing && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronLeft,\n transform: \"grow-4\"\n }),\n className: \"tab-controls-btn tab-controls-btn-left\",\n tooltip: \"Scroll left\",\n onClick: handleLeftClick,\n onMouseDown: handleMouseDownLeft,\n disabled: disableScrollLeft\n }), /*#__PURE__*/_jsx(DragDropContext, {\n onDragStart: DragUtils.startDragging,\n onDragEnd: onDragEnd,\n children: /*#__PURE__*/_jsx(Droppable, {\n droppableId: \"droppable-tab-navigation\",\n direction: \"horizontal\",\n children: (provided, snapshot) => /*#__PURE__*/_jsxs(\"div\", _objectSpread(_objectSpread({\n ref: r => {\n if (r == null) {\n return;\n }\n containerRef.current = r;\n provided.innerRef(r);\n }\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, provided.droppableProps), {}, {\n className: classNames('nav nav-tabs', {\n dragging: snapshot.draggingFromThisWith\n }),\n role: \"tablist\",\n onScroll: handleScroll,\n children: [navTabs, provided.placeholder]\n }))\n })\n }), isOverflowing && /*#__PURE__*/_jsx(Button, {\n kind: \"ghost\",\n icon: /*#__PURE__*/_jsx(FontAwesomeIcon, {\n icon: vsChevronRight,\n transform: \"grow-4\"\n }),\n className: \"tab-controls-btn tab-controls-btn-right\",\n tooltip: \"Scroll right\",\n onClick: handleRightClick,\n onMouseDown: handleMouseDownRight,\n disabled: disableScrollRight\n })]\n });\n}\nexport default NavTabList;\n//# sourceMappingURL=NavTabList.js.map","import { useCallback } from 'react';\nimport { Item, Picker } from '@adobe/react-spectrum';\nimport useTheme from \"./useTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function ThemePicker() {\n var {\n selectedThemeKey,\n setSelectedThemeKey,\n themes\n } = useTheme();\n var onSelectionChange = useCallback(key => {\n setSelectedThemeKey(key);\n }, [setSelectedThemeKey]);\n return /*#__PURE__*/_jsx(Picker, {\n label: \"Pick a color scheme\",\n items: themes,\n selectedKey: selectedThemeKey,\n onSelectionChange: onSelectionChange,\n children: item => /*#__PURE__*/_jsx(Item, {\n children: item.name\n }, item.themeKey)\n });\n}\nexport default ThemePicker;\n//# sourceMappingURL=ThemePicker.js.map","import classNames from 'classnames';\nimport \"./Logo.css\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function Logo(_ref) {\n var {\n className,\n style\n } = _ref;\n return /*#__PURE__*/_jsx(\"div\", {\n className: classNames('dh-logo', className),\n style: style\n });\n}\nexport default Logo;\n//# sourceMappingURL=Logo.js.map","import { useEffect, useMemo } from 'react';\nimport useApi from \"./useApi.js\";\nexport function useCreateClient(serverUrl, options) {\n var api = useApi();\n var client = useMemo(() => new api.CoreClient(serverUrl, options), [api, serverUrl, options]);\n useEffect(() => () => {\n client.disconnect();\n }, [client]);\n return client;\n}\nexport default useCreateClient;\n//# sourceMappingURL=useCreateClient.js.map","import React, { createContext } from 'react';\nimport useCreateClient from \"./useCreateClient.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var ClientContext = /*#__PURE__*/createContext(null);\n/**\n * ClientBootstrap component. Handles creating the client.\n */\nexport function ClientBootstrap(_ref) {\n var {\n serverUrl,\n options,\n children\n } = _ref;\n var client = useCreateClient(serverUrl, options);\n return /*#__PURE__*/_jsx(ClientContext.Provider, {\n value: client,\n children: children\n });\n}\nexport default ClientBootstrap;\n//# sourceMappingURL=ClientBootstrap.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ClientContext } from \"./ClientBootstrap.js\";\nexport function useClient() {\n return useContextOrThrow(ClientContext, 'No Client available in useClient. Was code wrapped in ClientBootstrap or ClientContext.Provider?');\n}\nexport default useClient;\n//# sourceMappingURL=useClient.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport shortid from 'shortid';\nimport Log from '@deephaven/log';\nimport { TimeoutError } from '@deephaven/utils';\nvar log = Log.module('MessageUtils');\nexport var LOGIN_OPTIONS_REQUEST = 'io.deephaven.message.LoginOptions.request';\nexport var SESSION_DETAILS_REQUEST = 'io.deephaven.message.SessionDetails.request';\n\n/**\n * Use a BroadcastChannel for sending messages between tabs, such as when the user logs out.\n */\nexport var BROADCAST_CHANNEL_NAME = 'io.deephaven.broadcast';\n\n/**\n * Event emitted when the user has logged in successfully\n */\nexport var BROADCAST_LOGIN_MESSAGE = 'io.deephaven.broadcast.Login';\n\n/**\n * Event emitted when the user has logged out\n */\nexport var BROADCAST_LOGOUT_MESSAGE = 'io.deephaven.broadcast.Logout';\nexport function isMessage(obj) {\n var message = obj;\n return message != null && typeof message.id === 'string' && typeof message.message === 'string';\n}\nexport function isBroadcastLoginMessage(obj) {\n return isMessage(obj) && obj.message === BROADCAST_LOGIN_MESSAGE;\n}\nexport function isBroadcastLogoutMessage(obj) {\n return isMessage(obj) && obj.message === BROADCAST_LOGOUT_MESSAGE;\n}\nexport function isResponse(obj) {\n var response = obj;\n return response != null && typeof response.id === 'string';\n}\n\n/**\n * Make message object with optional payload\n * @param message Message string\n * @param id Unique message id\n * @param payload Payload to send\n * @returns Message\n */\nexport function makeMessage(message) {\n var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : shortid();\n var payload = arguments.length > 2 ? arguments[2] : undefined;\n return {\n message,\n id,\n payload\n };\n}\n\n/**\n * Make response object for given message id\n * @param messageId Id of the request message to respond to\n * @param payload Payload to respond with\n * @returns Response\n */\nexport function makeResponse(messageId, payload) {\n return {\n id: messageId,\n payload\n };\n}\nexport function getWindowParent() {\n if (window.opener != null) {\n return window.opener;\n }\n if (window.parent != null && window.parent !== window) {\n return window.parent;\n }\n return null;\n}\n\n/**\n * Request data from the parent window and wait for response\n * @param request Request message to send to the parent window\n * @param timeout Timeout in ms\n * @returns Payload of the given type, or undefined\n */\nexport function requestParentResponse(_x) {\n return _requestParentResponse.apply(this, arguments);\n}\nfunction _requestParentResponse() {\n _requestParentResponse = _asyncToGenerator(function* (request) {\n var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30000;\n var parent = getWindowParent();\n if (parent == null) {\n throw new Error('window parent is null, unable to send request.');\n }\n return new Promise((resolve, reject) => {\n var timeoutId;\n var id = shortid();\n var listener = event => {\n var {\n data\n } = event;\n if (!isResponse(data)) {\n log.debug('Ignoring non-deephaven response', data);\n return;\n }\n log.debug('Received message', data);\n if ((data === null || data === void 0 ? void 0 : data.id) !== id) {\n log.debug(\"Ignore message, id doesn't match\", data);\n return;\n }\n window.clearTimeout(timeoutId);\n window.removeEventListener('message', listener);\n resolve(data.payload);\n };\n window.addEventListener('message', listener);\n timeoutId = window.setTimeout(() => {\n window.removeEventListener('message', listener);\n reject(new TimeoutError('Request timed out'));\n }, timeout);\n parent.postMessage(makeMessage(request, id), '*');\n });\n });\n return _requestParentResponse.apply(this, arguments);\n}\n//# sourceMappingURL=MessageUtils.js.map","function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport class NoConsolesError extends Error {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"isNoConsolesError\", true);\n }\n}\nexport function isNoConsolesError(error) {\n return error.isNoConsolesError;\n}\nexport default NoConsolesError;\n//# sourceMappingURL=NoConsolesError.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport { requestParentResponse, SESSION_DETAILS_REQUEST } from \"./MessageUtils.js\";\nimport NoConsolesError, { isNoConsolesError } from \"./NoConsolesError.js\";\nvar log = Log.module('SessionUtils');\n/**\n * @returns New connection to the server\n */\nexport function createConnection(dh, websocketUrl) {\n log.info(\"Starting connection to '\".concat(websocketUrl, \"'...\"));\n return new dh.IdeConnection(websocketUrl);\n}\n\n/**\n * Create a new session using the default URL\n * @returns A session and config that is ready to use\n */\nexport function createSessionWrapper(_x, _x2, _x3) {\n return _createSessionWrapper.apply(this, arguments);\n}\nfunction _createSessionWrapper() {\n _createSessionWrapper = _asyncToGenerator(function* (dh, connection, details) {\n log.info('Getting console types...');\n var types = yield connection.getConsoleTypes();\n if (types.length === 0) {\n throw new NoConsolesError('No console types available');\n }\n log.info('Available types:', types);\n var type = types[0];\n log.info('Starting session with type', type);\n var session = yield connection.startSession(type);\n var config = {\n type,\n id: shortid.generate()\n };\n log.info('Console session established', config);\n return {\n session,\n config,\n connection,\n details,\n dh\n };\n });\n return _createSessionWrapper.apply(this, arguments);\n}\nexport function createCoreClient(dh, websocketUrl, options) {\n log.info('createCoreClient', websocketUrl);\n return new dh.CoreClient(websocketUrl, options);\n}\nfunction isSessionDetails(obj) {\n return obj != null && typeof obj === 'object';\n}\nfunction requestParentSessionDetails() {\n return _requestParentSessionDetails.apply(this, arguments);\n}\nfunction _requestParentSessionDetails() {\n _requestParentSessionDetails = _asyncToGenerator(function* () {\n var response = yield requestParentResponse(SESSION_DETAILS_REQUEST);\n if (!isSessionDetails(response)) {\n throw new Error(\"Unexpected session details response: \".concat(response));\n }\n return response;\n });\n return _requestParentSessionDetails.apply(this, arguments);\n}\nexport function getSessionDetails() {\n return _getSessionDetails.apply(this, arguments);\n}\nfunction _getSessionDetails() {\n _getSessionDetails = _asyncToGenerator(function* () {\n var searchParams = new URLSearchParams(window.location.search);\n switch (searchParams.get('authProvider')) {\n case 'parent':\n return requestParentSessionDetails();\n }\n return {};\n });\n return _getSessionDetails.apply(this, arguments);\n}\nexport function loadSessionWrapper(_x4, _x5, _x6) {\n return _loadSessionWrapper.apply(this, arguments);\n}\nfunction _loadSessionWrapper() {\n _loadSessionWrapper = _asyncToGenerator(function* (dh, connection, sessionDetails) {\n var sessionWrapper;\n try {\n sessionWrapper = yield createSessionWrapper(dh, connection, sessionDetails);\n } catch (e) {\n // Consoles may be disabled on the server, but we should still be able to start up and open existing objects\n if (!isNoConsolesError(e)) {\n throw e;\n }\n }\n return sessionWrapper;\n });\n return _loadSessionWrapper.apply(this, arguments);\n}\n//# sourceMappingURL=SessionUtils.js.map","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport \"./layout/GoldenLayout.css\";\nimport LayoutUtils from \"./layout/LayoutUtils.js\";\nimport PanelPlaceholder from \"./PanelPlaceholder.js\";\nimport DashboardLayout from \"./DashboardLayout.js\";\nimport \"./Dashboard.css\";\nimport { LayoutManagerContext } from \"./layout/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nvar RESIZE_THROTTLE = 100;\nvar DEFAULT_CALLBACK = () => undefined;\nvar EMPTY_OBJECT = Object.freeze({});\nexport function Dashboard(_ref) {\n var {\n id = 'default',\n children,\n emptyDashboard,\n layoutConfig,\n layoutSettings = EMPTY_OBJECT,\n onLayoutConfigChange = DEFAULT_CALLBACK,\n onGoldenLayoutChange = DEFAULT_CALLBACK,\n onLayoutInitialized = DEFAULT_CALLBACK,\n fallbackComponent = PanelPlaceholder,\n hydrate,\n dehydrate,\n panelWrapper\n } = _ref;\n var layoutElement = useRef(null);\n var [isInitialized, setIsInitialized] = useState(false);\n var [layout, setLayout] = useState();\n useEffect(function initDashboard() {\n if (!layoutElement.current) {\n setLayout(undefined);\n return;\n }\n var config = _objectSpread({}, LayoutUtils.makeDefaultLayout());\n if (config.settings === undefined) {\n config.settings = {};\n }\n Object.assign(config.settings, layoutSettings);\n\n // Load our content later after plugins have registered\n config.content = [];\n var newLayout = new GoldenLayout(config, layoutElement.current);\n var onInit = () => {\n newLayout.off('initialised', onInit);\n setIsInitialized(true);\n };\n newLayout.on('initialised', onInit);\n if (fallbackComponent != null) {\n newLayout.setFallbackComponent(fallbackComponent);\n }\n newLayout.init();\n setLayout(newLayout);\n onGoldenLayoutChange(newLayout);\n return () => {\n newLayout.destroy();\n };\n }, [layoutSettings, fallbackComponent, onGoldenLayoutChange, setIsInitialized, setLayout]);\n var handleResize = useMemo(() => throttle(() => {\n if (layout != null && layout.isInitialised) {\n layout === null || layout === void 0 ? void 0 : layout.updateSize();\n }\n }, RESIZE_THROTTLE), [layout]);\n useResizeObserver(layoutElement.current, handleResize);\n return /*#__PURE__*/_jsxs(\"div\", {\n className: \"dashboard-container w-100 h-100\",\n children: [/*#__PURE__*/_jsx(\"div\", {\n className: \"w-100 h-100\",\n ref: layoutElement\n }), isInitialized && layout && /*#__PURE__*/_jsx(LayoutManagerContext.Provider, {\n value: layout,\n children: /*#__PURE__*/_jsx(DashboardLayout, {\n emptyDashboard: emptyDashboard,\n id: id,\n layout: layout,\n layoutConfig: layoutConfig,\n onLayoutChange: onLayoutConfigChange,\n onLayoutInitialized: onLayoutInitialized,\n hydrate: hydrate,\n dehydrate: dehydrate,\n panelWrapper: panelWrapper,\n children: children\n })\n })]\n });\n}\nexport default Dashboard;\n//# sourceMappingURL=Dashboard.js.map","export var CREATE_DASHBOARD = 'CREATE_DASHBOARD';\nexport function listenForCreateDashboard(eventHub, handler) {\n eventHub.on(CREATE_DASHBOARD, handler);\n}\nexport function emitCreateDashboard(eventHub, payload) {\n eventHub.emit(CREATE_DASHBOARD, payload);\n}\n//# sourceMappingURL=DashboardEvents.js.map","var _excluded = [\"id\", \"isActive\", \"plugins\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport React, { useCallback, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { updateWorkspaceData } from '@deephaven/redux';\nimport { Dashboard } from \"./Dashboard.js\";\nimport { updateDashboardData } from \"./redux/index.js\";\nimport { DEFAULT_DASHBOARD_ID } from \"./DashboardConstants.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function LazyDashboard(_ref) {\n var {\n id,\n isActive,\n plugins\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n var [isLoaded, setIsLoaded] = useState(isActive);\n var dispatch = useDispatch();\n var handleLayoutConfigChange = useCallback(config => {\n // TODO: #1746 Call updateDashboardData for every dashboard\n // This currently allows the default dashboard to keep its layout since\n // other dashboards are not persistent yet and we read workspaceData\n // for the default dashboard layout\n if (id === DEFAULT_DASHBOARD_ID) {\n dispatch(updateWorkspaceData({\n layoutConfig: config\n }));\n } else {\n dispatch(updateDashboardData(id, {\n layoutConfig: config\n }));\n }\n }, [id, dispatch]);\n if (!isLoaded && isActive) {\n setIsLoaded(true);\n }\n if (!isLoaded) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {});\n }\n return /*#__PURE__*/_jsx(Dashboard, _objectSpread(_objectSpread({\n id: id,\n onLayoutConfigChange: handleLayoutConfigChange\n // eslint-disable-next-line react/jsx-props-no-spreading\n }, rest), {}, {\n children: plugins\n }));\n}\nexport default LazyDashboard;\n//# sourceMappingURL=LazyDashboard.js.map","import { createContext } from 'react';\nexport var UserOverrideContext = /*#__PURE__*/createContext({});\nexport var UserPermissionsOverrideContext = /*#__PURE__*/createContext({});\nexport var UserContext = /*#__PURE__*/createContext(null);\n//# sourceMappingURL=UserContexts.js.map","import { createContext } from 'react';\nexport var ConnectionContext = /*#__PURE__*/createContext(null);\nexport default ConnectionContext;\n//# sourceMappingURL=ConnectionContext.js.map","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport React, { createContext, useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport var ServerConfigContext = /*#__PURE__*/createContext(null);\n/**\n * ServerConfigBootstrap component. Handles loading the server config.\n */\nexport function ServerConfigBootstrap(_ref) {\n var {\n children\n } = _ref;\n var client = useClient();\n var [serverConfig, setServerConfig] = useState();\n var [error, setError] = useState();\n useEffect(function initServerConfigValues() {\n var isCanceled = false;\n function loadServerConfigValues() {\n return _loadServerConfigValues.apply(this, arguments);\n }\n function _loadServerConfigValues() {\n _loadServerConfigValues = _asyncToGenerator(function* () {\n try {\n var newServerConfigValues = yield client.getServerConfigValues();\n if (!isCanceled) {\n setServerConfig(new Map(newServerConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n });\n return _loadServerConfigValues.apply(this, arguments);\n }\n loadServerConfigValues();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n var isLoading = serverConfig == null;\n if (isLoading || error != null) {\n return /*#__PURE__*/_jsx(LoadingOverlay, {\n isLoading: isLoading && error == null,\n errorMessage: getErrorMessage(error)\n });\n }\n return /*#__PURE__*/_jsx(ServerConfigContext.Provider, {\n value: serverConfig,\n children: children\n });\n}\nexport default ServerConfigBootstrap;\n//# sourceMappingURL=ServerConfigBootstrap.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ServerConfigContext } from \"./ServerConfigBootstrap.js\";\nexport function useServerConfig() {\n return useContextOrThrow(ServerConfigContext, 'No server config available in useServerConfig. Was code wrapped in ServerConfigBootstrap or ServerConfigContext.Provider?');\n}\nexport default useServerConfig;\n//# sourceMappingURL=useServerConfig.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { ConnectionContext } from \"./ConnectionContext.js\";\n/**\n * Retrieve the connection for the current context.\n *\n * @returns Connection for the current context\n */\nexport function useConnection() {\n return useContextOrThrow(ConnectionContext, 'No IdeConnection available in useConnection. Was code wrapped in ConnectionContext.Provider?');\n}\nexport default useConnection;\n//# sourceMappingURL=useConnection.js.map","import { useContextOrThrow } from '@deephaven/react-hooks';\nimport { UserContext } from '@deephaven/auth-plugins';\nexport function useUser() {\n return useContextOrThrow(UserContext, 'No user available in useUser. Was code wrapped in UserBootstrap or UserContext.Provider?');\n}\nexport default useUser;\n//# sourceMappingURL=useUser.js.map"],"names":["getErrorMessage","error","errorObj","message","useDebouncedValue","value","debounceMs","isDebouncing","setIsDebouncing","useState","debouncedValue","setDebouncedValue","previousValue","setPreviousValue","previousDebounceMs","setPreviousDebounceMs","useEffect","isCancelled","timeoutId","useResizeObserver","element","onResize","resizeObserverInstance","DebouncedModal","_ref","blockInteraction","children","isOpen","debouncedIsOpen","_jsxs","_Fragment","_jsx","React","InfoModal","className","icon","subtitle","title","Modal","ModalBody","FontAwesomeIcon","_defineProperty","obj","key","_toPropertyKey","arg","_toPrimitive","input","hint","prim","res","Collapse","Component","elemParam","elem","scrollBarWidth","props","autoFocusOnShow","_children","inTransition","dataTestId","CSSTransition","state","classNames","PropTypes","Collapse$1","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","target","i","source","NavTab","memo","tab","onClose","onSelect","isActive","activeRef","index","isDraggable","contextActions","isClosable","Draggable","provided","snapshot","e","event","Button","vsClose","ContextActions","NavTab$1","CLICK_TIMEOUT","START_SPEED","ACCELERATION","isScrolledLeft","isScrolledRight","makeBaseContextActions","tabs","disabled","_i","t","NavTabList","activeKey","onReorder","makeContextActions","containerRef","useRef","isOverflowing","setIsOverflowing","disableScrollLeft","setDisableScrollLeft","disableScrollRight","setDisableScrollRight","handleResize","useCallback","onDragEnd","result","DragUtils","handleScroll","shouldDisableScrollLeft","shouldDisableScrollRight","continuousScrollRef","handleLeftClick","child","handleRightClick","handleMouseRepeat","direction","startX","deltaX","prevTimestamp","container","timestamp","startTime","deltaTime","newDeltaX","endContinuousScroll","holdTimer","rAF","handleMouseDown","handleMouseDownLeft","handleMouseDownRight","_containerRef$current","onWheel","nav","delta","clamp","_containerRef$current2","tabContextActionMap","useMemo","tabContextActions","_makeContextActions","activeTabRef","activeTab","navTabs","vsChevronLeft","DragDropContext","Droppable","r","vsChevronRight","ThemePicker","selectedThemeKey","setSelectedThemeKey","themes","useTheme","onSelectionChange","Picker","item","Item","Logo","style","useCreateClient","serverUrl","options","api","useApi","client","ClientContext","createContext","ClientBootstrap","useClient","useContextOrThrow","asyncGeneratorStep","gen","resolve","reject","_next","_throw","info","_asyncToGenerator","fn","self","args","err","log","Log","LOGIN_OPTIONS_REQUEST","SESSION_DETAILS_REQUEST","BROADCAST_CHANNEL_NAME","BROADCAST_LOGIN_MESSAGE","BROADCAST_LOGOUT_MESSAGE","isMessage","isBroadcastLoginMessage","isBroadcastLogoutMessage","isResponse","response","makeMessage","id","shortid","payload","makeResponse","messageId","getWindowParent","requestParentResponse","_x","_requestParentResponse","request","timeout","parent","listener","data","TimeoutError","NoConsolesError","isNoConsolesError","createConnection","dh","websocketUrl","createSessionWrapper","_x2","_x3","_createSessionWrapper","connection","details","types","type","session","config","createCoreClient","isSessionDetails","requestParentSessionDetails","_requestParentSessionDetails","getSessionDetails","_getSessionDetails","searchParams","loadSessionWrapper","_x4","_x5","_x6","_loadSessionWrapper","sessionDetails","sessionWrapper","RESIZE_THROTTLE","DEFAULT_CALLBACK","EMPTY_OBJECT","Dashboard","emptyDashboard","layoutConfig","layoutSettings","onLayoutConfigChange","onGoldenLayoutChange","onLayoutInitialized","fallbackComponent","PanelPlaceholder","hydrate","dehydrate","panelWrapper","layoutElement","isInitialized","setIsInitialized","layout","setLayout","LayoutUtils","newLayout","GoldenLayout","onInit","throttle","LayoutManagerContext","DashboardLayout","CREATE_DASHBOARD","listenForCreateDashboard","eventHub","handler","emitCreateDashboard","_excluded","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","LazyDashboard","plugins","rest","isLoaded","setIsLoaded","dispatch","useDispatch","handleLayoutConfigChange","DEFAULT_DASHBOARD_ID","updateWorkspaceData","updateDashboardData","LoadingOverlay","UserOverrideContext","UserPermissionsOverrideContext","UserContext","ConnectionContext","ServerConfigContext","ServerConfigBootstrap","serverConfig","setServerConfig","setError","isCanceled","loadServerConfigValues","_loadServerConfigValues","newServerConfigValues","isLoading","useServerConfig","useConnection","useUser"],"mappings":"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"}
package/build/index.html CHANGED
@@ -12,7 +12,7 @@
12
12
  <link rel="manifest" href="./manifest.json" />
13
13
  <link rel="icon" href="./favicon-cc-app.svg" />
14
14
  <title>Deephaven</title>
15
- <script type="module" crossorigin src="./assets/index-d7bc9619.js"></script>
15
+ <script type="module" crossorigin src="./assets/index-9bba811f.js"></script>
16
16
  <link rel="modulepreload" crossorigin href="./assets/monaco-b5248072.js">
17
17
  <link rel="modulepreload" crossorigin href="./assets/helpers-de833af9.js">
18
18
  <link rel="modulepreload" crossorigin href="./assets/vendor-b0c4c01d.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/code-studio",
3
- "version": "0.61.1",
3
+ "version": "0.61.2-beta.0+2cd46ce2",
4
4
  "description": "Deephaven Code Studio",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -12,31 +12,31 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "@adobe/react-spectrum": "^3.29.0",
15
- "@deephaven/app-utils": "^0.61.1",
16
- "@deephaven/auth-plugins": "^0.61.1",
17
- "@deephaven/chart": "^0.61.1",
18
- "@deephaven/components": "^0.61.1",
19
- "@deephaven/console": "^0.61.1",
20
- "@deephaven/dashboard": "^0.61.1",
21
- "@deephaven/dashboard-core-plugins": "^0.61.1",
22
- "@deephaven/file-explorer": "^0.61.1",
23
- "@deephaven/filters": "^0.61.0",
24
- "@deephaven/golden-layout": "^0.61.1",
25
- "@deephaven/grid": "^0.61.0",
26
- "@deephaven/icons": "^0.61.0",
27
- "@deephaven/iris-grid": "^0.61.1",
28
- "@deephaven/jsapi-bootstrap": "^0.61.1",
29
- "@deephaven/jsapi-components": "^0.61.1",
30
- "@deephaven/jsapi-shim": "^0.61.0",
31
- "@deephaven/jsapi-types": "^0.61.0",
32
- "@deephaven/jsapi-utils": "^0.61.0",
33
- "@deephaven/log": "^0.61.0",
34
- "@deephaven/plugin": "^0.61.1",
35
- "@deephaven/pouch-storage": "^0.61.1",
36
- "@deephaven/react-hooks": "^0.61.0",
37
- "@deephaven/redux": "^0.61.1",
38
- "@deephaven/storage": "^0.61.0",
39
- "@deephaven/utils": "^0.61.0",
15
+ "@deephaven/app-utils": "^0.61.2-beta.0+2cd46ce2",
16
+ "@deephaven/auth-plugins": "^0.61.2-beta.0+2cd46ce2",
17
+ "@deephaven/chart": "^0.61.2-beta.0+2cd46ce2",
18
+ "@deephaven/components": "^0.61.2-beta.0+2cd46ce2",
19
+ "@deephaven/console": "^0.61.2-beta.0+2cd46ce2",
20
+ "@deephaven/dashboard": "^0.61.2-beta.0+2cd46ce2",
21
+ "@deephaven/dashboard-core-plugins": "^0.61.2-beta.0+2cd46ce2",
22
+ "@deephaven/file-explorer": "^0.61.2-beta.0+2cd46ce2",
23
+ "@deephaven/filters": "^0.61.2-beta.0+2cd46ce2",
24
+ "@deephaven/golden-layout": "^0.61.2-beta.0+2cd46ce2",
25
+ "@deephaven/grid": "^0.61.2-beta.0+2cd46ce2",
26
+ "@deephaven/icons": "^0.61.2-beta.0+2cd46ce2",
27
+ "@deephaven/iris-grid": "^0.61.2-beta.0+2cd46ce2",
28
+ "@deephaven/jsapi-bootstrap": "^0.61.2-beta.0+2cd46ce2",
29
+ "@deephaven/jsapi-components": "^0.61.2-beta.0+2cd46ce2",
30
+ "@deephaven/jsapi-shim": "^0.61.2-beta.0+2cd46ce2",
31
+ "@deephaven/jsapi-types": "^0.61.2-beta.0+2cd46ce2",
32
+ "@deephaven/jsapi-utils": "^0.61.2-beta.0+2cd46ce2",
33
+ "@deephaven/log": "^0.61.2-beta.0+2cd46ce2",
34
+ "@deephaven/plugin": "^0.61.2-beta.0+2cd46ce2",
35
+ "@deephaven/pouch-storage": "^0.61.2-beta.0+2cd46ce2",
36
+ "@deephaven/react-hooks": "^0.61.2-beta.0+2cd46ce2",
37
+ "@deephaven/redux": "^0.61.2-beta.0+2cd46ce2",
38
+ "@deephaven/storage": "^0.61.2-beta.0+2cd46ce2",
39
+ "@deephaven/utils": "^0.61.2-beta.0+2cd46ce2",
40
40
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
41
41
  "@fortawesome/react-fontawesome": "^0.2.0",
42
42
  "bowser": "^2.11.0",
@@ -74,14 +74,14 @@
74
74
  "update-licenses": "npm-license > licenses.txt"
75
75
  },
76
76
  "devDependencies": {
77
- "@deephaven/eslint-config": "^0.61.0",
78
- "@deephaven/mocks": "^0.61.0",
79
- "@deephaven/prettier-config": "^0.61.0",
80
- "@deephaven/stylelint-config": "^0.61.0",
77
+ "@deephaven/eslint-config": "^0.61.2-beta.0+2cd46ce2",
78
+ "@deephaven/mocks": "^0.61.2-beta.0+2cd46ce2",
79
+ "@deephaven/prettier-config": "^0.61.2-beta.0+2cd46ce2",
80
+ "@deephaven/stylelint-config": "^0.61.2-beta.0+2cd46ce2",
81
81
  "autoprefixer": "^10.4.8"
82
82
  },
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "gitHead": "9f1bff354f2f8ba76c35c4fed15c8dbb1805197c"
86
+ "gitHead": "2cd46ce2d5107553d3f91933294638a5fb183245"
87
87
  }
@@ -1,5 +0,0 @@
1
- import{P as gt,I as es,J as ts,r as m,C as n,K as se,L as Fe,H as X,M as Ce,F as D,N as f,G as x,O as bt,D as vt,T as ss,Q as ns,S as as,U as os,V as rs,W as is,X as ls,Y as ge,Z as cs,_ as ds}from"./vendor-b0c4c01d.js";import{_ as us,W as hs}from"./monaco-b5248072.js";import{O as de,P as K,T as M,D as ms,I as L,a as k,b as W,u as yt,F as ps,c as F,d as fs,e as Ee,S as ue,B as y,C as be,g as gs,f as St,h as Tt,i as Ct,j as wt,k as xt,l as bs,m as Dt,n as vs,o as _,p as Re,q as Ft,K as ys,r as We,s as Ss,t as Et,v as Ts,G as te,w as Cs,x as ws,y as G,z as he,A as Rt,E as xs,H as Ds,J as Fs,L as Es,M as Rs,N as Be,Q as Ge,R as Ve,U as He,V as Nt,W as jt,X as E,Y as Ot,Z as It,_ as Ns,$ as js,a0 as Os,a1 as Is,a2 as Ps,a3 as Ls,a4 as ks,a5 as As,a6 as Ze,a7 as Ms,a8 as Pt,a9 as _s,aa as Us,ab as $s,ac as oe,ad as Ks,ae as Ws,af as Bs,ag as Gs,ah as Vs,ai as Hs,aj as Zs,ak as qe,al as qs,am as Ye,an as Ys,ao as H,ap as zs,aq as Js,ar as Xs,as as Qs,at as en,au as tn,av as sn,aw as nn,ax as an,ay as on,az as rn,aA as ln,aB as cn,aC as dn,aD as un,aE as hn,aF as mn}from"./ControlType-9fd03f7c.js";import{L as A,v as Z,a as pn,M as fn,b as gn,c as bn,d as vn,l as yn,e as we,f as Sn,T as le,g as Tn,h as Cn,i as wn,j as xn,k as Dn,m as Fn,n as En,o as Rn,p as Nn,q as jn,r as On,s as In,t as Pn,u as Ln,w as kn,x as ze,y as Je,z as Xe,A as An,B as Lt,C as Mn,D as _n,E as Un,F as $n,G as Kn,H as Qe,I as Wn}from"./index-d7bc9619.js";import{C as Bn,B as Gn,m as Vn,a as Hn,T as Zn,L as kt,b as qn,l as Yn,N as zn,D as Jn,I as Xn,u as Qn,c as ea,d as ta,g as sa,e as na}from"./useUser-456d27e9.js";class et{static makeSortConfig(e,t){return{column:e,direction:t}}static makeFilterConfig(e){var t=[],s=[];return e.forEach((o,r)=>{t.push(o),r>0&&s.push(de.and)}),{filterItems:t,filterOperators:s}}static combineFilterConfigs(e,t){var s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:de.and;return{filterItems:[...e.filterItems,...t.filterItems],filterOperators:[...e.filterOperators,s,...t.filterOperators]}}static makeFilterItem(e,t,s){return{columnName:e,type:t,value:s}}}function aa(a,e,t){if(a.length>e){var s=a.length-t;return{toKeep:a.slice(s),toPrune:a.slice(0,s)}}return{toKeep:a,toPrune:[]}}function tt(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable})),t.push.apply(t,s)}return t}function st(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?tt(Object(t),!0).forEach(function(s){j(a,s,t[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):tt(Object(t)).forEach(function(s){Object.defineProperty(a,s,Object.getOwnPropertyDescriptor(t,s))})}return a}function nt(a,e,t,s,o,r,i){try{var l=a[r](i),c=l.value}catch(d){t(d);return}l.done?e(c):Promise.resolve(c).then(s,o)}function $(a){return function(){var e=this,t=arguments;return new Promise(function(s,o){var r=a.apply(e,t);function i(c){nt(r,s,o,i,l,"next",c)}function l(c){nt(r,s,o,i,l,"throw",c)}i(void 0)})}}function j(a,e,t){return e=oa(e),e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function oa(a){var e=ra(a,"string");return typeof e=="symbol"?e:String(e)}function ra(a,e){if(typeof a!="object"||a===null)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var s=t.call(a,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}var ve=A.module("PouchStorageTable"),ia="Deephaven.";gt.plugin(es);function la(a,e){switch(a){case M.in:case M.contains:return{$regex:new RegExp("".concat(e))};case M.inIgnoreCase:return{$regex:new RegExp("".concat(e),"i")};case M.eq:return{$eq:e};case M.notEq:return{$neq:e};case M.greaterThan:return{$gt:e};case M.greaterThanOrEqualTo:return{$gte:e};case M.lessThan:return{$lt:e};case M.lessThanOrEqualTo:return{$lte:e};case M.startsWith:return{$regex:new RegExp("^(?".concat(e,").*"))};default:throw new Error("Unsupported type: ".concat(a))}}function ca(a){for(var{filterItems:e,filterOperators:t}=a,s=null,o=0;o<e.length;o+=1){var r=e[o],{columnName:i,type:l,value:c}=r,d={[i]:la(l,c)};if(o===0)s=d;else if(s!==null&&o-1<t.length){var u=t[o-1];if(u===de.and)s={$and:[s,d]};else if(u===de.or)s={$or:[s,d]};else throw new Error("Unexpected filter operator ".concat(u,", ").concat(d))}}if(s==null)throw new Error("Invalid filter config ".concat(a));return s}function ye(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return{$and:[...a.map(e=>ca(e)),{name:{$gt:null}},{id:{$gt:null}}]}}function da(a){var e,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return[{id:t?"desc":"asc"},...(e=a?.map(s=>({[s.column]:s.direction})))!==null&&e!==void 0?e:[]]}class ua{constructor(e,t){j(this,"db",void 0),j(this,"changes",void 0),j(this,"listeners",[]),j(this,"itemListeners",new Map),j(this,"currentSize",0),j(this,"currentViewport",void 0),j(this,"currentReverse",!1),j(this,"currentFilter",null),j(this,"currentSort",null),j(this,"infoUpdatePromise",void 0),j(this,"viewportUpdatePromise",void 0),j(this,"currentViewportData",void 0),this.db=new gt("".concat(ia).concat(e),t),this.db._remote=!1,this.listenForChanges(),this.db.createIndex({index:{fields:["id","name"]}}),this.refreshInfo()}listenForChanges(){this.changes=this.db.changes({live:!0,since:"now",include_docs:!0}).on("change",this.dbUpdate.bind(this))}onUpdate(e){return this.listeners=[...this.listeners,e],()=>{this.listeners=this.listeners.filter(t=>t!==e)}}onItemUpdate(e,t){return this.itemListeners.has(e)||this.itemListeners.set(e,[]),this.itemListeners.set(e,[...this.itemListeners.get(e),t]),this.refreshItem(e),()=>{this.itemListeners.set(e,this.itemListeners.get(e).filter(s=>s!==t))}}close(){this.listeners=[]}get size(){return this.currentSize}get viewport(){return this.currentViewport}setReversed(e){this.currentReverse=e,this.currentViewportData=void 0,this.refreshData()}setViewport(e){this.currentViewport=e,this.refreshInfo(),this.refreshData()}setSorts(e){this.currentSort=e,this.currentViewportData=void 0,this.refreshData()}setFilters(e){this.currentFilter=e,this.currentViewportData=void 0,this.refreshInfo(),this.refreshData()}get data(){return this.currentViewportData}getViewportData(){var e=this;return $(function*(){var t;return e.viewportUpdatePromise||e.refreshData(),(t=e.viewportUpdatePromise)!==null&&t!==void 0?t:Promise.resolve({items:[],offset:0})})()}put(e){var t=this;return $(function*(){var s=st(st({},e),{},{_id:e.id});return yield t.db.put(s),s})()}sendUpdate(){for(var e,{listeners:t}=this,s=(e=this.currentViewportData)!==null&&e!==void 0?e:{items:[],offset:0},o=0;o<t.length;o+=1)t[o](s)}sendItemUpdate(e){var t=this.itemListeners.get(e.id);if(t!==void 0)for(var s=0;s<t.length;s+=1)t[s](e)}dbUpdate(e){ve.debug("Update received",e),this.refreshInfo(),e.doc!==void 0&&this.sendItemUpdate(e.doc),this.refreshData()}fetchInfo(e){var t=this;return $(function*(){return t.db.find({selector:e,fields:[]})})()}refreshInfo(){var e=this;return $(function*(){try{var t,s;(t=e.infoUpdatePromise)===null||t===void 0||t.cancel(),e.infoUpdatePromise=K.makeCancelable(e.fetchInfo(ye((s=e.currentFilter)!==null&&s!==void 0?s:[])));var o=yield e.infoUpdatePromise;e.currentSize=o.docs.length,e.sendUpdate()}catch(r){if(!K.isCanceled(r))throw ve.error("Unable to refreshInfo",r),r}})()}fetchViewportData(e,t,s){var o=this;return $(function*(){return o.db.find({selector:t,skip:e.top,limit:e.bottom-e.top+1,sort:s,fields:["id","name"]}).then(r=>({items:r.docs,offset:e.top}))})()}refreshData(){var e=this;return $(function*(){if(e.currentViewport)try{var t,s,o=ye((t=e.currentFilter)!==null&&t!==void 0?t:[]),r=da(e.currentSort,e.currentReverse);(s=e.viewportUpdatePromise)===null||s===void 0||s.cancel(),e.viewportUpdatePromise=K.makeCancelable(e.fetchViewportData(e.currentViewport,o,r));var i=yield e.viewportUpdatePromise;return e.currentViewportData=i,e.sendUpdate(),i}catch(l){if(!K.isCanceled(l))throw ve.error("Unable to refreshData",l),l}})()}refreshItem(e){var t=this;return $(function*(){var s=yield t.db.find({selector:{id:e},limit:1}),o=s.docs[0];return o!==void 0&&t.sendItemUpdate(o),o})()}getSnapshot(e){var t=this;return $(function*(){var s=new Map,o=[{id:t.currentReverse?"desc":"asc"}];return yield Promise.all(e.map(function(){var r=$(function*(i){var l,[c,d]=i,u=d-c+1;return t.db.find({selector:ye((l=t.currentFilter)!==null&&l!==void 0?l:[]),skip:c,limit:u,sort:o,fields:["id","name"]}).then(h=>{for(var g=0;g<u;g+=1){var v=c+g;s.set(v,h.docs[g])}})});return function(i){return r.apply(this,arguments)}}())),s})()}}const ha=ua;function at(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable})),t.push.apply(t,s)}return t}function re(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?at(Object(t),!0).forEach(function(s){At(a,s,t[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):at(Object(t)).forEach(function(s){Object.defineProperty(a,s,Object.getOwnPropertyDescriptor(t,s))})}return a}function ot(a,e,t,s,o,r,i){try{var l=a[r](i),c=l.value}catch(d){t(d);return}l.done?e(c):Promise.resolve(c).then(s,o)}function Q(a){return function(){var e=this,t=arguments;return new Promise(function(s,o){var r=a.apply(e,t);function i(c){ot(r,s,o,i,l,"next",c)}function l(c){ot(r,s,o,i,l,"throw",c)}i(void 0)})}}function At(a,e,t){return e=ma(e),e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function ma(a){var e=pa(a,"string");return typeof e=="symbol"?e:String(e)}function pa(a,e){if(typeof a!="object"||a===null)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var s=t.call(a,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}var fa=2500,ga=2e3,O=A.module("PouchCommandHistoryTable");class ba extends ha{constructor(e,t){var s;super("CommandHistoryStorage.".concat(e),{auto_compaction:!0,revs_limit:1}),At(this,"searchText",void 0),this.cache=t,this.cache.tableRegistry.has(this.cacheKey)||this.cache.tableRegistry.set(this.cacheKey,new Set),O.debug("Adding table to registry",this.cacheKey),(s=this.cache.tableRegistry.get(this.cacheKey))===null||s===void 0||s.add(this)}get cacheKey(){return this.db.name}setSearch(e){O.debug("Setting search filters",e),this.searchText=e.trim().toLowerCase(),this.setFilters(e?[et.makeFilterConfig([et.makeFilterItem("name",M.contains,e)])]:[])}dbUpdate(e){O.debug("Clearing cache and refreshing data",e),this.cache.response.delete(this.cacheKey),super.dbUpdate(e)}fetchData(e){var t=this;return Q(function*(){return K.withTimeout(0,Q(function*(){t.cache.response.has(t.cacheKey)?O.debug("Fetching from cache",t.searchText,t.viewport):(O.debug("Fetching from PouchDB",t.searchText,t.viewport),t.cache.response.set(t.cacheKey,t.db.allDocs({include_docs:!0}).then(o=>{var r=o.rows.map(c=>c.doc).filter(c=>{var{name:d}=c;return d});O.debug("Fetched ".concat(r.length," command history items"));var{toKeep:i,toPrune:l}=aa(r,fa,ga);return l.length&&t.pruneItems(l),{docs:i}})));var s=t.cache.response.get(t.cacheKey);return t.searchText==null||t.searchText===""?s:re(re({},s),{},{docs:(yield s).docs.filter(o=>{var{name:r}=o;return r.toLowerCase().includes(t.searchText)})})}))})()}fetchInfo(e){var t=this;return Q(function*(){return t.fetchData(e)})()}fetchViewportData(e,t,s){var o=this;return Q(function*(){var r=yield o.fetchData(t);O.debug("Fetching viewport data",e.top,e.bottom+1,s,r);var i=typeof s[0]=="object"&&s[0].id==="desc",l=i?r.docs.slice(0).reverse():r.docs,c=l.slice(e.top,e.bottom+1);return{items:c,offset:e.top}})()}pruneItems(e){var t=this;return Q(function*(){if(t.cache.isPruning.get(t.cacheKey)===!0){O.debug("Pruning already in progress. Skipping.");return}try{O.debug("Pruning ".concat(e.length," command history items"));var s=t.cache.pauseChangeListeners(t.cacheKey);t.cache.isPruning.set(t.cacheKey,!0),yield t.db.bulkDocs(e.map(o=>re(re({},o),{},{_deleted:!0}))),t.cache.isPruning.set(t.cacheKey,!1),s(),O.debug("Finished pruning command history items")}catch(o){O.error("An error occurred while pruning db",o)}})()}close(){var e,t,s;O.debug("Closing table",this,(e=this.cache.tableRegistry.get(this.cacheKey))===null||e===void 0?void 0:e.size),(t=this.cache.tableRegistry.get(this.cacheKey))===null||t===void 0||t.delete(this),(s=this.changes)===null||s===void 0||s.cancel(),super.close()}}const rt=ba;function Se(a,e,t){return e=va(e),e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function va(a){var e=ya(a,"string");return typeof e=="symbol"?e:String(e)}function ya(a,e){if(typeof a!="object"||a===null)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var s=t.call(a,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}var it=A.module("PouchCommandHistoryCache");class Sa{constructor(){Se(this,"isPruning",void 0),Se(this,"response",void 0),Se(this,"tableRegistry",void 0),this.isPruning=new Map,this.response=new Map,this.tableRegistry=new Map}pauseChangeListeners(e){var t,s=[];return(t=this.tableRegistry.get(e))===null||t===void 0||t.forEach(o=>{o.changes&&(it.debug("Pausing event listeners on '".concat(e,"' table"),o),o.changes.cancel(),s.push(o))}),()=>{s.forEach(o=>{var r,i;(r=(i=this.tableRegistry.get(e))===null||i===void 0?void 0:i.has(o))!==null&&r!==void 0&&r&&(it.debug("Resuming event listeners on '".concat(e,"' table"),o),o.listenForChanges())})}}}const Ta=Sa;function lt(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(o){return Object.getOwnPropertyDescriptor(a,o).enumerable})),t.push.apply(t,s)}return t}function ct(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?lt(Object(t),!0).forEach(function(s){xe(a,s,t[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):lt(Object(t)).forEach(function(s){Object.defineProperty(a,s,Object.getOwnPropertyDescriptor(t,s))})}return a}function dt(a,e,t,s,o,r,i){try{var l=a[r](i),c=l.value}catch(d){t(d);return}l.done?e(c):Promise.resolve(c).then(s,o)}function Te(a){return function(){var e=this,t=arguments;return new Promise(function(s,o){var r=a.apply(e,t);function i(c){dt(r,s,o,i,l,"next",c)}function l(c){dt(r,s,o,i,l,"throw",c)}i(void 0)})}}function xe(a,e,t){return e=Ca(e),e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function Ca(a){var e=wa(a,"string");return typeof e=="symbol"?e:String(e)}function wa(a,e){if(typeof a!="object"||a===null)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var s=t.call(a,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}var ut=A.module("PouchCommandHistoryStorage");class xa{constructor(){xe(this,"cache",new Ta),xe(this,"updateTableMap",new Map)}getUpdateTable(e){return this.updateTableMap.has(e)||this.updateTableMap.set(e,new rt(e,this.cache)),this.updateTableMap.get(e)}getTable(e){var t=this;return Te(function*(){return new rt(e,t.cache)})()}addItem(e,t,s,o){var r=this;return Te(function*(){return r.updateItem(e,{id:"".concat(new Date().getTime()),name:s,data:o})})()}updateItem(e,t){var s=this;return Te(function*(){var o=s.getUpdateTable(e),r=yield o.refreshItem(t.id),i=ct(ct({},r??{}),t);return ut.debug("Updating item",i),yield o.put(i),ut.debug("Update saved"),t})()}listenItem(e,t,s){var o=this.getUpdateTable(e);return o.onItemUpdate(t,s)}}const Mt="SET_LAYOUT_STORAGE",Da=a=>({type:Mt,payload:a});var{dh:Fa}=globalThis;const B=Fa;const Ea=A.module("SettingsUtils");function Ra(a){return a.formatString!=null}function _t(a){const e=ts.parse(window.navigator.userAgent),t=`${e.browser.name??""} ${Number(parseFloat(e.browser.version??""))||""}`,s=`${e.os.name??""} ${e.os.version??""}`;return{"Engine Version":a.get("deephaven.version")??"Unknown","Web UI Version":"0.61.1","Java Version":a.get("java.version")??"Unknown","Barrage Version":a.get("barrage.version")??"Unknown","Browser Name":t.trim()||"Unknown","OS Name":s.trim()||"Unknown"}}function De(a){const e=a?.querySelector("input, select, textarea");e&&e.focus()}function Ut(a,e){return a.defaultFormatString===e.defaultFormatString}function Na(a,e){return Ut(a,e)}function ja(a,e){return Ut(a,e)}function $t(a){return a!==""&&ms.isValidColumnName(a)}function q(a,e,t){if(!e||t.formatString==null||!Ra(t))return!1;switch(e){case"datetime":return W.isValid(a,t);case"decimal":return k.isValid(a,t);case"int":return L.isValid(a,t);default:return Ea.warn("Trying to validate format of unknown type"),!0}}function Oa(a){const{id:e,isNewRule:t,...s}=a;return s}function Ia(a,e){return $t(e.columnName)&&q(a,e.columnType,e.format)}function Kt(a){const{timestamp:e,timeZone:t,showTimeZone:s,showTSeparator:o,isGlobalOptions:r,legacyGlobalFormat:i}=a,l=yt(),c=m.useMemo(()=>new ps(l,[],{timeZone:t,showTimeZone:s,showTSeparator:o}),[l,s,o,t]),d=r?W.getGlobalFormats(s,o):W.getFormats(s,o);return i!=null&&!d.includes(i)&&d.unshift(i),n.jsx(n.Fragment,{children:d.map(u=>{const h=W.makeFormat("",u,W.TYPE_GLOBAL);return n.jsx("option",{value:u,"data-testid":"time-format",children:c.getFormattedString(e,F.dataType.DATETIME,"",h)},u)})})}function Pa(){return n.jsx(n.Fragment,{children:fs.TIME_ZONES.map(a=>{const{label:e,value:t}=a;return n.jsx("option",{value:t,children:e},t)})})}const V=A.module("FormattingSectionContent");class Ne extends m.PureComponent{static defaultProps={scrollTo:()=>{}};static inputDebounceTime=250;constructor(e){super(e),this.debouncedCommitChanges=Fe(this.commitChanges.bind(this),Ne.inputDebounceTime),this.queueUpdate=this.queueUpdate.bind(this),this.handleDefaultDateTimeFormatChange=this.handleDefaultDateTimeFormatChange.bind(this),this.handleDefaultDecimalFormatChange=this.handleDefaultDecimalFormatChange.bind(this),this.handleDefaultIntegerFormatChange=this.handleDefaultIntegerFormatChange.bind(this),this.handleShowTimeZoneChange=this.handleShowTimeZoneChange.bind(this),this.handleShowTSeparatorChange=this.handleShowTSeparatorChange.bind(this),this.handleTimeZoneChange=this.handleTimeZoneChange.bind(this),this.handleResetDateTimeFormat=this.handleResetDateTimeFormat.bind(this),this.handleResetDecimalFormat=this.handleResetDecimalFormat.bind(this),this.handleResetIntegerFormat=this.handleResetIntegerFormat.bind(this),this.handleResetTimeZone=this.handleResetTimeZone.bind(this),this.handleTruncateNumbersWithPoundChange=this.handleTruncateNumbersWithPoundChange.bind(this);const{defaultDateTimeFormat:t,defaultDecimalFormatOptions:s,defaultIntegerFormatOptions:o,showTimeZone:r,showTSeparator:i,timeZone:l,truncateNumbersWithPound:c}=e;this.containerRef=X.createRef(),this.pendingUpdates=[],this.state={showTimeZone:r,showTSeparator:i,timeZone:l,defaultDateTimeFormat:t,defaultDecimalFormatOptions:s,defaultIntegerFormatOptions:o,truncateNumbersWithPound:c,timestampAtMenuOpen:new Date}}componentDidMount(){De(this.containerRef.current)}componentWillUnmount(){this.debouncedCommitChanges.flush()}debouncedCommitChanges;pendingUpdates;containerRef;getCachedDateTimeFormatOptions=Ce((e,t,s,o=!1,r)=>{const{timestampAtMenuOpen:i}=this.state;return n.jsx(Kt,{timestamp:i,timeZone:e,showTimeZone:t,showTSeparator:s,isGlobalOptions:o,legacyGlobalFormat:r})});queueUpdate(e){this.pendingUpdates.push(e),this.debouncedCommitChanges()}handleDefaultDateTimeFormatChange(e){V.debug("handleDefaultDateTimeFormatChange",e);const t={defaultDateTimeFormat:e};this.setState(t),this.queueUpdate(t)}handleDefaultDecimalFormatChange(e){V.debug("handleDefaultDecimalFormatChange",e.target.value);const t={defaultDecimalFormatOptions:{defaultFormatString:e.target.value}};this.setState(t),q(dh,F.dataType.DECIMAL,k.makeCustomFormat(e.target.value))&&this.queueUpdate(t)}handleDefaultIntegerFormatChange(e){V.debug("handleDefaultIntegerFormatChange",e.target.value);const t={defaultIntegerFormatOptions:{defaultFormatString:e.target.value}};this.setState(t),q(dh,F.dataType.INT,L.makeCustomFormat(e.target.value))&&this.queueUpdate(t)}handleShowTimeZoneChange(){const{showTimeZone:e}=this.state,t={showTimeZone:!e};this.setState(t),this.queueUpdate(t)}handleShowTSeparatorChange(){const{showTSeparator:e}=this.state,t={showTSeparator:!e};this.setState(t),this.queueUpdate(t)}handleTimeZoneChange(e){const t={timeZone:e};this.setState(t),this.queueUpdate(t)}handleResetDateTimeFormat(){const{defaults:e}=this.props,{defaultDateTimeFormat:t,showTimeZone:s,showTSeparator:o}=e;V.debug("handleResetDateTimeFormat"),this.setState({defaultDateTimeFormat:t,showTimeZone:s,showTSeparator:o}),this.queueUpdate({defaultDateTimeFormat:void 0,showTimeZone:void 0,showTSeparator:void 0})}handleResetTimeZone(){const{defaults:e}=this.props,{timeZone:t}=e;V.debug("handleResetTimeZone"),this.setState({timeZone:t}),this.queueUpdate({timeZone:void 0})}handleResetDecimalFormat(){const{defaults:e}=this.props,{defaultDecimalFormatOptions:t}=e;V.debug("handleResetDecimalFormat"),this.setState({defaultDecimalFormatOptions:t}),this.queueUpdate({defaultDecimalFormatOptions:void 0})}handleResetIntegerFormat(){const{defaults:e}=this.props,{defaultIntegerFormatOptions:t}=e;V.debug("handleResetIntegerFormat"),this.setState({defaultIntegerFormatOptions:t}),this.queueUpdate({defaultIntegerFormatOptions:void 0})}handleTruncateNumbersWithPoundChange(){const{truncateNumbersWithPound:e}=this.state,t={truncateNumbersWithPound:e!==!0};this.setState(t),this.queueUpdate(t)}commitChanges(){const{updateSettings:e}=this.props,t=this.pendingUpdates.reduce((s,o)=>({...s,...o}),{});this.pendingUpdates=[],e(t)}render(){const{defaults:e,dh:t}=this.props,{defaultDateTimeFormat:s,defaultDecimalFormatOptions:o,defaultIntegerFormatOptions:r,timeZone:i,showTimeZone:l,showTSeparator:c,truncateNumbersWithPound:d}=this.state,{defaultFormatString:u=k.DEFAULT_FORMAT_STRING}=o??{},{defaultFormatString:h=L.DEFAULT_FORMAT_STRING}=r??{},g=i===e.timeZone,v=c===e.showTSeparator&&l===e.showTimeZone&&s===e.defaultDateTimeFormat,S=Na(o,e.defaultDecimalFormatOptions),R=ja(r,e.defaultIntegerFormatOptions);return n.jsx("div",{className:"app-settings-formatting-section",ref:this.containerRef,children:n.jsxs("div",{className:"container-fluid p-0",children:[n.jsx("div",{className:"app-settings-menu-description mb-3",children:"Choose the default formatting rule to apply to all table columns based on their type."}),n.jsxs("div",{className:"form-row mb-2",children:[n.jsx("label",{className:"col-form-label col-3",htmlFor:"select-reset-timezone",children:"Time zone"}),n.jsx("div",{className:"col pr-0",children:n.jsx(ue,{className:"custom-select",value:i,onChange:this.handleTimeZoneChange,id:"select-reset-timezone",children:n.jsx(Pa,{})})}),n.jsx("div",{className:"col-1 btn-col",children:n.jsx(y,{kind:"ghost",icon:Z,onClick:this.handleResetTimeZone,tooltip:"Reset Time Zone",className:D("btn-reset","btn-reset-time-zone",{hidden:g})})})]}),n.jsxs("div",{className:"form-row mb-2",children:[n.jsx("label",{className:"col-form-label col-3",htmlFor:"select-default-time-format",children:"DateTime"}),n.jsx("div",{className:"col pr-0",children:n.jsx(ue,{className:"custom-select",value:s,onChange:this.handleDefaultDateTimeFormatChange,id:"select-default-time-format",children:this.getCachedDateTimeFormatOptions(i,l,c,!0,s)})}),n.jsx("div",{className:"col-1 btn-col",children:n.jsx(y,{kind:"ghost",icon:Z,onClick:this.handleResetDateTimeFormat,tooltip:"Reset DateTime Options",className:D("btn-reset","btn-reset-date-time",{hidden:v})})})]}),n.jsx("div",{className:"form-row",children:n.jsx("div",{className:"offset-3 col-9",children:n.jsx(be,{checked:l??null,onChange:this.handleShowTimeZoneChange,children:"Show time zone in dates"})})}),n.jsx("div",{className:"form-row mb-3",children:n.jsx("div",{className:"offset-3 col-9",children:n.jsx(be,{checked:c??null,onChange:this.handleShowTSeparatorChange,children:"Show 'T' separator"})})}),n.jsxs("div",{className:"form-row mb-2",children:[n.jsx("label",{className:"col-form-label col-3",htmlFor:"default-decimal-format-input",children:"Decimal"}),n.jsx("div",{className:"col pr-0",children:n.jsx("input",{className:D("form-control","flex-grow-1","default-decimal-format-input",{"is-invalid":!q(t,F.dataType.DECIMAL,k.makeCustomFormat(u))}),"data-lpignore":!0,placeholder:k.DEFAULT_FORMAT_STRING,type:"text",id:"default-decimal-format-input",value:u,onChange:this.handleDefaultDecimalFormatChange})}),n.jsx("div",{className:"col-1 btn-col",children:n.jsx(y,{kind:"ghost",icon:Z,onClick:this.handleResetDecimalFormat,tooltip:"Reset Decimal Formatting",className:D("btn-reset","btn-reset-decimal",{hidden:S}),"data-testid":"btn-reset-decimal"})})]}),n.jsxs("div",{className:"form-row mb-2",children:[n.jsx("label",{className:"col-form-label col-3",htmlFor:"default-integer-format-input",children:"Integer"}),n.jsx("div",{className:"col pr-0",children:n.jsx("input",{className:D("form-control","flex-grow-1","default-integer-format-input",{"is-invalid":!q(t,F.dataType.INT,L.makeCustomFormat(h))}),"data-lpignore":!0,placeholder:L.DEFAULT_FORMAT_STRING,type:"text",id:"default-integer-format-input",value:h,onChange:this.handleDefaultIntegerFormatChange})}),n.jsx("div",{className:"col-1 btn-col",children:n.jsx(y,{kind:"ghost",icon:Z,onClick:this.handleResetIntegerFormat,tooltip:"Reset Integer Formatting",className:D("btn-reset","btn-reset-integer",{hidden:R}),"data-testid":"btn-reset-integer"})})]}),n.jsx("div",{className:"form-row mb-3",children:n.jsx("div",{className:"offset-3 col-9",children:n.jsx(be,{checked:d??null,onChange:this.handleTruncateNumbersWithPoundChange,children:"Show truncated numbers as ###"})})})]})})}}const La=a=>({defaultDateTimeFormat:gs(a),defaultDecimalFormatOptions:St(a),defaultIntegerFormatOptions:Tt(a),dh:Ct(a),showTimeZone:wt(a),showTSeparator:xt(a),truncateNumbersWithPound:bs(a),timeZone:Dt(a),defaults:vs(a)}),ka=se(La,{updateSettings:Ee})(Ne);function Aa(){const[a,e]=m.useState(!1),t=()=>{e(!a)};return n.jsxs(n.Fragment,{children:[n.jsx(y,{kind:"ghost",onClick:t,icon:pn,children:"Legal Notices"}),n.jsxs(fn,{isOpen:a,toggle:t,children:[n.jsx(gn,{toggle:t,children:"Legal Notice"}),n.jsxs(bn,{children:[n.jsx("p",{children:"Deephaven software is protected by U.S. Patent Nos. 9,612,959; 9,613,018; 9,613,109; 9,619,210; 9,633,060; 9,639,570; 9,672,238; 9,679,006; 9,690,821; 9,710,511; 9,760,591; 9,805,084; 9,836,494; 9,836,495; 9,886,469; 9,898,496; 9,934,266; 10,002,153; 10,002,154; 10,002,155; 10,003,673; 10,019,138; 10,069,943; 10,176,211; 10,198,465; 10,198,466; 10,198,469; 10,212,257; 10,241,960; 10,241,965; 10,242,040; 10,242,041; 10,346,394; 10,353,893; 10,452,649; 10,496,639; 10,540,351; 10,552,412; 10,565,194; 10,565,206; 10,572,474; 10,621,168; 10,642,829; 10,657,184; 10,678,787; 10,691,686; 10,783,191; 10,866,943; 10,909,183; 10,915,526; 10,922,311; 10,929,394; 11,023,462; 11,126,662; 11,151,133; 11,238,036; 11,249,994; 11,263,211; 11,449,557; 11,514,037; 11,556,528; and 11,574,018. Other patents pending."}),n.jsxs("p",{children:["© 2016-",new Date().getFullYear()," Deephaven Data Labs LLC. Patent Pending."]})]})]})]})}function Y(a){const{children:e,isExpanded:t,sectionKey:s,title:o,onToggle:r}=a;return n.jsxs(n.Fragment,{children:[n.jsx("div",{children:n.jsxs(y,{kind:"ghost",className:"btn-collapse-trigger",onClick:()=>r(s),children:[n.jsx("div",{className:"flex-grow-1",children:o}),n.jsx("div",{className:"flex-shrink-0",children:n.jsx(x,{transform:t?"flip-v":"",icon:vn})})]})}),n.jsx(Bn,{in:t,autoFocusOnShow:!0,children:e})]})}Y.propTypes={children:f.node,isExpanded:f.bool.isRequired,sectionKey:f.string.isRequired,title:f.node.isRequired,onToggle:f.func};Y.defaultProps={children:null,onToggle:()=>{}};function Ma({shortcut:a,displayText:e,categoryName:t,onChange:s}){const[o,r]=m.useState(e),[i,l]=m.useState(a.getKeyState()),[c,d]=m.useState(!1),[u,h]=m.useState("");m.useEffect(function(){r(e),l(a.getKeyState())},[e,a]),m.useEffect(function(){r(_.getDisplayText(i)),a.matchesKeyState(i)&&d(!1)},[i,a]),m.useEffect(function(){if(c){if(!_.isValidKeyState(i)){_.isAllowedKey(i.keyValue)?h("Must contain a modifier key"):h("Must contain an allowed action key");return}const p=Re.getConflictingShortcuts(i).filter(b=>b.id.startsWith(t)&&b!==a).map(b=>b.name);if(p.length){h(`Conflicts with ${p.join(", ")}`);return}h("")}else h("")},[c,i,t,a]);function g(C){if(C.stopPropagation(),C.preventDefault(),a.isEditable&&!C.repeat){const p=_.getKeyStateFromEvent(C),b=_.createKeyState([ys.BACKSPACE]);_.doKeyStatesMatch(p,b)?l(_.NULL_KEY_STATE):l(p)}}function v(C){C.stopPropagation(),C.preventDefault(),a.matchesKeyState(i)||d(!0)}function S(){We.disableAllActions()}function R(){We.enableAllActions()}function N(){a.setKeyState(i),d(!1),s(a)}function T(){const C=a.getKeyState();l(C),d(!1)}function U(){d(!0),l(a.getDefaultKeyState())}return n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"shortcut-item-container",children:[n.jsxs("label",{className:"shortcut-item-name",children:[a.name,a.tooltip!==void 0&&n.jsx(Ft,{children:a.tooltip})]}),n.jsxs("div",{className:"shortcut-item-input-container",children:[n.jsx("input",{className:D("form-control",{"is-invalid":u}),onKeyDown:g,onKeyUp:v,onFocus:S,onBlur:R,disabled:!a.isEditable,value:o,readOnly:!0}),!_.doKeyStatesMatch(i,a.getDefaultKeyState())&&!u&&n.jsx(y,{className:"reset-to-default-button",kind:"ghost",icon:n.jsx(x,{icon:Z,transform:{rotate:90,flipX:!0}}),tooltip:"Reset to default",onClick:U})]})]}),c&&n.jsxs("div",{className:D("shortcut-item-message-container",{"is-invalid":u}),children:[n.jsx("div",{className:"shortcut-item-message",children:u}),n.jsxs("div",{className:"shortcut-item-message-buttons",children:[_.isValidKeyState(i)&&n.jsx(y,{kind:"ghost",onClick:N,children:"Confirm"}),n.jsx(y,{kind:"ghost",onClick:T,children:"Undo"})]})]})]})}function _a({shortcutOverrides:a={},updateSettings:e}){const t=m.useCallback(i=>{const l=_.isMacPlatform,c={mac:{...a.mac},windows:{...a.windows}},d=l?c.mac:c.windows;i.forEach(u=>{u.isDefault()?delete d[u.id]:d[u.id]=u.getKeyState()}),e({shortcutOverrides:c})},[e,a]);let s=Array.from(Re.shortcutsByCategory.entries()).map(([i,l])=>({name:i,shortcuts:l}));const o=s.findIndex(i=>i.name.toUpperCase()==="GLOBAL"),r=s.splice(o,1);return s=s.concat(r),n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"app-settings-menu-description",children:"Customize shortcuts below. To prevent unexpected results, avoid conflicting shortcuts with the browser or IDE editor."}),s.map(i=>n.jsx(Ua,{name:i.name,shortcuts:i.shortcuts,saveShortcutOverrides:t},i.name))]})}function Ua({name:a,shortcuts:e,saveShortcutOverrides:t}){function s(c){return c.split("_").map(d=>`${d[0].toUpperCase()}${d.slice(1).toLowerCase()}`).join(" ")}const[o,r]=m.useState(e);function i(c){const d=o.filter(h=>h!==c&&!h.isNull()&&h.matchesKeyState(c.getKeyState()));d.forEach(h=>h.setToNull());const u=[c,...d];t(u),r(h=>[...h])}const l=m.useMemo(()=>o.map(c=>c.getDisplayText()),[o]);return n.jsxs("div",{className:"mt-3",children:[n.jsx("div",{className:"font-weight-bold",children:s(a)}),o.map((c,d)=>n.jsx(Ma,{shortcut:c,displayText:l[d],categoryName:a,onChange:i},c.id))]})}const $a=a=>({shortcutOverrides:Ss(a)}),Ka={updateSettings:Ee},Wa=se($a,Ka)(_a),Ba="yyyy-MM-dd-HHmmss";function Wt(a,e="root",t=new Map([[a,""]])){const s={};return Object.entries(a).forEach(([o,r])=>{try{JSON.stringify(r),s[o]=r}catch{const l=r;if(typeof r=="bigint")s[o]=r.toString();else if(t.has(l))s[o]=`Circular ref to ${t.get(l)}`;else{const c=`${e}.${o}`;t.set(l,c),s[o]=Wt(r,c,t)}}}),s}function Ga(){const a=Et.getState();return JSON.stringify(Wt(a),null,2)}function Va(a){const e={uiVersion:"0.61.1",userAgent:navigator.userAgent,...a};return JSON.stringify(e,null,2)}async function Ha(a=`${B.i18n.DateTimeFormat.format(Ba,new Date)}_support_logs`,e){const t=new bt,s=t.folder(a);s.file("console.txt",yn.getFormattedHistory()),s.file("redux.json",Ga()),s.file("metadata.json",Va(e));const o=await t.generateAsync({type:"blob"}),r=document.createElement("a");r.href=URL.createObjectURL(o),r.download=`${a}.zip`,r.click()}const Za=[{value:F.dataType.DATETIME,label:"DateTime"},{value:F.dataType.DECIMAL,label:"Decimal"},{value:F.dataType.INT,label:"Integer"}];function qa(){const a=Za.map(e=>n.jsx("option",{value:e.value,children:e.label},`key-columnType-${e.value}`));return n.jsxs(n.Fragment,{children:[n.jsx("option",{disabled:!0,value:"",children:"Select Type"},"key-columnType-placeholder"),a]})}class je extends m.PureComponent{static defaultProps={scrollTo:()=>{}};static inputDebounceTime=250;constructor(e){super(e),this.debouncedCommitChanges=Fe(this.commitChanges.bind(this),je.inputDebounceTime),this.handleFormatRuleEntered=this.handleFormatRuleEntered.bind(this),this.handleFormatRuleChange=this.handleFormatRuleChange.bind(this),this.handleFormatRuleCreate=this.handleFormatRuleCreate.bind(this),this.handleFormatRuleDelete=this.handleFormatRuleDelete.bind(this);const{formatter:t,showTimeZone:s,showTSeparator:o,timeZone:r}=e,i=t.map((l,c)=>({...l,id:c}));this.containerRef=X.createRef(),this.addFormatRuleButtonRef=X.createRef(),this.lastFormatRuleIndex=i.length,this.state={formatSettings:i,formatRulesChanged:!1,showTimeZone:s,showTSeparator:o,timeZone:r,timestampAtMenuOpen:new Date}}componentDidMount(){De(this.containerRef.current)}componentWillUnmount(){this.debouncedCommitChanges.flush()}debouncedCommitChanges;containerRef;addFormatRuleButtonRef;lastFormatRuleIndex;isDuplicateRule(e){const{formatSettings:t}=this.state;return t.some(s=>s.id!==e.id&&s.columnName===e.columnName&&s.columnType===e.columnType)??!1}getAutoIncrementFormatRuleIndex(){const{lastFormatRuleIndex:e}=this;return this.lastFormatRuleIndex+=1,e}getCachedColumnTypeOptions=Ce(()=>n.jsx(qa,{}));getCachedDateTimeFormatOptions=Ce((e,t,s,o=!1,r)=>{const{timestampAtMenuOpen:i}=this.state;return n.jsx(Kt,{timestamp:i,timeZone:e,showTimeZone:t,showTSeparator:s,isGlobalOptions:o,legacyGlobalFormat:r})});handleFormatRuleChange(e,t,s){this.setState(o=>{const{formatSettings:r}=o;we(r);const i=[...r];let l={};t==="columnType"&&(l={format:this.makeDefaultFormatterItemByType(s)});const c={...i[e],...l,[t]:s};return i[e]=c,{formatSettings:i}},()=>{this.debouncedCommitChanges()})}handleFormatRuleCreate(){this.setState(e=>{const{formatSettings:t}=e,s={columnType:F.dataType.DATETIME,columnName:"",format:{},id:this.getAutoIncrementFormatRuleIndex(),isNewRule:!0};return{formatSettings:[...t,s],formatRulesChanged:!0}})}handleFormatRuleDelete(e){this.setState(t=>{const{formatSettings:s}=t;return{formatSettings:s.filter((r,i)=>i!==e),formatRulesChanged:!0}},()=>{this.debouncedCommitChanges()})}handleFormatRuleEntered(e){this.scrollToFormatBlockBottom(),De(e)}commitChanges(){const{formatSettings:e}=this.state,{dh:t}=this.props,s=e.filter(i=>Ia(t,i)).map(Oa)??[],{updateSettings:o}=this.props;o({formatter:s})}scrollToFormatBlockBottom(){const{scrollTo:e}=this.props;e(0,(this.addFormatRuleButtonRef.current?.offsetHeight??0)+(this.addFormatRuleButtonRef.current?.offsetTop??0))}getRuleError(e){const{dh:t}=this.props,s={hasColumnNameError:!1,hasFormatError:!1,message:""},o=[];return e.isNewRule!==void 0&&e.isNewRule||(this.isDuplicateRule(e)&&(s.hasColumnNameError=!0,o.push("Duplicate column name/type combo.")),$t(e.columnName)||(s.hasColumnNameError=!0,o.push("Column names must start with a letter or underscore and contain only alphanumeric characters or underscores.")),e.format.formatString!==void 0&&e.format.formatString.length===0?(s.hasFormatError=!0,o.push("Empty formatting rule.")):q(t,e.columnType,e.format)||(s.hasFormatError=!0,o.push("Invalid formatting rule.")),s.message=o.join(`
2
- `)),s}makeDefaultFormatterItemByType(e){switch(F.getNormalizedType(e)){case F.dataType.INT:{const{defaultIntegerFormatOptions:t}=this.props,{defaultFormatString:s}=t;return L.makeFormat("",s??L.DEFAULT_FORMAT_STRING,L.TYPE_GLOBAL,void 0)}case F.dataType.DECIMAL:{const{defaultDecimalFormatOptions:t}=this.props,{defaultFormatString:s}=t;return k.makeFormat("",s??k.DEFAULT_FORMAT_STRING,k.TYPE_GLOBAL,void 0)}default:return""}}renderFormatRule(e,t){const s=`input-${e}-columnName`,o=`input-${e}-columnType`,r=`input-${e}-format`,i=this.getCachedColumnTypeOptions(),l=h=>this.handleFormatRuleChange(e,"columnName",h.target.value),c=()=>this.handleFormatRuleChange(e,"isNewRule",!1),d=h=>this.handleFormatRuleChange(e,"columnType",h),u=this.getRuleError(t);return n.jsxs("fieldset",{className:"container-fluid format-rule-container",children:[n.jsxs("div",{className:"form-row",children:[n.jsxs("div",{className:"form-group col-7 mb-2",children:[n.jsx("label",{htmlFor:s,children:"Column Name"}),n.jsx("input",{id:s,className:D("form-control",{"is-invalid":u.hasColumnNameError}),"data-lpignore":!0,type:"text",value:t.columnName,onChange:l,onBlur:c})]}),n.jsxs("div",{className:"form-group col mb-2",children:[n.jsx(y,{kind:"ghost",className:"btn-delete-format-rule float-right",tabIndex:-1,onClick:()=>this.handleFormatRuleDelete(e),icon:Sn,tooltip:"Delete","aria-label":"Delete Format Rule"}),n.jsx("label",{htmlFor:o,children:"Column Type"}),n.jsx(ue,{id:o,className:"custom-select",value:t.columnType,onChange:d,children:i})]})]}),n.jsx("div",{className:"form-row",children:n.jsxs("div",{className:"form-group col-12 d-flex mb-2",children:[n.jsx("label",{className:"flex-shrink-0 col-form-label mr-3",htmlFor:r,children:"Formatting Rule"}),this.renderFormatRuleInput(e,t.columnType,r,t.format,u.hasFormatError)]})}),n.jsx("div",{className:"form-row",children:n.jsx("div",{className:"form-group col-12 d-flex mb-2",children:u.message&&n.jsx("p",{className:"text-danger",children:u.message})})})]},e)}renderFormatRuleInput(e,t,s,o,r){switch(F.getNormalizedType(t)){case F.dataType.DATETIME:return this.renderDateTimeFormatRuleInput(e,s,o,r);case F.dataType.DECIMAL:return this.renderDecimalFormatRuleInput(e,s,o,r);case F.dataType.INT:return this.renderIntegerFormatRuleInput(e,s,o,r);default:throw new Error(`Unrecognized column type: ${t}`)}}renderDateTimeFormatRuleInput(e,t,s,o){const{showTimeZone:r,showTSeparator:i,timeZone:l}=this.state,c=s.formatString??"";return n.jsxs(ue,{className:D("custom-select",{"is-invalid":o}),value:c,id:t,onChange:d=>{const u=W.makeFormat("",d,W.TYPE_GLOBAL);this.handleFormatRuleChange(e,"format",u)},children:[n.jsx("option",{value:"",disabled:!0,children:"Select format"},"default"),this.getCachedDateTimeFormatOptions(l,r,i)]})}renderIntegerFormatRuleInput(e,t,s,o){const{defaultIntegerFormatOptions:r}=this.props;we(r);const{defaultFormatString:i}=r,l=s.formatString??"";return n.jsx("input",{className:D("form-control","flex-grow-1",{"is-invalid":o}),"data-lpignore":!0,id:t,placeholder:i??L.DEFAULT_FORMAT_STRING,type:"text",value:l,onChange:c=>{const d=L.makeFormat("",c.target.value,L.TYPE_GLOBAL,void 0);this.handleFormatRuleChange(e,"format",d)}})}renderDecimalFormatRuleInput(e,t,s,o){const{defaultDecimalFormatOptions:r}=this.props,{defaultFormatString:i}=r,l=s.formatString??"";return n.jsx("input",{className:D("form-control","flex-grow-1",{"is-invalid":o}),"data-lpignore":!0,id:t,placeholder:i??k.DEFAULT_FORMAT_STRING,type:"text",value:l,onChange:c=>{const d=k.makeFormat("",c.target.value,k.TYPE_GLOBAL,void 0);this.handleFormatRuleChange(e,"format",d)}})}render(){const{formatRulesChanged:e,formatSettings:t}=this.state,s=t.map((r,i)=>n.jsx(vt,{classNames:"fade",timeout:le.transitionMs,onEnter:this.handleFormatRuleEntered,children:this.renderFormatRule(i,r)},r.id)),o=n.jsx(y,{kind:"ghost",className:"mb-3",onClick:this.handleFormatRuleCreate,ref:this.addFormatRuleButtonRef,icon:Tn,children:"Add New Rule"});return n.jsxs("div",{className:"app-settings-formatting-section",ref:this.containerRef,children:[n.jsx("div",{className:"app-settings-menu-description mb-3",children:"Customize the formatting of table columns by applying rules based on matching both a column name and column type."}),n.jsx(ss,{appear:e,enter:e,exit:e,children:s}),o]})}}const Ya=a=>({formatter:Ts(a),defaultDecimalFormatOptions:St(a),defaultIntegerFormatOptions:Tt(a),dh:Ct(a),showTimeZone:wt(a),showTSeparator:xt(a),timeZone:Dt(a)}),za=se(Ya,{updateSettings:Ee})(je);class I extends m.Component{static defaultProps={onDone:()=>{}};static FORMATTING_SECTION_KEY="SettingsMenu.formatting";static COLUMN_SPECIFIC_SECTION_KEY="SettingsMenu.columnFormatting";static APPLICATION_SECTION_KEY="ApplicationMenu.settings";static SHORTCUT_SECTION_KEY="SettingsMenu.shortcuts";static THEME_SECTION_KEY="SettingsMenu.theme";static focusFirstInputInContainer(e){const t=e?.querySelector("input, select, textarea");t&&t.focus()}constructor(e){super(e),this.handleClose=this.handleClose.bind(this),this.handleScrollTo=this.handleScrollTo.bind(this),this.handleSectionToggle=this.handleSectionToggle.bind(this),this.handleExportSupportLogs=this.handleExportSupportLogs.bind(this),this.handleLogout=this.handleLogout.bind(this),this.menuContentRef=X.createRef(),this.broadcastChannel=new BroadcastChannel(Gn),this.state={expandedSectionKey:I.FORMATTING_SECTION_KEY}}componentDidMount(){I.focusFirstInputInContainer(this.menuContentRef.current)}componentWillUnmount(){this.broadcastChannel.close()}menuContentRef;broadcastChannel;isSectionExpanded(e){const{expandedSectionKey:t}=this.state;return t===e}handleLogout(){this.broadcastChannel.postMessage(Vn(Hn))}handleScrollTo(e,t){this.menuContentRef.current?.scrollTo(e,t)}handleSectionToggle(e){this.setState(t=>({expandedSectionKey:t.expandedSectionKey===e?void 0:e}))}handleClose(){const{onDone:e}=this.props;e()}handleExportSupportLogs(){const{serverConfigValues:e}=this.props;Ha(void 0,Object.fromEntries(e))}render(){const e="https://github.com/deephaven/web-client-ui/",t="https://deephaven.io/core/docs/",{serverConfigValues:s,user:o}=this.props,r=_t(s),i=s.get("deephaven.version"),l=te.COPY_VERSION_INFO.getDisplayText(),c=(g,v)=>n.jsxs(m.Fragment,{children:[n.jsx("div",{children:g}),n.jsx("div",{children:v})]},g),d=o.displayName??o.name,u=o.image!=null&&o.image!=="",h=d!=="";return n.jsxs("div",{className:"app-settings-menu",children:[n.jsxs("header",{className:"app-settings-menu-header",children:[n.jsxs("div",{className:"user-info",children:[n.jsxs("div",{className:"user-image",children:[!u&&n.jsx(x,{icon:Cn,transform:"grow-8"}),u&&n.jsx("img",{src:o.image,alt:d})]}),n.jsxs("div",{className:"user-details",children:[h&&n.jsxs("div",{className:"user-name",children:[d,o.operateAs!=null&&o.name!==o.operateAs&&n.jsxs(n.Fragment,{children:[n.jsxs("span",{className:"font-weight-light font-italic",children:[" ","as"," "]}),n.jsxs("span",{className:"operating-as-user",children:[n.jsx(x,{icon:wn,className:"mr-1"}),o.operateAs]})]})]}),o.permissions.canLogout&&n.jsx("button",{type:"button",className:"btn btn-link",onClick:this.handleLogout,children:"logout"})]})]}),n.jsx(y,{kind:"ghost",className:"btn-close-settings-menu",onClick:this.handleClose,icon:n.jsx(x,{icon:xn,transform:"grow-4"}),tooltip:"Close"})]}),n.jsxs("div",{className:"app-settings-menu-content",ref:this.menuContentRef,children:[n.jsx("h5",{children:"Settings"}),n.jsx("hr",{className:"my-0"}),n.jsx(Y,{sectionKey:I.FORMATTING_SECTION_KEY,isExpanded:this.isSectionExpanded(I.FORMATTING_SECTION_KEY),title:n.jsxs(n.Fragment,{children:[n.jsx(x,{icon:Dn,transform:"grow-4",className:"mr-2"}),"Default Format & Time zone"]}),onToggle:this.handleSectionToggle,children:n.jsx(ka,{})}),n.jsx(Y,{sectionKey:I.COLUMN_SPECIFIC_SECTION_KEY,isExpanded:this.isSectionExpanded(I.COLUMN_SPECIFIC_SECTION_KEY),title:n.jsxs(n.Fragment,{children:[n.jsx(x,{icon:Fn,transform:"grow-4",className:"mr-2"}),"Format by Column Name & Type"]}),onToggle:this.handleSectionToggle,children:n.jsx(za,{scrollTo:this.handleScrollTo})}),n.jsx(Cs.Consumer,{children:g=>(we(g,"ThemeContext value is null"),g.themes.length>1?n.jsx(Y,{sectionKey:I.THEME_SECTION_KEY,isExpanded:this.isSectionExpanded(I.THEME_SECTION_KEY),onToggle:this.handleSectionToggle,title:n.jsxs(n.Fragment,{children:[n.jsx(x,{icon:En,transform:"grow-4",className:"mr-2"}),"Theme"]}),children:n.jsx(Zn,{})}):null)}),n.jsx(Y,{sectionKey:I.SHORTCUT_SECTION_KEY,isExpanded:this.isSectionExpanded(I.SHORTCUT_SECTION_KEY),title:n.jsxs(n.Fragment,{children:[n.jsx(x,{icon:Rn,transform:"grow-2"})," ","Keyboard Shortcuts"]}),onToggle:this.handleSectionToggle,children:n.jsx(Wa,{})}),n.jsxs("div",{className:"app-settings-footer",children:[n.jsxs("div",{className:"app-settings-footer-section",children:[n.jsxs("div",{className:"app-settings-footer-item",children:[n.jsx("div",{className:"font-weight-bold",children:"Support"}),n.jsxs("div",{children:["GitHub: ",n.jsx("a",{href:e,className:"custom-link",target:"_blank",rel:"noopener noreferrer",children:e})]}),n.jsx(y,{kind:"tertiary",className:"mt-2 py-2",onClick:this.handleExportSupportLogs,children:"Export Logs"})]}),n.jsxs("div",{className:"app-settings-footer-item",children:[n.jsx("div",{className:"font-weight-bold",children:"Documentation"}),n.jsx("a",{target:"_blank",rel:"noreferrer noopener",href:t,className:"custom-link",children:t})]}),n.jsxs("div",{className:"app-settings-footer-item",children:[n.jsx("div",{className:"font-weight-bold",children:"Version"}),n.jsxs("span",{className:"d-inline-block text-muted",children:[i," ",n.jsx(x,{icon:Nn}),n.jsxs(Ft,{interactive:!0,children:[n.jsx("div",{className:"detailed-server-config",children:Object.entries(r).map(([g,v])=>c(g,v))}),n.jsxs(ws,{kind:"inline",tooltip:"Copy version numbers",copy:Object.entries(r).map(([g,v])=>`${g}: ${v}`).join(`
3
- `),children:["Copy Versions",n.jsxs("small",{className:"text-muted",children:["(",l,")"]})]})]})]})]}),n.jsx("div",{className:"app-settings-footer-item",children:n.jsx(Aa,{})})]}),n.jsx("div",{className:"app-settings-footer-section",children:n.jsx("a",{target:"_blank",rel:"noreferrer noopener",href:"https://deephaven.io",style:{display:"block",width:"61.8%"},children:n.jsx(kt,{})})})]})]})]})}}const ht=10;function z(a){const{forwardedProps:{menuItem:{action:e,title:t,disabled:s},iconElement:o,displayShortcut:r,isMouseSelected:i,isKeyboardSelected:l,closeMenu:c}}=a,d=m.useRef(),u=m.useRef(),h=m.useRef(null),[g,v]=m.useState(!1),S=m.useCallback(T=>{d.current!=null&&u.current!=null&&h.current&&(Math.abs(d.current-T.clientX)>=ht||Math.abs(u.current-T.clientY)>=ht)&&(v(!0),window.removeEventListener("mousemove",S),c(),e(T),h.current=null)},[e,c]);function R(T){d.current=T.clientX,u.current=T.clientY,h.current=T.target,window.addEventListener("mousemove",S)}function N(T){h.current===T.target&&(v(!0),c(),e(),window.removeEventListener("mousemove",S)),h.current=null}return m.useEffect(function(){return function(){return window.removeEventListener("mousemove",S)}},[S]),n.jsxs("button",{type:"button",className:D("btn-context-menu",{disabled:s},{active:i&&!s},{"keyboard-active":l&&!s}),onMouseDown:R,onMouseUp:N,disabled:g,children:[n.jsx("span",{className:D("icon"),children:o}),n.jsx("span",{className:"title",children:t}),n.jsx("span",{className:"shortcut",children:r})]})}function Oe(a){const{handleControlSelect:e,handleToolSelect:t,onClearFilter:s}=a,o=m.useMemo(()=>[{title:"Input Filter",icon:jn,menuElement:n.jsx(z,{}),action:r=>{e(G.INPUT_FILTER,r)},order:10},{title:"Dropdown Filter",icon:On,menuElement:n.jsx(z,{}),action:r=>{e(G.DROPDOWN_FILTER,r)},order:15},{title:"Markdown Widget",icon:In,menuElement:n.jsx(z,{}),action:r=>{e(G.MARKDOWN,r)},order:20},{title:"Filter Sets",icon:Pn,menuElement:n.jsx(z,{}),action:r=>{e(G.FILTER_SET_MANAGER,r)},order:25},{disabled:!0,menuElement:n.jsx("div",{className:"context-menu-group-header",children:"Tools"}),order:30},{title:"Linker",icon:Ln,action:()=>{t(he.LINKER)},order:40,shortcut:te.LINKER},{disabled:!0,menuElement:n.jsx("div",{className:"context-menu-group-header",children:"Actions"}),order:50},{title:"Clear All Filters",icon:kn,action:()=>{s()},order:60,shortcut:Rt.TABLE.CLEAR_ALL_FILTERS}],[e,t,s]);return n.jsx(xs,{popperClassName:"controls-menu-popper",actions:o})}Oe.propTypes={handleControlSelect:f.func,handleToolSelect:f.func,onClearFilter:f.func};Oe.defaultProps={handleControlSelect:()=>{},handleToolSelect:()=>{},onClearFilter:()=>{}};z.propTypes={forwardedProps:f.shape({iconElement:f.node,displayShortcut:f.string,isMouseSelected:f.bool.isRequired,isKeyboardSelected:f.bool.isRequired,closeMenu:f.func.isRequired,menuItem:f.shape({action:f.func,title:f.string,disabled:f.bool}).isRequired})};z.defaultProps={forwardedProps:null};const Ja=Ds(Mt,null),Xa={layoutStorage:Ja},Qa=a=>a.layoutStorage,eo=a=>a.serverConfigValues;Object.entries(Xa).map(([a,e])=>Fs.register(a,e));const mt=10;function to(a){const{onExportLayout:e,onImportLayout:t,onResetLayout:s,onSelect:o,widgets:r=[]}=a,[i,l]=m.useState(!1),[c,d]=m.useState(""),u=m.useRef(null),h=m.useRef(),g=m.useCallback((p,b)=>{p!=null&&o(p,b)},[o]),v=m.useCallback(p=>{d(p.target.value)},[]),S=m.useCallback(p=>{h.current!=null&&(Math.abs(h.current.x-p.clientX)>=mt||Math.abs(h.current.y-p.clientY)>=mt)&&(l(!0),window.removeEventListener("mousemove",S),g(h.current.widget,p),h.current=void 0)},[h,g]),R=m.useCallback((p,b)=>{h.current={x:p.clientX,y:p.clientY,widget:b},window.addEventListener("mousemove",S)},[S]),N=m.useCallback((p,b)=>{window.removeEventListener("mousemove",S),h.current?.widget===b&&(l(!0),g(b)),h.current=void 0},[S,h,g]),T=m.useMemo(()=>r.filter(p=>c?p.name?.toLowerCase().includes(c.toLowerCase()):!0),[c,r]).sort((p,b)=>p.name?.localeCompare(b.name??"")??0),U=m.useMemo(()=>T.map(p=>n.jsx("li",{children:n.jsxs(y,{kind:"ghost","data-testid":`panel-list-item-${p.name??""}-button`,onMouseDown:b=>{R(b,p)},onMouseUp:b=>{N(b,p)},onKeyDown:b=>{(b.key==="Enter"||b.key===" ")&&g(p)},disabled:i,onClick:()=>{},children:[n.jsx(Es,{type:p.type})," ",p.name??""]})},p.name)),[T,i,R,N,g]),C=m.useMemo(()=>U.length===0?n.jsx("span",{children:"No bound variables found."}):null,[U]);return n.jsxs("div",{className:"widget-list-container d-flex flex-column",children:[n.jsx("div",{className:"widget-list-header",children:n.jsx(Rs,{value:c,placeholder:"Find Table, Plot or Widget",onChange:v,ref:u})}),n.jsxs("ul",{className:"widget-list flex-grow-1",children:[C&&n.jsx("li",{className:"widget-list-message",children:C}),!C&&U]}),n.jsx("div",{children:n.jsx("hr",{})}),n.jsxs("div",{className:"widget-list-footer",children:[n.jsxs(y,{kind:"ghost",onClick:e,children:[n.jsxs("div",{className:"fa-md fa-layers",children:[n.jsx(x,{mask:ze,icon:Je,transform:"right-5 down-5"}),n.jsx(x,{icon:Je,transform:"right-8 down-6"})]}),"Export Layout"]}),n.jsxs(y,{kind:"ghost",onClick:t,children:[n.jsxs("div",{className:"fa-md fa-layers",children:[n.jsx(x,{mask:ze,icon:Xe,transform:"right-5 down-5"}),n.jsx(x,{icon:Xe,transform:"right-8 down-6"})]}),"Import Layout"]}),n.jsx(y,{kind:"ghost",icon:Z,onClick:s,tooltip:"Reset Layout"})]})]})}function so(a){return a.version===2}function no(a){return Array.isArray(a)}const ie=A.module("UserLayoutUtils"),ao={layoutConfig:[{type:"column",content:[{type:"row",height:40,content:[{type:"stack",content:[{type:"react-component",component:Be.COMPONENT,title:Be.TITLE,isClosable:!1},{type:"react-component",component:Ge.COMPONENT,title:Ge.TITLE,isClosable:!1}]},{type:"stack",width:25,content:[{type:"react-component",component:Ve.COMPONENT,title:Ve.TITLE,isClosable:!1},{type:"react-component",component:He.COMPONENT,title:He.TITLE,isClosable:!1}]}]},{type:"row",content:[{type:"stack",title:"Notebooks",content:[]}]}]}],links:[],filterSets:[],version:2},oo={layoutConfig:[],links:[],filterSets:[],version:2};function Bt(a){if(so(a))return a;if(no(a))return{layoutConfig:a,links:[],filterSets:[],version:2};throw new Error(`Unexpected layout import format: ${a}`)}async function ro(a,e=!0){try{const t=await a.getLayouts();if(t.length>0)try{const s=await a.getLayout(t[0]);return Bt(s)}catch(s){ie.error("Unable to load layout",t[0],":",s),ie.warn("No valid layouts found, falling back to default layout")}}catch(t){ie.error("Unable to fetch layout list",t),ie.warn("Falling back to default layout")}return e?ao:oo}function io(a){const{filterSets:e,layoutConfig:t,links:s}=a;return{filterSets:e,layoutConfig:t,links:s,version:2}}const ce={exportLayout:io,getDefaultLayout:ro,normalizeLayout:Bt};function lo({onAutoFillClick:a=()=>{}}){return n.jsxs("div",{className:"empty-dashboard-container",children:[n.jsxs("div",{className:"hint-container",children:[n.jsx(x,{icon:An})," ",n.jsx("br",{}),"Use the panel list to add objects from a query."]}),n.jsxs("div",{className:"empty-dashboard",children:[n.jsx("div",{className:"add-panels-hint",children:"Drag Panels Here"}),n.jsx(y,{kind:"tertiary",onClick:a,children:"Auto fill objects"})]})]})}function co({dashboards:a,activeDashboard:e,onGoldenLayoutChange:t,plugins:s,onAutoFillClick:o}){const r=Nt(),i=m.useCallback((l,c)=>{const{metadata:d}=l;if(d?.type!=null&&(d?.id!=null||d?.name!=null)){const u=d.id!=null?{type:d.type,id:d.id}:{type:d.type,name:d.name,title:d.name};return{fetch:async()=>r?.getObject(u),...l,localDashboardId:c}}return jt.hydrate(l,c)},[r]);return n.jsx("div",{className:"tab-content",children:a.map(l=>n.jsx("div",{className:D("tab-pane",{active:l.id===e}),children:n.jsx(qn,{id:l.id,isActive:l.id===e,emptyDashboard:l.id===E?n.jsx(lo,{onAutoFillClick:o}):n.jsx(Lt,{}),layoutConfig:l.layoutConfig,onGoldenLayoutChange:t,hydrate:i,plugins:s})},l.id))})}const w=A.module("AppMainContainer");class J extends m.Component{static handleWindowBeforeUnload(e){e.preventDefault(),e.returnValue=""}static hydrateConsole(e,t){return jt.hydrate({...e,unzip:s=>bt.loadAsync(s).then(o=>Object.values(o.files))},t)}static handleRefresh(){w.info("Refreshing application"),window.location.reload()}constructor(e){super(e),_s(this),this.importElement=X.createRef();const{allDashboardData:t}=this.props;this.state={contextActions:[{action:()=>{const{serverConfigValues:s}=this.props,o=_t(s),r=Object.entries(o).map(([i,l])=>`${i}: ${l}`).join(`
4
- `);Us(r)},shortcut:te.COPY_VERSION_INFO,isGlobal:!0},{action:()=>{this.handleToolSelect(he.LINKER)},shortcut:te.LINKER,isGlobal:!0},{action:()=>{this.sendClearFilter()},shortcut:Rt.TABLE.CLEAR_ALL_FILTERS,isGlobal:!0},{action:()=>{w.debug("Consume unhandled save shortcut")},shortcut:te.SAVE,isGlobal:!0}],isAuthFailed:!1,isDisconnected:!1,isPanelsMenuShown:!1,isResetLayoutPromptShown:!1,isSettingsMenuShown:!1,unsavedNotebookCount:0,widgets:[],tabs:Object.entries(t).filter(([s])=>s!==E).map(([s,o])=>({key:s,title:o.title??"Untitled"})),activeTabKey:E}}componentDidMount(){this.initWidgets(),this.startListeningForDisconnect(),window.addEventListener("beforeunload",J.handleWindowBeforeUnload)}componentDidUpdate(e,t){const{dashboardData:s}=this.props;e.dashboardData!==s&&this.handleDataChange(s)}componentWillUnmount(){this.deinitWidgets(),this.stopListeningForDisconnect(),window.removeEventListener("beforeunload",J.handleWindowBeforeUnload)}goldenLayout;importElement;widgetListenerRemover;initWidgets(){const{connection:e}=this.props;if(e!=null){if(e.subscribeToFieldUpdates==null){w.warn("subscribeToFieldUpdates not supported, not initializing widgets");return}this.widgetListenerRemover=e.subscribeToFieldUpdates(t=>{w.debug("Got updates",t),this.setState(({widgets:s})=>{const{updated:o,created:r,removed:i}=t,l=[...o,...i],c=s.filter(u=>!l.some(h=>h.name===u.name));return[...o,...r].forEach(u=>{u.name!=null&&u.name!==""&&c.push(u)}),{widgets:c}})})}}deinitWidgets(){this.widgetListenerRemover?.()}openNotebookFromURL(){const{match:e}=this.props,{notebookPath:t}=e.params;if(t){const{session:s,sessionConfig:o}=this.props;if(s==null||o==null){w.error("No session available to open notebook URL",t);return}const r={id:`/${t}`,itemName:`/${t}`},i=o.type,l={value:null,language:i};this.emitLayoutEvent($s.SELECT_NOTEBOOK,s,i,l,r,!0)}}sendClearFilter(){this.emitLayoutEvent(oe.CLEAR_ALL_FILTERS)}emitLayoutEvent(e,...t){this.goldenLayout?.eventHub.emit(e,...t)}handleCancelResetLayoutPrompt(){this.setState({isResetLayoutPromptShown:!1})}handleConfirmResetLayoutPrompt(){this.setState({isResetLayoutPromptShown:!1}),this.resetLayout()}handleError(e){K.isCanceled(e)||w.error(e)}handleSettingsMenuHide(){this.setState({isSettingsMenuShown:!1})}handleSettingsMenuShow(){this.setState({isSettingsMenuShown:!0})}handleControlSelect(e,t){switch(w.debug("handleControlSelect",e),e){case G.DROPDOWN_FILTER:this.emitLayoutEvent(oe.OPEN_DROPDOWN,{title:"DropdownFilter",type:e,createNewStack:!0,dragEvent:t});break;case G.INPUT_FILTER:this.emitLayoutEvent(oe.OPEN_INPUT,{title:"InputFilter",type:e,createNewStack:!0,dragEvent:t});break;case G.MARKDOWN:this.emitLayoutEvent(Ks.OPEN,{title:"Markdown",type:e,dragEvent:t});break;case G.FILTER_SET_MANAGER:this.emitLayoutEvent(oe.OPEN_FILTER_SET_MANAGER,{title:"FilterSets",type:e,dragEvent:t});break;default:throw new Error(`Unrecognized control type ${e}`)}}handleToolSelect(e){w.debug("handleToolSelect",e);const{activeTool:t,setActiveTool:s}=this.props;s(t===e?he.DEFAULT:e)}handleClearFilter(){this.sendClearFilter()}handleDataChange(e){const{updateWorkspaceData:t}=this.props,{closed:s,filterSets:o,links:r}=e;t({closed:s,filterSets:o,links:r})}handleGoldenLayoutChange(e){this.goldenLayout=e,Yn(this.goldenLayout.eventHub,this.handleCreateDashboard)}handleCreateDashboard({pluginId:e,title:t,data:s}){const o=as(),{setDashboardPluginData:r}=this.props;r(o,e,s),this.setState(({tabs:i})=>({tabs:[...i,{key:o,title:t}],activeTabKey:o}))}handleWidgetMenuClick(){this.setState(({isPanelsMenuShown:e})=>({isPanelsMenuShown:!e}))}handleWidgetSelect(e,t){this.setState({isPanelsMenuShown:!1}),w.debug("handleWidgetSelect",e,t),this.openWidget(e,t)}handleWidgetsMenuClose(){this.setState({isPanelsMenuShown:!1})}handleAutoFillClick(){const{widgets:e}=this.state;w.debug("handleAutoFillClick",e);const t=e.sort((s,o)=>s.title!=null&&o.title!=null?s.title.localeCompare(o.title):0);for(let s=0;s<t.length;s+=1)this.openWidget(t[s])}handleExportLayoutClick(){w.info("handleExportLayoutClick"),this.setState({isPanelsMenuShown:!1});try{const{workspace:e}=this.props,{data:t}=e,s=ce.exportLayout(t);w.info("handleExportLayoutClick exportedConfig",s);const o=new Blob([JSON.stringify(s)],{type:"application/json"}),r=B.i18n.DateTimeFormat.format("yyyy-MM-dd-HHmmss",new Date),i=document.createElement("a");i.href=URL.createObjectURL(o),i.download=`deephaven-app-layout-${r}.json`,i.click()}catch(e){w.error("Unable to export layout",e)}}handleImportLayoutClick(){w.info("handleImportLayoutClick"),this.setState({isPanelsMenuShown:!1}),this.importElement.current!=null&&(this.importElement.current.value="",this.importElement.current.click())}handleResetLayoutClick(){w.info("handleResetLayoutClick"),this.setState({isPanelsMenuShown:!1,isResetLayoutPromptShown:!0,unsavedNotebookCount:Ws.unsavedNotebookCount()})}handleImportLayoutFiles(e){e.stopPropagation(),e.preventDefault(),e.target.files!=null&&this.importLayoutFile(e.target.files?.[0])}handleDisconnect(){w.info("Disconnected from server"),this.setState({isDisconnected:!0})}handleReconnect(){w.info("Reconnected to server"),this.setState({isDisconnected:!1})}handleReconnectAuthFailed(){w.warn("Reconnect authentication failed"),this.setState({isAuthFailed:!0})}async importLayoutFile(e){try{const{updateDashboardData:t,updateWorkspaceData:s}=this.props,o=await e.text(),r=JSON.parse(o),{filterSets:i,layoutConfig:l,links:c}=ce.normalizeLayout(r);s({layoutConfig:l}),t(E,{filterSets:i,links:c})}catch(t){w.error("Unable to import layout",t)}}async resetLayout(){const{layoutStorage:e,session:t}=this.props,{filterSets:s,layoutConfig:o,links:r}=await ce.getDefaultLayout(e,t!==void 0),{updateDashboardData:i,updateWorkspaceData:l}=this.props;l({layoutConfig:o}),i(E,{filterSets:s,links:r})}handlePaste(e){if(e.target instanceof HTMLElement&&e.target.closest(".monaco-editor"))return;const{clipboardData:t}=e,s=t.getData("Text"),o=/“|”/g;o.test(s)&&(e.preventDefault(),e.stopPropagation(),document.execCommand("insertText",!1,s.replace(o,'"')))}startListeningForDisconnect(){const{connection:e}=this.props;e!=null&&(e.addEventListener(B.IdeConnection.EVENT_DISCONNECT,this.handleDisconnect),e.addEventListener(B.IdeConnection.EVENT_RECONNECT,this.handleReconnect),e.addEventListener(B.CoreClient.EVENT_RECONNECT_AUTH_FAILED,this.handleReconnectAuthFailed))}stopListeningForDisconnect(){const{connection:e}=this.props;e!=null&&(e.removeEventListener(B.IdeConnection.EVENT_DISCONNECT,this.handleDisconnect),e.removeEventListener(B.IdeConnection.EVENT_RECONNECT,this.handleReconnect),e.removeEventListener(B.CoreClient.EVENT_RECONNECT_AUTH_FAILED,this.handleReconnectAuthFailed))}openWidget(e,t){const{connection:s}=this.props;this.emitLayoutEvent(Bs.OPEN,{dragEvent:t,fetch:async()=>s?.getObject(e),widget:e})}getDashboardPlugins=os(e=>[...e.entries()].filter(([,s])=>qs(s)||Ye(s)).map(([s,o])=>{if(Ye(o)){const{DashboardPlugin:i}=o;return n.jsx(i,{},s)}const{component:r}=o;return n.jsx(r,{},s)}));handleHomeClick(){this.handleTabSelect(E)}handleTabSelect(e){this.setState({activeTabKey:e})}handleTabReorder(e,t){this.setState(({tabs:s})=>{const o=[...s],[r]=o.splice(e,1);return o.splice(t,0,r),{tabs:o}})}handleTabClose(e){this.setState(({tabs:t,activeTabKey:s})=>{const o=t.filter(i=>i.key!==e);let r=s;if(s===e&&o.length>0){const i=t.findIndex(l=>l.key===e);r=i<t.length-1?t[i+1].key:t[i-1].key}return o.length===0&&(r=E),{tabs:o,activeTabKey:r}})}getDashboards(){const{tabs:e}=this.state,{allDashboardData:t,workspace:s}=this.props,{data:o}=s,{layoutConfig:r}=o;return[{id:E,layoutConfig:r},...e.map(i=>({id:i.key,layoutConfig:t[i.key]?.layoutConfig??Gs}))]}render(){const{activeTool:e,plugins:t,user:s,serverConfigValues:o}=this.props,{permissions:r}=s,{canUsePanels:i}=r,{contextActions:l,isAuthFailed:c,isDisconnected:d,isPanelsMenuShown:u,isResetLayoutPromptShown:h,isSettingsMenuShown:g,unsavedNotebookCount:v,widgets:S,tabs:R,activeTabKey:N}=this.state,T=this.getDashboardPlugins(t);return n.jsxs("div",{className:D("app-main-tabs","w-100","h-100","d-flex","flex-column",e?`active-tool-${e.toLowerCase()}`:""),onPaste:this.handlePaste,tabIndex:-1,children:[n.jsxs("div",{className:"app-main-top-nav-menus",children:[n.jsx(kt,{className:"ml-1",style:{maxHeight:"20px"}}),R.length>0&&n.jsxs("div",{style:{flexShrink:0,flexGrow:1,display:"flex"},children:[n.jsx(y,{kind:"ghost",icon:Mn,tooltip:"Go to Code Studio",onClick:this.handleHomeClick}),n.jsx(zn,{tabs:R,activeKey:N,onSelect:this.handleTabSelect,onReorder:this.handleTabReorder,onClose:this.handleTabClose})]}),n.jsxs("div",{className:"app-main-right-menu-buttons",children:[n.jsxs(y,{kind:"ghost",className:"btn-panels-menu",icon:_n,onClick:()=>{},children:["Controls",n.jsx(Oe,{handleControlSelect:this.handleControlSelect,handleToolSelect:this.handleToolSelect,onClearFilter:this.handleClearFilter})]}),i&&n.jsxs(y,{kind:"ghost",className:"btn-panels-menu btn-show-panels","data-testid":"app-main-panels-button",onClick:this.handleWidgetMenuClick,icon:Un,children:["Panels",n.jsx(Vs,{isShown:u,className:"panels-menu-popper",onExited:this.handleWidgetsMenuClose,options:{placement:"bottom"},closeOnBlur:!0,interactive:!0,children:n.jsx(to,{widgets:S,onExportLayout:this.handleExportLayoutClick,onImportLayout:this.handleImportLayoutClick,onResetLayout:this.handleResetLayoutClick,onSelect:this.handleWidgetSelect})})]}),n.jsx(y,{kind:"ghost",className:D("btn-settings-menu",{"text-warning":s.operateAs!=null&&s.operateAs!==s.name}),onClick:this.handleSettingsMenuShow,icon:n.jsxs("span",{className:"fa-layers",children:[n.jsx(x,{icon:$n,transform:"grow-3"}),d&&!c&&n.jsxs(n.Fragment,{children:[n.jsx(x,{icon:Kn,color:le.background,transform:"grow-2 right-8 down-8.5 rotate-45"}),n.jsx(x,{icon:Qe,color:le.danger,transform:"shrink-5 right-6 down-6"})]})]}),tooltip:d&&!c?"Server disconnected":"User Settings"})]})]}),n.jsx(co,{dashboards:this.getDashboards(),activeDashboard:N,onGoldenLayoutChange:this.handleGoldenLayoutChange,onAutoFillClick:this.handleAutoFillClick,plugins:[n.jsx(Hs,{hydrateConsole:J.hydrateConsole,notebooksUrl:new URL("notebooks/",document.baseURI).href},"ConsolePlugin"),...T]}),n.jsx(vt,{in:g,timeout:le.transitionMidMs,classNames:"slide-left",mountOnEnter:!0,unmountOnExit:!0,children:n.jsx(I,{serverConfigValues:o,onDone:this.handleSettingsMenuHide,user:s})}),n.jsx(Zs,{actions:l}),n.jsx("input",{ref:this.importElement,type:"file",accept:".json",style:{display:"none"},onChange:this.handleImportLayoutFiles}),n.jsx(Jn,{isOpen:d&&!c,debounceMs:1e3,children:n.jsx(Xn,{icon:Qe,title:n.jsxs(n.Fragment,{children:[n.jsx(Wn,{})," Attempting to reconnect..."]}),subtitle:"Please check your network connection."})}),n.jsx(qe,{confirmButtonText:"Reset",onConfirm:this.handleConfirmResetLayoutPrompt,onCancel:this.handleCancelResetLayoutPrompt,isConfirmDanger:!0,isOpen:h,headerText:v===0?"Reset Layout":"Reset layout and discard unsaved changes",bodyText:v===0?"Do you want to reset your layout? Your existing layout will be lost.":"Do you want to reset your layout? Any unsaved notebooks will be lost."}),n.jsx(qe,{confirmButtonText:"Refresh",onConfirm:J.handleRefresh,isOpen:c,headerText:"Authentication failed",bodyText:"Credentials are invalid. Please refresh your browser to try and reconnect."})]})}}const uo=a=>({activeTool:Is(a),allDashboardData:Ps(a),dashboardData:Ls(a,E),layoutStorage:Qa(a),plugins:ks(a),connection:As(a,E),session:Ze(a,E)?.session,sessionConfig:Ze(a,E)?.config,user:Ms(a),workspace:Pt(a),serverConfigValues:eo(a)}),ho=se(uo,{setActiveTool:Ot,setDashboardData:It,setDashboardPluginData:Ns,updateDashboardData:js,updateWorkspaceData:Os})(ns(J));function mo(){return n.jsxs("div",{className:"app",children:[n.jsx(ho,{}),n.jsx(Ys,{})]})}const po=A.module("LocalWorkspaceStorage");class P{static STORAGE_KEY="deephaven.WorkspaceStorage";static getBooleanServerConfig(e,t){if(e?.get(t)?.toLowerCase()==="true")return!0;if(e?.get(t)?.toLowerCase()==="false")return!1}static makeDefaultWorkspaceSettings(e){const t={defaultDateTimeFormat:W.DEFAULT_DATETIME_FORMAT_STRING,formatter:[],timeZone:W.DEFAULT_TIME_ZONE_ID,showTimeZone:!1,showTSeparator:!0,disableMoveConfirmation:!1,defaultDecimalFormatOptions:{defaultFormatString:k.DEFAULT_FORMAT_STRING},defaultIntegerFormatOptions:{defaultFormatString:L.DEFAULT_FORMAT_STRING},truncateNumbersWithPound:!1,defaultNotebookSettings:{isMinimapEnabled:!1}},s={defaultDateTimeFormat:e?.get("dateTimeFormat"),formatter:[],timeZone:e?.get("timeZone"),showTimeZone:P.getBooleanServerConfig(e,"showTimeZone"),showTSeparator:P.getBooleanServerConfig(e,"showTSeparator"),disableMoveConfirmation:P.getBooleanServerConfig(e,"disableMoveConfirmation"),defaultDecimalFormatOptions:e?.get("decimalFormat")!==void 0?{defaultFormatString:e?.get("decimalFormat")}:void 0,defaultIntegerFormatOptions:e?.get("integerFormat")!==void 0?{defaultFormatString:e?.get("integerFormat")}:void 0,truncateNumbersWithPound:P.getBooleanServerConfig(e,"truncateNumbersWithPound"),defaultNotebookSettings:e?.get("isMinimapEnabled")!==void 0?{isMinimapEnabled:P.getBooleanServerConfig(e,"isMinimapEnabled")}:void 0},o=Object.keys(s);for(let r=0;r<o.length;r+=1){const i=o[r];s[i]!==void 0&&(t[i]=s[i])}return t}static async makeWorkspaceData(e,t){const{filterSets:s,links:o,layoutConfig:r}=await ce.getDefaultLayout(e,t?.isConsoleAvailable);return{settings:{},layoutConfig:r,closed:[{}],links:o,filterSets:s}}static async makeDefaultWorkspace(e,t){return{data:await P.makeWorkspaceData(e,t)}}layoutStorage;constructor(e){this.layoutStorage=e}async load(e){try{return JSON.parse(localStorage.getItem(P.STORAGE_KEY)??"")}catch{return po.info("Unable to load workspace data, initializing to default data"),P.makeDefaultWorkspace(this.layoutStorage,e)}}async save(e){return localStorage.setItem(P.STORAGE_KEY,JSON.stringify(e)),e}}class fo{storageService;root;constructor(e,t=""){this.storageService=e,this.root=t}async getLayouts(){return(await this.storageService.listItems(this.root,"*.json")).map(t=>t.basename)}async getLayout(e){const s=await(await this.storageService.loadFile(`${this.root}/${e}`)).text();return JSON.parse(s)}}const ee=A.module("GrpcFileStorageTable");class me{static REFRESH_DEBOUNCE=50;storageService;baseRoot;root;currentSize=0;currentViewport;listeners=[];viewportUpdatePromise;currentViewportData;childTables=new Map;constructor(e,t="",s=t){this.storageService=e,this.baseRoot=t,this.root=s,s===t&&(this.doRefresh=Fe(this.doRefresh.bind(this),me.REFRESH_DEBOUNCE))}removeBaseRoot(e){return H.removeRoot(this.baseRoot,e)}getViewportData(){return this.viewportUpdatePromise||this.refreshInternal(),this.viewportUpdatePromise??Promise.resolve({items:[],offset:0})}getSnapshot(e){throw new Error("Method not implemented.")}get size(){return this.currentSize}setExpanded(e,t){const s=e.split("/");let o=s.shift();if((o===void 0||o==="")&&(o=s.shift()),o===void 0||o==="")throw new Error(`Invalid path: ${e}`);const r=s.join("/");if(t){if(!this.childTables.has(o)){const i=new me(this.storageService,this.baseRoot,`${this.root}/${o}`);this.childTables.set(o,i)}r&&this.childTables.get(o)?.setExpanded(r,t)}else this.childTables.has(o)&&(r?this.childTables.get(o)?.setExpanded(r,t):this.childTables.delete(o));this.currentViewport&&this.refreshInternal()}collapseAll(){this.childTables.clear(),this.currentViewport&&this.refreshInternal()}setSearch(e){throw new Error("Method not implemented.")}setViewport(e){this.currentViewport=e,this.refreshInternal()}setFilters(){throw new Error("Method not implemented.")}setSorts(){throw new Error("Method not implemented.")}setReversed(){throw new Error("Method not implemented.")}close(){this.listeners=[]}onUpdate(e){return this.listeners=[...this.listeners,e],()=>{this.listeners=this.listeners.filter(t=>t!==e)}}doRefresh(e){ee.debug2("doRefresh",this.root),e(this.fetchData())}refresh(){ee.debug2("refresh",this.root),this.viewportUpdatePromise?.cancel();const e=new Promise(s=>{this.doRefresh(s)}),t=K.makeCancelable(e.then(s=>{if(this.viewportUpdatePromise!==t)throw new zs;return this.currentViewportData=s,this.sendUpdate(),s}));t.catch(s=>{K.isCanceled(s)||ee.error("Error updating viewport",s)}),this.viewportUpdatePromise=t}refreshInternal(){try{this.refresh()}catch(e){K.isCanceled(e)||ee.error("Unable to refresh data",e)}}async fetchData(){const{currentViewport:e}=this;if(!e)throw new Error("No viewport set");let s=(await this.storageService.listItems(this.root)).map(o=>({type:o.type,filename:this.removeBaseRoot(o.filename),basename:o.basename,id:this.removeBaseRoot(o.filename),isExpanded:o.type==="directory"?this.childTables.has(o.basename):void 0})).sort((o,r)=>o.type!==r.type?o.type==="directory"?-1:1:o.basename.localeCompare(r.basename));for(let o=0;o<s.length;o+=1){const r=s[o],{basename:i,filename:l}=r;if(l===this.removeBaseRoot(`${this.root}/${i}`)&&r.type==="directory"){const c=this.childTables.get(i);if(c!=null){c.setViewport({top:0,bottom:e.bottom-o});const d=await c.getViewportData();s.splice(o+1,0,...d.items)}}}return this.currentSize=s.length,ee.debug2(this.root,"items",s,e),s=s.slice(e.top,e.bottom),{items:s,offset:e.top}}sendUpdate(){const{listeners:e}=this,t=this.currentViewportData??{items:[],offset:0};for(let s=0;s<e.length;s+=1)e[s](t)}}const go=A.module("GrpcFileStorage");class Ie{static REFRESH_THROTTLE=150;storageService;tables=[];root;constructor(e,t=""){this.storageService=e,this.root=t}removeRoot(e){return H.removeRoot(this.root,e)}addRoot(e){return H.addRoot(this.root,e)}async createDirectory(e){return await this.storageService.createDirectory(this.addRoot(e)),this.refreshTables(),{type:"directory",id:e,filename:e,basename:H.getBaseName(e)}}async getTable(){const e=new me(this.storageService,this.root);return this.tables.push(e),e}async saveFile(e){const t=dh.storage.FileContents.text(e.content);return await this.storageService.saveFile(this.addRoot(e.filename),t,!0),this.refreshTables(),e}async loadFile(e){const s=await(await this.storageService.loadFile(this.addRoot(e))).text();return{filename:e,basename:H.getBaseName(e),content:s}}async copyFile(e,t){const s=await this.storageService.loadFile(this.addRoot(e));await this.storageService.saveFile(this.addRoot(t),s,!1),this.refreshTables()}async deleteFile(e){await this.storageService.deleteItem(this.addRoot(e)),this.refreshTables()}async moveFile(e,t){await this.storageService.moveItem(this.addRoot(e),this.addRoot(t)),this.refreshTables()}async info(e){const t=await this.storageService.listItems(this.addRoot(H.getPath(e)),H.getBaseName(e));if(t.length===0)throw new Js;if(t.length>1)throw go.error("More than one matching file found, should never happen.",t),new Error("More than one matching file found");const s=t[0];return{filename:this.removeRoot(s.filename),basename:s.basename,id:this.removeRoot(s.filename),type:s.type}}refreshTables=rs(()=>{this.tables.forEach(e=>e.refresh())},Ie.REFRESH_THROTTLE)}const bo=A.module("AppInit");function Pe(a){const{workspace:e,setActiveTool:t,setApi:s,setCommandHistoryStorage:o,setDashboardData:r,setFileStorage:i,setLayoutStorage:l,setDashboardConnection:c,setDashboardSessionWrapper:d,setPlugins:u,setUser:h,setWorkspace:g,setWorkspaceStorage:v,setDefaultWorkspaceSettings:S,setServerConfigValues:R}=a,N=yt(),T=Qn(),U=Nt(),C=dn(),p=ea(),b=ta(),[ne,Gt]=m.useState();m.useEffect(function(){u(C)},[C,u]),m.useEffect(function(){async function Ht(){try{const ae=await sa(),pe=await na(N,U,ae),Me=T.getStorageService(),_e=new fo(Me,"/layouts"),Zt=new Ie(Me,"/notebooks"),Ue=new P(_e),qt=new xa,$e=await Ue.load({isConsoleAvailable:pe!==void 0}),{data:fe}=$e,{settings:Yt}=fe,{shortcutOverrides:Ke={}}=Yt,zt=_.isMacPlatform?Ke.mac??{}:Ke.windows??{};Object.entries(zt).forEach(([Xt,Qt])=>{Re.get(Xt)?.setKeyState(Qt)});const Jt={filterSets:fe.filterSets,links:fe.links};s(N),t(he.DEFAULT),R(p),o(qt),r(E,Jt),i(Zt),l(_e),c(E,U),pe!==void 0&&d(E,pe),h(b),v(Ue),g($e),S(P.makeDefaultWorkspaceSettings(p))}catch(ae){bo.error(ae),Gt(ae)}}Ht()},[N,T,U,p,t,s,o,r,i,l,c,d,h,g,S,v,R,b]);const Le=e==null&&ne==null,ke=!Le&&ne==null,Ae=ne!=null?`${ne}`:null;return n.jsxs(n.Fragment,{children:[ke&&n.jsx(mo,{}),n.jsx(Lt,{isLoading:Le&&Ae==null,isLoaded:ke,errorMessage:Ae})]})}Pe.propTypes={workspace:f.shape({}),workspaceStorage:f.shape({close:f.func}),setActiveTool:f.func.isRequired,setApi:f.func.isRequired,setCommandHistoryStorage:f.func.isRequired,setDashboardData:f.func.isRequired,setFileStorage:f.func.isRequired,setLayoutStorage:f.func.isRequired,setDashboardConnection:f.func.isRequired,setDashboardSessionWrapper:f.func.isRequired,setPlugins:f.func.isRequired,setUser:f.func.isRequired,setWorkspace:f.func.isRequired,setWorkspaceStorage:f.func.isRequired};Pe.defaultProps={workspace:null,workspaceStorage:null};const vo=a=>({workspace:Pt(a),workspaceStorage:un(a)}),pt=se(vo,{setActiveTool:Ot,setApi:Xs,setCommandHistoryStorage:Qs,setDashboardData:It,setFileStorage:en,setLayoutStorage:Da,setDashboardConnection:tn,setDashboardSessionWrapper:sn,setPlugins:nn,setUser:an,setWorkspace:on,setDefaultWorkspaceSettings:rn,setWorkspaceStorage:ln,setServerConfigValues:cn})(Pe),yo=X.lazy(()=>us(()=>import("./StyleGuideRoot-ec2ecd3d.js"),["./StyleGuideRoot-ec2ecd3d.js","./vendor-b0c4c01d.js","./helpers-de833af9.js","./vendor-fac43f8b.css","./index-d7bc9619.js","./monaco-b5248072.js","./monaco-f18fde03.css","./index-cf89eb70.css","./IrisGrid-b1db485c.js","./ControlType-9fd03f7c.js","./plotly-45c1cad8.js","./ControlType-d2ec5183.css","./IrisGrid-b466789d.css","./FontBootstrap-08ab4efe.js","./FontBootstrap-9931ce6f.css","./useUser-456d27e9.js","./useUser-f5dd1451.css","./StyleGuideRoot-8162322a.css"],import.meta.url)),So=new URL(document.baseURI).pathname.replace(/\/$/,"");function To(){return n.jsx(is,{basename:So,children:n.jsxs(ls,{children:[n.jsx(ge,{exact:!0,path:"/",component:pt}),n.jsx(ge,{path:"/notebooks/:notebookPath+",component:pt}),n.jsx(ge,{path:"/styleguide",component:yo}),n.jsx(cs,{from:"*",to:"/"})]})})}function ft(){return hn.register(new URL("./download/serviceWorker.js",window.location.href)),mn.init({getWorker:()=>new hs}),window["__react-beautiful-dnd-disable-dev-warnings"]=!0,n.jsx(ds,{store:Et,children:n.jsx(To,{})})}const Ro=Object.freeze(Object.defineProperty({__proto__:null,AppRoot:ft,default:ft},Symbol.toStringTag,{value:"Module"}));export{Ro as A,P as L};
5
- //# sourceMappingURL=AppRoot-12ae9481.js.map