@deephaven/dashboard 1.7.2-beta.1 → 1.7.2-react-18-alpha.3

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 (65) hide show
  1. package/dist/BasePanel.js +14 -17
  2. package/dist/BasePanel.js.map +1 -1
  3. package/dist/Dashboard.js +2 -3
  4. package/dist/Dashboard.js.map +1 -1
  5. package/dist/DashboardConstants.js.map +1 -1
  6. package/dist/DashboardEvents.js.map +1 -1
  7. package/dist/DashboardLayout.d.ts +4 -30
  8. package/dist/DashboardLayout.d.ts.map +1 -1
  9. package/dist/DashboardLayout.js +4 -17
  10. package/dist/DashboardLayout.js.map +1 -1
  11. package/dist/DashboardPanelWrapper.js +1 -2
  12. package/dist/DashboardPanelWrapper.js.map +1 -1
  13. package/dist/DashboardPlugin.d.ts +13 -4
  14. package/dist/DashboardPlugin.d.ts.map +1 -1
  15. package/dist/DashboardPlugin.js +12 -0
  16. package/dist/DashboardPlugin.js.map +1 -1
  17. package/dist/DashboardUtils.d.ts +2 -2
  18. package/dist/DashboardUtils.d.ts.map +1 -1
  19. package/dist/DashboardUtils.js +1 -2
  20. package/dist/DashboardUtils.js.map +1 -1
  21. package/dist/LazyDashboard.js.map +1 -1
  22. package/dist/NavigationEvent.js.map +1 -1
  23. package/dist/PanelContextMenu.d.ts +3 -3
  24. package/dist/PanelContextMenu.d.ts.map +1 -1
  25. package/dist/PanelContextMenu.js +12 -14
  26. package/dist/PanelContextMenu.js.map +1 -1
  27. package/dist/PanelErrorBoundary.js.map +1 -1
  28. package/dist/PanelEvent.js.map +1 -1
  29. package/dist/PanelManager.d.ts +3 -3
  30. package/dist/PanelManager.d.ts.map +1 -1
  31. package/dist/PanelManager.js +10 -11
  32. package/dist/PanelManager.js.map +1 -1
  33. package/dist/PanelPlaceholder.d.ts +1 -4
  34. package/dist/PanelPlaceholder.d.ts.map +1 -1
  35. package/dist/PanelPlaceholder.js +1 -2
  36. package/dist/PanelPlaceholder.js.map +1 -1
  37. package/dist/RenameDialog.js +3 -4
  38. package/dist/RenameDialog.js.map +1 -1
  39. package/dist/TabEvent.js.map +1 -1
  40. package/dist/declaration.d.js.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/layout/GLPropTypes.js.map +1 -1
  43. package/dist/layout/LayoutManagerContext.js.map +1 -1
  44. package/dist/layout/LayoutUtils.d.ts +3 -3
  45. package/dist/layout/LayoutUtils.d.ts.map +1 -1
  46. package/dist/layout/LayoutUtils.js +5 -6
  47. package/dist/layout/LayoutUtils.js.map +1 -1
  48. package/dist/layout/index.js.map +1 -1
  49. package/dist/layout/useDashboardPanel.js.map +1 -1
  50. package/dist/layout/useLayoutManager.js.map +1 -1
  51. package/dist/layout/useListener.js.map +1 -1
  52. package/dist/layout/usePanelRegistration.js.map +1 -1
  53. package/dist/redux/actionTypes.js.map +1 -1
  54. package/dist/redux/actions.js.map +1 -1
  55. package/dist/redux/hooks.js.map +1 -1
  56. package/dist/redux/index.js.map +1 -1
  57. package/dist/redux/reducers/dashboardData.js.map +1 -1
  58. package/dist/redux/reducers/index.js.map +1 -1
  59. package/dist/redux/selectors.js.map +1 -1
  60. package/dist/useDashboardId.js.map +1 -1
  61. package/dist/useDhId.js.map +1 -1
  62. package/dist/useFiber.js +1 -1
  63. package/dist/useFiber.js.map +1 -1
  64. package/dist/usePanelId.js.map +1 -1
  65. package/package.json +10 -10
@@ -29,15 +29,24 @@ export type PanelFunctionComponentType<P, R> = ForwardRefComponentType<P, R> & P
29
29
  export type WrappedComponentType<P extends PanelProps, C extends ComponentType<P>> = ConnectedComponent<C, P>;
30
30
  export type PanelComponentType<P extends PanelProps = PanelProps, C extends ComponentType<P> = ComponentType<P>> = (ComponentType<P> | WrappedComponentType<P, C>) & PanelStaticMetaData;
31
31
  export type PanelMetadata = WidgetDescriptor;
32
- export type PanelProps = GLPanelProps & {
32
+ /**
33
+ * Props with metadata, panelState, GoldenLayout props, but not dashboardId
34
+ */
35
+ export type PanelProps = GLPanelProps & DehydratedPanelProps;
36
+ export type DehydratedPanelProps = {
33
37
  metadata?: PanelMetadata;
34
38
  panelState?: unknown;
35
39
  };
36
- export type DehydratedPanelProps = Omit<PanelProps, keyof GLPanelProps>;
37
40
  export type LocalDashboardProps = {
38
41
  localDashboardId: string;
39
42
  };
43
+ /**
44
+ * Props with metadata, panelState, dashboardId, and GoldenLayout props
45
+ */
40
46
  export type DashboardPanelProps = PanelProps & LocalDashboardProps;
47
+ /**
48
+ * Props with metadata, panelState, and dashboardId, but not GoldenLayout props
49
+ */
41
50
  export type DehydratedDashboardPanelProps = DehydratedPanelProps & LocalDashboardProps;
42
51
  export type PanelComponent<T extends PanelProps = PanelProps> = Component<T> | {
43
52
  props: T;
@@ -61,8 +70,8 @@ export interface DashboardPanelDefinition {
61
70
  definition: ComponentType;
62
71
  }
63
72
  export type DeregisterComponentFunction = () => void;
64
- export type PanelHydrateFunction<T extends DehydratedDashboardPanelProps = DehydratedDashboardPanelProps, R extends T = T> = (props: T, dashboardId: string) => R;
65
- export type PanelDehydrateFunction = (config: PanelConfig, dashboardId: string) => PanelConfig | null;
73
+ export type PanelHydrateFunction = (props: DehydratedPanelProps, dashboardId: string) => DehydratedDashboardPanelProps;
74
+ export type PanelDehydrateFunction = (config: PanelConfig, dashboardId: string) => DehydratedPanelConfig;
66
75
  export type DashboardPluginComponentProps = {
67
76
  id: string;
68
77
  layout: GoldenLayout;
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardPlugin.d.ts","sourceRoot":"","sources":["../src/DashboardPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,yBAAyB,EACzB,eAAe,EACf,aAAa,EACd,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,yBAAyB,CAC5D,eAAe,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1E,mBAAmB,CAAC;AAEtB,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,IACxB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7B,MAAM,MAAM,kBAAkB,CAC5B,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,IAC3C,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,YAAY,CAAC,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,oBAAoB,GAC9D,mBAAmB,CAAC;AAEtB,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IACxD,SAAS,CAAC,CAAC,CAAC,GACZ;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG;IAChD,cAAc,EAAE,IAAI,CAAC;IACrB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,iBAAiB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,aAAa,CAAC;CAC3B;AAED,MAAM,MAAM,2BAA2B,GAAG,MAAM,IAAI,CAAC;AAErD,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,6BAA6B,GAAG,6BAA6B,EACvE,CAAC,SAAS,CAAC,GAAG,CAAC,IACb,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC,CAAC;AAEzC,MAAM,MAAM,sBAAsB,GAAG,CACnC,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,KAChB,WAAW,GAAG,IAAI,CAAC;AAExB,MAAM,MAAM,6BAA6B,GAAG;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,CACjB,CAAC,SAAS,mBAAmB,EAC7B,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,EAE1B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,EACvC,OAAO,CAAC,EAAE,oBAAoB,EAC9B,SAAS,CAAC,EAAE,sBAAsB,KAC/B,2BAA2B,CAAC;CAClC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,CAAC,6BAA6B,CAAC,GAC5C,KAAK,IAAI,6BAA6B,CAOxC;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,CAAC,6BAA6B,CAAC,GAC5C,OAAO,CAAC,KAAK,IAAI,6BAA6B,CAMhD"}
1
+ {"version":3,"file":"DashboardPlugin.d.ts","sourceRoot":"","sources":["../src/DashboardPlugin.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,18 @@ export { isWrappedComponent } from '@deephaven/components';
15
15
  * @deprecated Use `PanelComponentType` instead and add generic types to forwardRef call.
16
16
  */
17
17
 
18
+ /**
19
+ * Props with metadata, panelState, GoldenLayout props, but not dashboardId
20
+ */
21
+
22
+ /**
23
+ * Props with metadata, panelState, dashboardId, and GoldenLayout props
24
+ */
25
+
26
+ /**
27
+ * Props with metadata, panelState, and dashboardId, but not GoldenLayout props
28
+ */
29
+
18
30
  /**
19
31
  * Takes a partial DashboardPluginComponentProps and verifies all the dashboard component fields are filled in.
20
32
  * @param props The props to check
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardPlugin.js","names":["GoldenLayout","PanelManager","isWrappedComponent","isDashboardPluginProps","props","id","layout","panelManager","registerComponent","assertIsDashboardPluginProps","Error","concat"],"sources":["../src/DashboardPlugin.ts"],"sourcesContent":["import type {\n Component,\n ComponentType,\n ForwardRefExoticComponent,\n PropsWithoutRef,\n RefAttributes,\n} from 'react';\nimport { type ConnectedComponent } from 'react-redux';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport type {\n GLPanelProps,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport PanelManager from './PanelManager';\nimport { type WidgetDescriptor } from './PanelEvent';\n\nexport { isWrappedComponent } from '@deephaven/components';\n\n/**\n * Panel components can provide static props that provide meta data about the\n * panel.\n */\nexport interface PanelStaticMetaData {\n /**\n * Should be set to the same name as the component type.\n * @deprecated Use `displayName` instead.\n */\n COMPONENT?: string;\n\n /** Title of the panel. */\n TITLE?: string;\n}\n\n/**\n * Alias for the return type of React.forwardRef()\n */\ntype ForwardRefComponentType<P, R> = ForwardRefExoticComponent<\n PropsWithoutRef<P> & RefAttributes<R>\n>;\n\n/**\n * @deprecated Use `PanelComponentType` instead and add generic types to forwardRef call.\n */\nexport type PanelFunctionComponentType<P, R> = ForwardRefComponentType<P, R> &\n PanelStaticMetaData;\n\nexport type WrappedComponentType<\n P extends PanelProps,\n C extends ComponentType<P>,\n> = ConnectedComponent<C, P>;\n\nexport type PanelComponentType<\n P extends PanelProps = PanelProps,\n C extends ComponentType<P> = ComponentType<P>,\n> = (ComponentType<P> | WrappedComponentType<P, C>) & PanelStaticMetaData;\n\nexport type PanelMetadata = WidgetDescriptor;\n\nexport type PanelProps = GLPanelProps & {\n metadata?: PanelMetadata;\n panelState?: unknown;\n};\n\nexport type DehydratedPanelProps = Omit<PanelProps, keyof GLPanelProps>;\n\nexport type LocalDashboardProps = { localDashboardId: string };\n\nexport type DashboardPanelProps = PanelProps & LocalDashboardProps;\n\nexport type DehydratedDashboardPanelProps = DehydratedPanelProps &\n LocalDashboardProps;\n\nexport type PanelComponent<T extends PanelProps = PanelProps> =\n | Component<T>\n | { props: T; state: unknown };\n\nexport type PanelConfig = ReactComponentConfig & {\n componentState?: Record<string, unknown> | null;\n};\n\nexport type DehydratedPanelConfig = PanelConfig & {\n componentState: null;\n props: DehydratedPanelProps;\n type: 'react-component';\n};\n\nexport type DashboardConfig = {\n id: string;\n layout: GoldenLayout;\n panelManager: PanelManager;\n};\n\nexport interface DashboardPanelDefinition {\n name: string;\n definition: ComponentType;\n}\n\nexport type DeregisterComponentFunction = () => void;\n\nexport type PanelHydrateFunction<\n T extends DehydratedDashboardPanelProps = DehydratedDashboardPanelProps,\n R extends T = T,\n> = (props: T, dashboardId: string) => R;\n\nexport type PanelDehydrateFunction = (\n config: PanelConfig,\n dashboardId: string\n) => PanelConfig | null;\n\nexport type DashboardPluginComponentProps = {\n id: string;\n layout: GoldenLayout;\n panelManager: PanelManager;\n registerComponent: <\n P extends DashboardPanelProps,\n C extends ComponentType<P>,\n >(\n name: string,\n ComponentType: PanelComponentType<P, C>,\n hydrate?: PanelHydrateFunction,\n dehydrate?: PanelDehydrateFunction\n ) => DeregisterComponentFunction;\n};\n\n/**\n * Takes a partial DashboardPluginComponentProps and verifies all the dashboard component fields are filled in.\n * @param props The props to check\n * @returns True if the props are valid DashboardPluginComponentProps, false otherwise\n */\nexport function isDashboardPluginProps(\n props: Partial<DashboardPluginComponentProps>\n): props is DashboardPluginComponentProps {\n return (\n typeof props.id === 'string' &&\n props.layout instanceof GoldenLayout &&\n props.panelManager instanceof PanelManager &&\n typeof props.registerComponent === 'function'\n );\n}\n\nexport function assertIsDashboardPluginProps(\n props: Partial<DashboardPluginComponentProps>\n): asserts props is DashboardPluginComponentProps {\n if (!isDashboardPluginProps(props)) {\n throw new Error(\n `Expected dashboard plugin props, but instead received ${props}`\n );\n }\n}\n"],"mappings":"AAQA,OAAOA,YAAY,MAAM,0BAA0B;AAAC,OAK7CC,YAAY;AAGnB,SAASC,kBAAkB,QAAQ,uBAAuB;;AAE1D;AACA;AACA;AACA;;AAYA;AACA;AACA;;AAKA;AACA;AACA;;AAkFA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,KAA6C,EACL;EACxC,OACE,OAAOA,KAAK,CAACC,EAAE,KAAK,QAAQ,IAC5BD,KAAK,CAACE,MAAM,YAAYN,YAAY,IACpCI,KAAK,CAACG,YAAY,YAAYN,YAAY,IAC1C,OAAOG,KAAK,CAACI,iBAAiB,KAAK,UAAU;AAEjD;AAEA,OAAO,SAASC,4BAA4BA,CAC1CL,KAA6C,EACG;EAChD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC,EAAE;IAClC,MAAM,IAAIM,KAAK,0DAAAC,MAAA,CAC4CP,KAAK,CAChE,CAAC;EACH;AACF"}
1
+ {"version":3,"file":"DashboardPlugin.js","names":["GoldenLayout","PanelManager","isWrappedComponent","isDashboardPluginProps","props","id","layout","panelManager","registerComponent","assertIsDashboardPluginProps","Error","concat"],"sources":["../src/DashboardPlugin.ts"],"sourcesContent":["import type {\n Component,\n ComponentType,\n ForwardRefExoticComponent,\n PropsWithoutRef,\n RefAttributes,\n} from 'react';\nimport { type ConnectedComponent } from 'react-redux';\nimport GoldenLayout from '@deephaven/golden-layout';\nimport type {\n GLPanelProps,\n ReactComponentConfig,\n} from '@deephaven/golden-layout';\nimport PanelManager from './PanelManager';\nimport { type WidgetDescriptor } from './PanelEvent';\n\nexport { isWrappedComponent } from '@deephaven/components';\n\n/**\n * Panel components can provide static props that provide meta data about the\n * panel.\n */\nexport interface PanelStaticMetaData {\n /**\n * Should be set to the same name as the component type.\n * @deprecated Use `displayName` instead.\n */\n COMPONENT?: string;\n\n /** Title of the panel. */\n TITLE?: string;\n}\n\n/**\n * Alias for the return type of React.forwardRef()\n */\ntype ForwardRefComponentType<P, R> = ForwardRefExoticComponent<\n PropsWithoutRef<P> & RefAttributes<R>\n>;\n\n/**\n * @deprecated Use `PanelComponentType` instead and add generic types to forwardRef call.\n */\nexport type PanelFunctionComponentType<P, R> = ForwardRefComponentType<P, R> &\n PanelStaticMetaData;\n\nexport type WrappedComponentType<\n P extends PanelProps,\n C extends ComponentType<P>,\n> = ConnectedComponent<C, P>;\n\nexport type PanelComponentType<\n P extends PanelProps = PanelProps,\n C extends ComponentType<P> = ComponentType<P>,\n> = (ComponentType<P> | WrappedComponentType<P, C>) & PanelStaticMetaData;\n\nexport type PanelMetadata = WidgetDescriptor;\n\n/**\n * Props with metadata, panelState, GoldenLayout props, but not dashboardId\n */\nexport type PanelProps = GLPanelProps & DehydratedPanelProps;\n\nexport type DehydratedPanelProps = {\n metadata?: PanelMetadata;\n panelState?: unknown;\n};\n\nexport type LocalDashboardProps = { localDashboardId: string };\n\n/**\n * Props with metadata, panelState, dashboardId, and GoldenLayout props\n */\nexport type DashboardPanelProps = PanelProps & LocalDashboardProps;\n\n/**\n * Props with metadata, panelState, and dashboardId, but not GoldenLayout props\n */\nexport type DehydratedDashboardPanelProps = DehydratedPanelProps &\n LocalDashboardProps;\n\nexport type PanelComponent<T extends PanelProps = PanelProps> =\n | Component<T>\n | { props: T; state: unknown };\n\nexport type PanelConfig = ReactComponentConfig & {\n componentState?: Record<string, unknown> | null;\n};\n\nexport type DehydratedPanelConfig = PanelConfig & {\n componentState: null;\n props: DehydratedPanelProps;\n type: 'react-component';\n};\n\nexport type DashboardConfig = {\n id: string;\n layout: GoldenLayout;\n panelManager: PanelManager;\n};\n\nexport interface DashboardPanelDefinition {\n name: string;\n definition: ComponentType;\n}\n\nexport type DeregisterComponentFunction = () => void;\n\nexport type PanelHydrateFunction = (\n props: DehydratedPanelProps,\n dashboardId: string\n) => DehydratedDashboardPanelProps;\n\nexport type PanelDehydrateFunction = (\n config: PanelConfig,\n dashboardId: string\n) => DehydratedPanelConfig;\n\nexport type DashboardPluginComponentProps = {\n id: string;\n layout: GoldenLayout;\n panelManager: PanelManager;\n registerComponent: <\n P extends DashboardPanelProps,\n C extends ComponentType<P>,\n >(\n name: string,\n ComponentType: PanelComponentType<P, C>,\n hydrate?: PanelHydrateFunction,\n dehydrate?: PanelDehydrateFunction\n ) => DeregisterComponentFunction;\n};\n\n/**\n * Takes a partial DashboardPluginComponentProps and verifies all the dashboard component fields are filled in.\n * @param props The props to check\n * @returns True if the props are valid DashboardPluginComponentProps, false otherwise\n */\nexport function isDashboardPluginProps(\n props: Partial<DashboardPluginComponentProps>\n): props is DashboardPluginComponentProps {\n return (\n typeof props.id === 'string' &&\n props.layout instanceof GoldenLayout &&\n props.panelManager instanceof PanelManager &&\n typeof props.registerComponent === 'function'\n );\n}\n\nexport function assertIsDashboardPluginProps(\n props: Partial<DashboardPluginComponentProps>\n): asserts props is DashboardPluginComponentProps {\n if (!isDashboardPluginProps(props)) {\n throw new Error(\n `Expected dashboard plugin props, but instead received ${props}`\n );\n }\n}\n"],"mappings":"AAQA,OAAOA,YAAY,MAAM,0BAA0B;AAAC,OAK7CC,YAAY;AAGnB,SAASC,kBAAkB,QAAQ,uBAAuB;;AAE1D;AACA;AACA;AACA;;AAYA;AACA;AACA;;AAKA;AACA;AACA;;AAgBA;AACA;AACA;;AAUA;AACA;AACA;;AAGA;AACA;AACA;;AAwDA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CACpCC,KAA6C,EACL;EACxC,OACE,OAAOA,KAAK,CAACC,EAAE,KAAK,QAAQ,IAC5BD,KAAK,CAACE,MAAM,YAAYN,YAAY,IACpCI,KAAK,CAACG,YAAY,YAAYN,YAAY,IAC1C,OAAOG,KAAK,CAACI,iBAAiB,KAAK,UAAU;AAEjD;AAEA,OAAO,SAASC,4BAA4BA,CAC1CL,KAA6C,EACG;EAChD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC,EAAE;IAClC,MAAM,IAAIM,KAAK,0DAAAC,MAAA,CAC4CP,KAAK,CAChE,CAAC;EACH;AACF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { type DehydratedDashboardPanelProps, type DehydratedPanelConfig, type PanelConfig } from './DashboardPlugin';
1
+ import { type DehydratedPanelConfig, type PanelConfig, type DehydratedPanelProps, type LocalDashboardProps } from './DashboardPlugin';
2
2
  export { canHaveRef } from '@deephaven/components';
3
3
  /**
4
4
  * Dehydrate an existing panel to allow it to be serialized/saved.
@@ -15,7 +15,7 @@ export declare function dehydrate(config: PanelConfig): DehydratedPanelConfig;
15
15
  * @param localDashboardId The local dashboard ID to hydrate the panel with
16
16
  * @returns The hydrated panel props
17
17
  */
18
- export declare function hydrate<T extends DehydratedDashboardPanelProps>(props: T, localDashboardId?: string): T;
18
+ export declare function hydrate<P extends DehydratedPanelProps>(props: P, localDashboardId: string): P & LocalDashboardProps;
19
19
  declare const _default: {
20
20
  dehydrate: typeof dehydrate;
21
21
  hydrate: typeof hydrate;
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardUtils.d.ts","sourceRoot":"","sources":["../src/DashboardUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAqBpE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,6BAA6B,EAC7D,KAAK,EAAE,CAAC,EACR,gBAAgB,SAAK,GACpB,CAAC,CAKH;;;;;AAED,wBAGE"}
1
+ {"version":3,"file":"DashboardUtils.d.ts","sourceRoot":"","sources":["../src/DashboardUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAqBpE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,oBAAoB,EACpD,KAAK,EAAE,CAAC,EACR,gBAAgB,EAAE,MAAM,GACvB,CAAC,GAAG,mBAAmB,CAKzB;;;;;AAED,wBAGE"}
@@ -49,8 +49,7 @@ export function dehydrate(config) {
49
49
  * @param localDashboardId The local dashboard ID to hydrate the panel with
50
50
  * @returns The hydrated panel props
51
51
  */
52
- export function hydrate(props) {
53
- var localDashboardId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
52
+ export function hydrate(props, localDashboardId) {
54
53
  return _objectSpread(_objectSpread({}, props), {}, {
55
54
  localDashboardId
56
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardUtils.js","names":["canHaveRef","dehydrate","config","props","componentState","metadata","panelState","newProps","_objectSpread","type","hydrate","localDashboardId","arguments","length","undefined"],"sources":["../src/DashboardUtils.tsx"],"sourcesContent":["import {\n type DehydratedDashboardPanelProps,\n type DehydratedPanelConfig,\n type PanelConfig,\n} from './DashboardPlugin';\n\nexport { canHaveRef } from '@deephaven/components';\n\n/**\n * Dehydrate an existing panel to allow it to be serialized/saved.\n * Just takes what's in the panels `metadata` in the props and `panelState` in\n * the component state, assumes it's serializable, and saves it.\n * @param config The panel config to dehydrate\n * @returns The dehydrated PanelConfig\n */\nexport function dehydrate(config: PanelConfig): DehydratedPanelConfig {\n const { props, componentState } = config;\n const { metadata } = props;\n let { panelState = null } = props;\n if (componentState) {\n ({ panelState } = componentState);\n }\n const newProps: Record<string, unknown> = {};\n if (metadata != null) {\n newProps.metadata = metadata;\n }\n if (panelState != null) {\n newProps.panelState = panelState;\n }\n\n return {\n ...config,\n componentState: null,\n props: newProps,\n type: 'react-component',\n };\n}\n\n/**\n * Default hydration function. Just applies the dashboard ID. When used with dehydrate above,\n * the panels state will be stored in `panelState` prop.\n * @param props Panel props to hydrate\n * @param localDashboardId The local dashboard ID to hydrate the panel with\n * @returns The hydrated panel props\n */\nexport function hydrate<T extends DehydratedDashboardPanelProps>(\n props: T,\n localDashboardId = ''\n): T {\n return {\n ...props,\n localDashboardId,\n };\n}\n\nexport default {\n dehydrate,\n hydrate,\n};\n"],"mappings":";;;;;AAMA,SAASA,UAAU,QAAQ,uBAAuB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,MAAmB,EAAyB;EACpE,IAAM;IAAEC,KAAK;IAAEC;EAAe,CAAC,GAAGF,MAAM;EACxC,IAAM;IAAEG;EAAS,CAAC,GAAGF,KAAK;EAC1B,IAAI;IAAEG,UAAU,GAAG;EAAK,CAAC,GAAGH,KAAK;EACjC,IAAIC,cAAc,EAAE;IAClB,CAAC;MAAEE;IAAW,CAAC,GAAGF,cAAc;EAClC;EACA,IAAMG,QAAiC,GAAG,CAAC,CAAC;EAC5C,IAAIF,QAAQ,IAAI,IAAI,EAAE;IACpBE,QAAQ,CAACF,QAAQ,GAAGA,QAAQ;EAC9B;EACA,IAAIC,UAAU,IAAI,IAAI,EAAE;IACtBC,QAAQ,CAACD,UAAU,GAAGA,UAAU;EAClC;EAEA,OAAAE,aAAA,CAAAA,aAAA,KACKN,MAAM;IACTE,cAAc,EAAE,IAAI;IACpBD,KAAK,EAAEI,QAAQ;IACfE,IAAI,EAAE;EAAiB;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CACrBP,KAAQ,EAEL;EAAA,IADHQ,gBAAgB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAErB,OAAAJ,aAAA,CAAAA,aAAA,KACKL,KAAK;IACRQ;EAAgB;AAEpB;AAEA,eAAe;EACbV,SAAS;EACTS;AACF,CAAC"}
1
+ {"version":3,"file":"DashboardUtils.js","names":["canHaveRef","dehydrate","config","props","componentState","metadata","panelState","newProps","_objectSpread","type","hydrate","localDashboardId"],"sources":["../src/DashboardUtils.tsx"],"sourcesContent":["import {\n type DehydratedPanelConfig,\n type PanelConfig,\n type DehydratedPanelProps,\n type LocalDashboardProps,\n} from './DashboardPlugin';\n\nexport { canHaveRef } from '@deephaven/components';\n\n/**\n * Dehydrate an existing panel to allow it to be serialized/saved.\n * Just takes what's in the panels `metadata` in the props and `panelState` in\n * the component state, assumes it's serializable, and saves it.\n * @param config The panel config to dehydrate\n * @returns The dehydrated PanelConfig\n */\nexport function dehydrate(config: PanelConfig): DehydratedPanelConfig {\n const { props, componentState } = config;\n const { metadata } = props;\n let { panelState = null } = props;\n if (componentState) {\n ({ panelState } = componentState);\n }\n const newProps: Record<string, unknown> = {};\n if (metadata != null) {\n newProps.metadata = metadata;\n }\n if (panelState != null) {\n newProps.panelState = panelState;\n }\n\n return {\n ...config,\n componentState: null,\n props: newProps,\n type: 'react-component',\n };\n}\n\n/**\n * Default hydration function. Just applies the dashboard ID. When used with dehydrate above,\n * the panels state will be stored in `panelState` prop.\n * @param props Panel props to hydrate\n * @param localDashboardId The local dashboard ID to hydrate the panel with\n * @returns The hydrated panel props\n */\nexport function hydrate<P extends DehydratedPanelProps>(\n props: P,\n localDashboardId: string\n): P & LocalDashboardProps {\n return {\n ...props,\n localDashboardId,\n };\n}\n\nexport default {\n dehydrate,\n hydrate,\n};\n"],"mappings":";;;;;AAOA,SAASA,UAAU,QAAQ,uBAAuB;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,MAAmB,EAAyB;EACpE,IAAM;IAAEC,KAAK;IAAEC;EAAe,CAAC,GAAGF,MAAM;EACxC,IAAM;IAAEG;EAAS,CAAC,GAAGF,KAAK;EAC1B,IAAI;IAAEG,UAAU,GAAG;EAAK,CAAC,GAAGH,KAAK;EACjC,IAAIC,cAAc,EAAE;IAClB,CAAC;MAAEE;IAAW,CAAC,GAAGF,cAAc;EAClC;EACA,IAAMG,QAAiC,GAAG,CAAC,CAAC;EAC5C,IAAIF,QAAQ,IAAI,IAAI,EAAE;IACpBE,QAAQ,CAACF,QAAQ,GAAGA,QAAQ;EAC9B;EACA,IAAIC,UAAU,IAAI,IAAI,EAAE;IACtBC,QAAQ,CAACD,UAAU,GAAGA,UAAU;EAClC;EAEA,OAAAE,aAAA,CAAAA,aAAA,KACKN,MAAM;IACTE,cAAc,EAAE,IAAI;IACpBD,KAAK,EAAEI,QAAQ;IACfE,IAAI,EAAE;EAAiB;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAOA,CACrBP,KAAQ,EACRQ,gBAAwB,EACC;EACzB,OAAAH,aAAA,CAAAA,aAAA,KACKL,KAAK;IACRQ;EAAgB;AAEpB;AAEA,eAAe;EACbV,SAAS;EACTS;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"LazyDashboard.js","names":["React","useCallback","useState","useDispatch","LoadingOverlay","updateWorkspaceData","Dashboard","updateDashboardData","DEFAULT_DASHBOARD_ID","jsx","_jsx","LazyDashboard","_ref","id","isActive","plugins","rest","_objectWithoutProperties","_excluded","isLoaded","setIsLoaded","dispatch","handleLayoutConfigChange","config","layoutConfig","_objectSpread","onLayoutConfigChange","children"],"sources":["../src/LazyDashboard.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { updateWorkspaceData } from '@deephaven/redux';\nimport { Dashboard, type DashboardProps } from './Dashboard';\nimport { updateDashboardData } from './redux';\nimport { type DashboardLayoutConfig } from './DashboardLayout';\nimport { DEFAULT_DASHBOARD_ID } from './DashboardConstants';\n\nexport interface LazyDashboardProps extends DashboardProps {\n id: string;\n isActive: boolean;\n plugins: JSX.Element[];\n}\n\nexport function LazyDashboard({\n id,\n isActive,\n plugins,\n ...rest\n}: LazyDashboardProps): JSX.Element {\n const [isLoaded, setIsLoaded] = useState(isActive);\n const dispatch = useDispatch();\n\n const handleLayoutConfigChange = useCallback(\n (config?: DashboardLayoutConfig) => {\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({ layoutConfig: config }));\n } else {\n dispatch(updateDashboardData(id, { layoutConfig: config }));\n }\n },\n [id, dispatch]\n );\n\n if (!isLoaded && isActive) {\n setIsLoaded(true);\n }\n\n if (!isLoaded) {\n return <LoadingOverlay data-testid=\"lazy-dashboard-loading\" />;\n }\n\n return (\n <Dashboard\n id={id}\n onLayoutConfigChange={handleLayoutConfigChange}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n >\n {plugins}\n </Dashboard>\n );\n}\n\nexport default LazyDashboard;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,mBAAmB,QAAQ,kBAAkB;AAAC,SAC9CC,SAAS;AAAA,SACTC,mBAAmB;AAAA,SAEnBC,oBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQ7B,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAKO;EAAA,IALN;MAC5BC,EAAE;MACFC,QAAQ;MACRC;IAEkB,CAAC,GAAAH,IAAA;IADhBI,IAAI,GAAAC,wBAAA,CAAAL,IAAA,EAAAM,SAAA;EAEP,IAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGlB,QAAQ,CAACY,QAAQ,CAAC;EAClD,IAAMO,QAAQ,GAAGlB,WAAW,CAAC,CAAC;EAE9B,IAAMmB,wBAAwB,GAAGrB,WAAW,CACzCsB,MAA8B,IAAK;IAClC;IACA;IACA;IACA;IACA,IAAIV,EAAE,KAAKL,oBAAoB,EAAE;MAC/Ba,QAAQ,CAAChB,mBAAmB,CAAC;QAAEmB,YAAY,EAAED;MAAO,CAAC,CAAC,CAAC;IACzD,CAAC,MAAM;MACLF,QAAQ,CAACd,mBAAmB,CAACM,EAAE,EAAE;QAAEW,YAAY,EAAED;MAAO,CAAC,CAAC,CAAC;IAC7D;EACF,CAAC,EACD,CAACV,EAAE,EAAEQ,QAAQ,CACf,CAAC;EAED,IAAI,CAACF,QAAQ,IAAIL,QAAQ,EAAE;IACzBM,WAAW,CAAC,IAAI,CAAC;EACnB;EAEA,IAAI,CAACD,QAAQ,EAAE;IACb,oBAAOT,IAAA,CAACN,cAAc;MAAC,eAAY;IAAwB,CAAE,CAAC;EAChE;EAEA,oBACEM,IAAA,CAACJ,SAAS,EAAAmB,aAAA,CAAAA,aAAA;IACRZ,EAAE,EAAEA,EAAG;IACPa,oBAAoB,EAAEJ;IACtB;EAAA,GACIN,IAAI;IAAAW,QAAA,EAEPZ;EAAO,EACC,CAAC;AAEhB;AAEA,eAAeJ,aAAa"}
1
+ {"version":3,"file":"LazyDashboard.js","names":["React","useCallback","useState","useDispatch","LoadingOverlay","updateWorkspaceData","Dashboard","updateDashboardData","DEFAULT_DASHBOARD_ID","jsx","_jsx","LazyDashboard","_ref","id","isActive","plugins","rest","_objectWithoutProperties","_excluded","isLoaded","setIsLoaded","dispatch","handleLayoutConfigChange","config","layoutConfig","_objectSpread","onLayoutConfigChange","children"],"sources":["../src/LazyDashboard.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { updateWorkspaceData } from '@deephaven/redux';\nimport { Dashboard, type DashboardProps } from './Dashboard';\nimport { updateDashboardData } from './redux';\nimport { type DashboardLayoutConfig } from './DashboardLayout';\nimport { DEFAULT_DASHBOARD_ID } from './DashboardConstants';\n\nexport interface LazyDashboardProps extends DashboardProps {\n id: string;\n isActive: boolean;\n plugins: JSX.Element[];\n}\n\nexport function LazyDashboard({\n id,\n isActive,\n plugins,\n ...rest\n}: LazyDashboardProps): JSX.Element {\n const [isLoaded, setIsLoaded] = useState(isActive);\n const dispatch = useDispatch();\n\n const handleLayoutConfigChange = useCallback(\n (config?: DashboardLayoutConfig) => {\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({ layoutConfig: config }));\n } else {\n dispatch(updateDashboardData(id, { layoutConfig: config }));\n }\n },\n [id, dispatch]\n );\n\n if (!isLoaded && isActive) {\n setIsLoaded(true);\n }\n\n if (!isLoaded) {\n return <LoadingOverlay data-testid=\"lazy-dashboard-loading\" />;\n }\n\n return (\n <Dashboard\n id={id}\n onLayoutConfigChange={handleLayoutConfigChange}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n >\n {plugins}\n </Dashboard>\n );\n}\n\nexport default LazyDashboard;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,SAASC,WAAW,QAAQ,aAAa;AACzC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,mBAAmB,QAAQ,kBAAkB;AAAC,SAC9CC,SAAS;AAAA,SACTC,mBAAmB;AAAA,SAEnBC,oBAAoB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQ7B,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAKO;EAAA,IALN;MAC5BC,EAAE;MACFC,QAAQ;MACRC;IAEkB,CAAC,GAAAH,IAAA;IADhBI,IAAI,GAAAC,wBAAA,CAAAL,IAAA,EAAAM,SAAA;EAEP,IAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGlB,QAAQ,CAACY,QAAQ,CAAC;EAClD,IAAMO,QAAQ,GAAGlB,WAAW,CAAC,CAAC;EAE9B,IAAMmB,wBAAwB,GAAGrB,WAAW,CACzCsB,MAA8B,IAAK;IAClC;IACA;IACA;IACA;IACA,IAAIV,EAAE,KAAKL,oBAAoB,EAAE;MAC/Ba,QAAQ,CAAChB,mBAAmB,CAAC;QAAEmB,YAAY,EAAED;MAAO,CAAC,CAAC,CAAC;IACzD,CAAC,MAAM;MACLF,QAAQ,CAACd,mBAAmB,CAACM,EAAE,EAAE;QAAEW,YAAY,EAAED;MAAO,CAAC,CAAC,CAAC;IAC7D;EACF,CAAC,EACD,CAACV,EAAE,EAAEQ,QAAQ,CACf,CAAC;EAED,IAAI,CAACF,QAAQ,IAAIL,QAAQ,EAAE;IACzBM,WAAW,CAAC,IAAI,CAAC;EACnB;EAEA,IAAI,CAACD,QAAQ,EAAE;IACb,oBAAOT,IAAA,CAACN,cAAc;MAAC,eAAY;IAAwB,CAAE,CAAC;EAChE;EAEA,oBACEM,IAAA,CAACJ,SAAS,EAAAmB,aAAA,CAAAA,aAAA;IACRZ,EAAE,EAAEA,EAAG;IACPa,oBAAoB,EAAEJ;IACtB;EAAA,GACIN,IAAI;IAAAW,QAAA,EAEPZ;EAAO,EACC,CAAC;AAEhB;AAEA,eAAeJ,aAAa","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationEvent.js","names":["makeEventFunctions","NavigationEvent","Object","freeze","CYCLE_TO_NEXT_STACK","CYCLE_TO_PREVIOUS_STACK","CYCLE_TO_NEXT_TAB","CYCLE_TO_PREVIOUS_TAB","listen","listenForCycleToNextStack","emit","emitCycleToNextStack","useListener","useCycleToNextStackListener","listenForCycleToPreviousStack","emitCycleToPreviousStack","useCycleToPreviousStackListener","listenForCycleToNextTab","emitCycleToNextTab","useCycleToNextTabListener","listenForCycleToPreviousTab","emitCycleToPreviousTab","useCycleToPreviousTabListener"],"sources":["../src/NavigationEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nconst NavigationEvent = Object.freeze({\n CYCLE_TO_NEXT_STACK: 'NavigationEvent.CYCLE_TO_NEXT_STACK',\n CYCLE_TO_PREVIOUS_STACK: 'NavigationEvent.CYCLE_TO_PREVIOUS_STACK',\n CYCLE_TO_NEXT_TAB: 'NavigationEvent.CYCLE_TO_NEXT_TAB',\n CYCLE_TO_PREVIOUS_TAB: 'NavigationEvent.CYCLE_TO_PREVIOUS_TAB',\n});\n\nexport const {\n listen: listenForCycleToNextStack,\n emit: emitCycleToNextStack,\n useListener: useCycleToNextStackListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_NEXT_STACK);\n\nexport const {\n listen: listenForCycleToPreviousStack,\n emit: emitCycleToPreviousStack,\n useListener: useCycleToPreviousStackListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_PREVIOUS_STACK);\n\nexport const {\n listen: listenForCycleToNextTab,\n emit: emitCycleToNextTab,\n useListener: useCycleToNextTabListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_NEXT_TAB);\n\nexport const {\n listen: listenForCycleToPreviousTab,\n emit: emitCycleToPreviousTab,\n useListener: useCycleToPreviousTabListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_PREVIOUS_TAB);\n\nexport default NavigationEvent;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAE7D,IAAMC,eAAe,GAAGC,MAAM,CAACC,MAAM,CAAC;EACpCC,mBAAmB,EAAE,qCAAqC;EAC1DC,uBAAuB,EAAE,yCAAyC;EAClEC,iBAAiB,EAAE,mCAAmC;EACtDC,qBAAqB,EAAE;AACzB,CAAC,CAAC;AAEF,OAAO,IAAM;EACXC,MAAM,EAAEC,yBAAyB;EACjCC,IAAI,EAAEC,oBAAoB;EAC1BC,WAAW,EAAEC;AACf,CAAC,GAAGb,kBAAkB,CAACC,eAAe,CAACG,mBAAmB,CAAC;AAE3D,OAAO,IAAM;EACXI,MAAM,EAAEM,6BAA6B;EACrCJ,IAAI,EAAEK,wBAAwB;EAC9BH,WAAW,EAAEI;AACf,CAAC,GAAGhB,kBAAkB,CAACC,eAAe,CAACI,uBAAuB,CAAC;AAE/D,OAAO,IAAM;EACXG,MAAM,EAAES,uBAAuB;EAC/BP,IAAI,EAAEQ,kBAAkB;EACxBN,WAAW,EAAEO;AACf,CAAC,GAAGnB,kBAAkB,CAACC,eAAe,CAACK,iBAAiB,CAAC;AAEzD,OAAO,IAAM;EACXE,MAAM,EAAEY,2BAA2B;EACnCV,IAAI,EAAEW,sBAAsB;EAC5BT,WAAW,EAAEU;AACf,CAAC,GAAGtB,kBAAkB,CAACC,eAAe,CAACM,qBAAqB,CAAC;AAE7D,eAAeN,eAAe"}
1
+ {"version":3,"file":"NavigationEvent.js","names":["makeEventFunctions","NavigationEvent","Object","freeze","CYCLE_TO_NEXT_STACK","CYCLE_TO_PREVIOUS_STACK","CYCLE_TO_NEXT_TAB","CYCLE_TO_PREVIOUS_TAB","listen","listenForCycleToNextStack","emit","emitCycleToNextStack","useListener","useCycleToNextStackListener","listenForCycleToPreviousStack","emitCycleToPreviousStack","useCycleToPreviousStackListener","listenForCycleToNextTab","emitCycleToNextTab","useCycleToNextTabListener","listenForCycleToPreviousTab","emitCycleToPreviousTab","useCycleToPreviousTabListener"],"sources":["../src/NavigationEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nconst NavigationEvent = Object.freeze({\n CYCLE_TO_NEXT_STACK: 'NavigationEvent.CYCLE_TO_NEXT_STACK',\n CYCLE_TO_PREVIOUS_STACK: 'NavigationEvent.CYCLE_TO_PREVIOUS_STACK',\n CYCLE_TO_NEXT_TAB: 'NavigationEvent.CYCLE_TO_NEXT_TAB',\n CYCLE_TO_PREVIOUS_TAB: 'NavigationEvent.CYCLE_TO_PREVIOUS_TAB',\n});\n\nexport const {\n listen: listenForCycleToNextStack,\n emit: emitCycleToNextStack,\n useListener: useCycleToNextStackListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_NEXT_STACK);\n\nexport const {\n listen: listenForCycleToPreviousStack,\n emit: emitCycleToPreviousStack,\n useListener: useCycleToPreviousStackListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_PREVIOUS_STACK);\n\nexport const {\n listen: listenForCycleToNextTab,\n emit: emitCycleToNextTab,\n useListener: useCycleToNextTabListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_NEXT_TAB);\n\nexport const {\n listen: listenForCycleToPreviousTab,\n emit: emitCycleToPreviousTab,\n useListener: useCycleToPreviousTabListener,\n} = makeEventFunctions(NavigationEvent.CYCLE_TO_PREVIOUS_TAB);\n\nexport default NavigationEvent;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAE7D,IAAMC,eAAe,GAAGC,MAAM,CAACC,MAAM,CAAC;EACpCC,mBAAmB,EAAE,qCAAqC;EAC1DC,uBAAuB,EAAE,yCAAyC;EAClEC,iBAAiB,EAAE,mCAAmC;EACtDC,qBAAqB,EAAE;AACzB,CAAC,CAAC;AAEF,OAAO,IAAM;EACXC,MAAM,EAAEC,yBAAyB;EACjCC,IAAI,EAAEC,oBAAoB;EAC1BC,WAAW,EAAEC;AACf,CAAC,GAAGb,kBAAkB,CAACC,eAAe,CAACG,mBAAmB,CAAC;AAE3D,OAAO,IAAM;EACXI,MAAM,EAAEM,6BAA6B;EACrCJ,IAAI,EAAEK,wBAAwB;EAC9BH,WAAW,EAAEI;AACf,CAAC,GAAGhB,kBAAkB,CAACC,eAAe,CAACI,uBAAuB,CAAC;AAE/D,OAAO,IAAM;EACXG,MAAM,EAAES,uBAAuB;EAC/BP,IAAI,EAAEQ,kBAAkB;EACxBN,WAAW,EAAEO;AACf,CAAC,GAAGnB,kBAAkB,CAACC,eAAe,CAACK,iBAAiB,CAAC;AAEzD,OAAO,IAAM;EACXE,MAAM,EAAEY,2BAA2B;EACnCV,IAAI,EAAEW,sBAAsB;EAC5BT,WAAW,EAAEU;AACf,CAAC,GAAGtB,kBAAkB,CAACC,eAAe,CAACM,qBAAqB,CAAC;AAE7D,eAAeN,eAAe","ignoreList":[]}
@@ -23,8 +23,8 @@ declare class PanelContextMenu extends PureComponent<PanelContextMenuProps, Reco
23
23
  canReopenLast(): boolean;
24
24
  render(): ReactElement;
25
25
  }
26
- declare const ConnectedPanelContextMenu: import("react-redux").ConnectedComponent<typeof PanelContextMenu, import("react-redux").Omit<Pick<React.ClassAttributes<PanelContextMenu> & PanelContextMenuProps, "glContainer" | "glEventHub" | "workspace" | keyof React.ClassAttributes<PanelContextMenu>> & Partial<Pick<React.ClassAttributes<PanelContextMenu> & PanelContextMenuProps, "additionalActions">> & Partial<Pick<{
27
- additionalActions: never[];
28
- }, never>>, "workspace">>;
26
+ declare const ConnectedPanelContextMenu: import("react-redux").ConnectedComponent<typeof PanelContextMenu, import("react-redux").Omit<Pick<React.ClassAttributes<PanelContextMenu> & PanelContextMenuProps, "glContainer" | "glEventHub" | "workspace" | keyof React.ClassAttributes<PanelContextMenu>> & {
27
+ additionalActions?: ResolvableContextAction[] | undefined;
28
+ } & {}, "workspace">>;
29
29
  export default ConnectedPanelContextMenu;
30
30
  //# sourceMappingURL=PanelContextMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PanelContextMenu.d.ts","sourceRoot":"","sources":["../src/PanelContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,kBAAkB,CAAC;AAM1B,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAOD,cAAM,gBAAiB,SAAQ,aAAa,CAC1C,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,qBAAqB;IASxC,UAAU,IAAI,GAAG,EAAE;IAMnB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,IAAI;IAU1B,oBAAoB,IAAI,IAAI;IAiB5B,gBAAgB,IAAI,IAAI;IAKxB,iBAAiB,IAAI,OAAO;IAqB5B,WAAW,IAAI,OAAO;IActB,aAAa,IAAI,OAAO;IAYxB,MAAM,IAAI,YAAY;CAwCvB;AAUD,QAAA,MAAM,yBAAyB;;yBAEX,CAAC;AAErB,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"PanelContextMenu.d.ts","sourceRoot":"","sources":["../src/PanelContextMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,kBAAkB,CAAC;AAM1B,UAAU,qBAAqB;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;IAC7C,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,EAAE,qBAAqB,CAAC;CAClC;AAOD,cAAM,gBAAiB,SAAQ,aAAa,CAC1C,qBAAqB,EACrB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,qBAAqB;IASxC,UAAU,IAAI,GAAG,EAAE;IAMnB,cAAc,IAAI,IAAI;IAKtB,kBAAkB,IAAI,IAAI;IAU1B,oBAAoB,IAAI,IAAI;IAiB5B,gBAAgB,IAAI,IAAI;IAKxB,iBAAiB,IAAI,OAAO;IAqB5B,WAAW,IAAI,OAAO;IActB,aAAa,IAAI,OAAO;IAYxB,MAAM,IAAI,YAAY;CAwCvB;AAUD,QAAA,MAAM,yBAAyB;;qBAEX,CAAC;AAErB,eAAe,yBAAyB,CAAC"}
@@ -17,12 +17,12 @@ class PanelContextMenu extends PureComponent {
17
17
  this.handleReopenLast = this.handleReopenLast.bind(this);
18
18
  }
19
19
  getAllTabs() {
20
- var _glContainer$tab$head, _glContainer$tab, _glContainer$tab$head2;
20
+ var _glContainer$tab$head, _glContainer$tab;
21
21
  // return a clone of the tabs array, or returns empty array if null
22
22
  var {
23
23
  glContainer
24
24
  } = this.props;
25
- return [...((_glContainer$tab$head = glContainer === null || glContainer === void 0 ? void 0 : (_glContainer$tab = glContainer.tab) === null || _glContainer$tab === void 0 ? void 0 : (_glContainer$tab$head2 = _glContainer$tab.header) === null || _glContainer$tab$head2 === void 0 ? void 0 : _glContainer$tab$head2.tabs) !== null && _glContainer$tab$head !== void 0 ? _glContainer$tab$head : [])];
25
+ return [...((_glContainer$tab$head = glContainer === null || glContainer === void 0 || (_glContainer$tab = glContainer.tab) === null || _glContainer$tab === void 0 || (_glContainer$tab = _glContainer$tab.header) === null || _glContainer$tab === void 0 ? void 0 : _glContainer$tab.tabs) !== null && _glContainer$tab$head !== void 0 ? _glContainer$tab$head : [])];
26
26
  }
27
27
  handleCloseTab() {
28
28
  var {
@@ -46,13 +46,13 @@ class PanelContextMenu extends PureComponent {
46
46
  } = this.props;
47
47
  var tabs = this.getAllTabs();
48
48
  for (var i = tabs.length - 1; i > 0; i -= 1) {
49
- var _tabs$i$contentItem, _tabs$i$contentItem$c, _glContainer$tab2, _glContainer$tab2$con, _glContainer$tab2$con2, _container2, _tabs$i;
50
- if (((_tabs$i$contentItem = tabs[i].contentItem) === null || _tabs$i$contentItem === void 0 ? void 0 : (_tabs$i$contentItem$c = _tabs$i$contentItem.config) === null || _tabs$i$contentItem$c === void 0 ? void 0 : _tabs$i$contentItem$c.id) === ((_glContainer$tab2 = glContainer.tab) === null || _glContainer$tab2 === void 0 ? void 0 : (_glContainer$tab2$con = _glContainer$tab2.contentItem) === null || _glContainer$tab2$con === void 0 ? void 0 : (_glContainer$tab2$con2 = _glContainer$tab2$con.config) === null || _glContainer$tab2$con2 === void 0 ? void 0 : _glContainer$tab2$con2.id)) {
49
+ var _tabs$i$contentItem, _glContainer$tab2, _container2, _tabs$i;
50
+ if (((_tabs$i$contentItem = tabs[i].contentItem) === null || _tabs$i$contentItem === void 0 || (_tabs$i$contentItem = _tabs$i$contentItem.config) === null || _tabs$i$contentItem === void 0 ? void 0 : _tabs$i$contentItem.id) === ((_glContainer$tab2 = glContainer.tab) === null || _glContainer$tab2 === void 0 || (_glContainer$tab2 = _glContainer$tab2.contentItem) === null || _glContainer$tab2 === void 0 || (_glContainer$tab2 = _glContainer$tab2.config) === null || _glContainer$tab2 === void 0 ? void 0 : _glContainer$tab2.id)) {
51
51
  break; // end when we get back to current id
52
52
  }
53
53
 
54
54
  // eslint-disable-next-line no-unused-expressions
55
- (_container2 = ((_tabs$i = tabs[i]) === null || _tabs$i === void 0 ? void 0 : _tabs$i.contentItem).container) === null || _container2 === void 0 ? void 0 : _container2.close();
55
+ (_container2 = ((_tabs$i = tabs[i]) === null || _tabs$i === void 0 ? void 0 : _tabs$i.contentItem).container) === null || _container2 === void 0 || _container2.close();
56
56
  }
57
57
  }
58
58
  handleReopenLast() {
@@ -69,26 +69,24 @@ class PanelContextMenu extends PureComponent {
69
69
  var tabs = this.getAllTabs();
70
70
  var disabled = true;
71
71
  for (var i = tabs.length - 1; i > 0; i -= 1) {
72
- var _tabs$i$contentItem2, _tabs$i$contentItem2$, _glContainer$tab3, _glContainer$tab3$con, _glContainer$tab3$con2, _tabs$i2, _tabs$i2$contentItem, _tabs$i2$contentItem$;
73
- if (((_tabs$i$contentItem2 = tabs[i].contentItem) === null || _tabs$i$contentItem2 === void 0 ? void 0 : (_tabs$i$contentItem2$ = _tabs$i$contentItem2.config) === null || _tabs$i$contentItem2$ === void 0 ? void 0 : _tabs$i$contentItem2$.id) === ((_glContainer$tab3 = glContainer.tab) === null || _glContainer$tab3 === void 0 ? void 0 : (_glContainer$tab3$con = _glContainer$tab3.contentItem) === null || _glContainer$tab3$con === void 0 ? void 0 : (_glContainer$tab3$con2 = _glContainer$tab3$con.config) === null || _glContainer$tab3$con2 === void 0 ? void 0 : _glContainer$tab3$con2.id)) {
72
+ var _tabs$i$contentItem2, _glContainer$tab3, _tabs$i2;
73
+ if (((_tabs$i$contentItem2 = tabs[i].contentItem) === null || _tabs$i$contentItem2 === void 0 || (_tabs$i$contentItem2 = _tabs$i$contentItem2.config) === null || _tabs$i$contentItem2 === void 0 ? void 0 : _tabs$i$contentItem2.id) === ((_glContainer$tab3 = glContainer.tab) === null || _glContainer$tab3 === void 0 || (_glContainer$tab3 = _glContainer$tab3.contentItem) === null || _glContainer$tab3 === void 0 || (_glContainer$tab3 = _glContainer$tab3.config) === null || _glContainer$tab3 === void 0 ? void 0 : _glContainer$tab3.id)) {
74
74
  break; // end when we get back to current id
75
75
  }
76
-
77
- var closable = Boolean((_tabs$i2 = tabs[i]) === null || _tabs$i2 === void 0 ? void 0 : (_tabs$i2$contentItem = _tabs$i2.contentItem) === null || _tabs$i2$contentItem === void 0 ? void 0 : (_tabs$i2$contentItem$ = _tabs$i2$contentItem.config) === null || _tabs$i2$contentItem$ === void 0 ? void 0 : _tabs$i2$contentItem$.isClosable);
76
+ var closable = Boolean((_tabs$i2 = tabs[i]) === null || _tabs$i2 === void 0 || (_tabs$i2 = _tabs$i2.contentItem) === null || _tabs$i2 === void 0 || (_tabs$i2 = _tabs$i2.config) === null || _tabs$i2 === void 0 ? void 0 : _tabs$i2.isClosable);
78
77
  if (closable) {
79
78
  disabled = false;
80
79
  break; // end if we find a closeable tab
81
80
  }
82
81
  }
83
-
84
82
  return disabled;
85
83
  }
86
84
  canCloseAny() {
87
85
  var tabs = this.getAllTabs();
88
86
  var disabled = true;
89
87
  for (var i = tabs.length - 1; i > 0; i -= 1) {
90
- var _tabs$i3, _tabs$i3$contentItem, _tabs$i3$contentItem$;
91
- var closable = Boolean((_tabs$i3 = tabs[i]) === null || _tabs$i3 === void 0 ? void 0 : (_tabs$i3$contentItem = _tabs$i3.contentItem) === null || _tabs$i3$contentItem === void 0 ? void 0 : (_tabs$i3$contentItem$ = _tabs$i3$contentItem.config) === null || _tabs$i3$contentItem$ === void 0 ? void 0 : _tabs$i3$contentItem$.isClosable);
88
+ var _tabs$i3;
89
+ var closable = Boolean((_tabs$i3 = tabs[i]) === null || _tabs$i3 === void 0 || (_tabs$i3 = _tabs$i3.contentItem) === null || _tabs$i3 === void 0 || (_tabs$i3 = _tabs$i3.config) === null || _tabs$i3 === void 0 ? void 0 : _tabs$i3.isClosable);
92
90
  if (closable) {
93
91
  disabled = false;
94
92
  break;
@@ -106,7 +104,7 @@ class PanelContextMenu extends PureComponent {
106
104
  return !((_workspace$data$close = workspace.data.closed) !== null && _workspace$data$close !== void 0 && _workspace$data$close.some(panel => panel.parentStackId === stackId));
107
105
  }
108
106
  render() {
109
- var _glContainer$tab4, _glContainer$tab4$con, _glContainer$tab4$con2;
107
+ var _glContainer$tab4;
110
108
  var {
111
109
  additionalActions,
112
110
  glContainer
@@ -118,7 +116,7 @@ class PanelContextMenu extends PureComponent {
118
116
  action: this.handleReopenLast,
119
117
  disabled: this.canReopenLast()
120
118
  }));
121
- var closable = (_glContainer$tab4 = glContainer.tab) === null || _glContainer$tab4 === void 0 ? void 0 : (_glContainer$tab4$con = _glContainer$tab4.contentItem) === null || _glContainer$tab4$con === void 0 ? void 0 : (_glContainer$tab4$con2 = _glContainer$tab4$con.config) === null || _glContainer$tab4$con2 === void 0 ? void 0 : _glContainer$tab4$con2.isClosable;
119
+ var closable = (_glContainer$tab4 = glContainer.tab) === null || _glContainer$tab4 === void 0 || (_glContainer$tab4 = _glContainer$tab4.contentItem) === null || _glContainer$tab4 === void 0 || (_glContainer$tab4 = _glContainer$tab4.config) === null || _glContainer$tab4 === void 0 ? void 0 : _glContainer$tab4.isClosable;
122
120
  contextActions.push({
123
121
  title: 'Close',
124
122
  order: 10,
@@ -1 +1 @@
1
- {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","getWorkspace","setWorkspace","setWorkspaceAction","connect","LayoutUtils","PanelEvent","jsx","_jsx","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","handleReopenLast","getAllTabs","_glContainer$tab$head","_glContainer$tab","_glContainer$tab$head2","glContainer","tab","header","tabs","close","forEach","_container","contentItem","container","i","length","_tabs$i$contentItem","_tabs$i$contentItem$c","_glContainer$tab2","_glContainer$tab2$con","_glContainer$tab2$con2","_container2","_tabs$i","config","id","glEventHub","emit","REOPEN_LAST","canCloseTabsRight","disabled","_tabs$i$contentItem2","_tabs$i$contentItem2$","_glContainer$tab3","_glContainer$tab3$con","_glContainer$tab3$con2","_tabs$i2","_tabs$i2$contentItem","_tabs$i2$contentItem$","closable","Boolean","isClosable","canCloseAny","_tabs$i3","_tabs$i3$contentItem","_tabs$i3$contentItem$","canReopenLast","_LayoutUtils$getStack","_workspace$data$close","workspace","stackId","getStackForConfig","layoutManager","root","getConfig","data","closed","some","panel","parentStackId","render","_glContainer$tab4","_glContainer$tab4$con","_glContainer$tab4$con2","additionalActions","contextActions","push","title","group","groups","medium","action","order","low","undefined","actions","_defineProperty","mapStateToProps","state","ConnectedPanelContextMenu"],"sources":["../src/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n ContextActions,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport {\n type CustomizableWorkspace,\n type RootState,\n getWorkspace,\n setWorkspace as setWorkspaceAction,\n} from '@deephaven/redux';\nimport { connect } from 'react-redux';\nimport { type ClosedPanel } from './PanelManager';\nimport { LayoutUtils } from './layout';\nimport { PanelEvent } from './PanelEvent';\n\ninterface PanelContextMenuProps {\n additionalActions: ResolvableContextAction[];\n glContainer: Container;\n glEventHub: EventEmitter;\n workspace: CustomizableWorkspace;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n this.handleReopenLast = this.handleReopenLast.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(\n tab => (tab?.contentItem as unknown as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n (tabs[i]?.contentItem as unknown as HasContainer).container?.close();\n }\n }\n\n handleReopenLast(): void {\n const { glContainer, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n canReopenLast(): boolean {\n const { workspace, glContainer } = this.props;\n const stackId = LayoutUtils.getStackForConfig(\n glContainer.layoutManager.root,\n glContainer.getConfig()\n )?.config.id;\n\n return !workspace.data.closed?.some(\n panel => (panel as ClosedPanel).parentStackId === stackId\n );\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions = [...additionalActions];\n\n contextActions.push(() => ({\n title: 'Re-open closed panel',\n group: ContextActions.groups.medium + 2004,\n action: this.handleReopenLast,\n disabled: this.canReopenLast(),\n }));\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nconst mapStateToProps = (\n state: RootState\n): {\n workspace: CustomizableWorkspace;\n} => ({\n workspace: getWorkspace(state),\n});\n\nconst ConnectedPanelContextMenu = connect(mapStateToProps, {\n setWorkspace: setWorkspaceAction,\n})(PanelContextMenu);\n\nexport default ConnectedPanelContextMenu;\n"],"mappings":"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"}
1
+ {"version":3,"file":"PanelContextMenu.js","names":["React","PureComponent","ContextActions","getWorkspace","setWorkspace","setWorkspaceAction","connect","LayoutUtils","PanelEvent","jsx","_jsx","PanelContextMenu","constructor","props","handleCloseTab","bind","handleCloseTabsRight","handleCloseTabsAll","handleReopenLast","getAllTabs","_glContainer$tab$head","_glContainer$tab","glContainer","tab","header","tabs","close","forEach","_container","contentItem","container","i","length","_tabs$i$contentItem","_glContainer$tab2","_container2","_tabs$i","config","id","glEventHub","emit","REOPEN_LAST","canCloseTabsRight","disabled","_tabs$i$contentItem2","_glContainer$tab3","_tabs$i2","closable","Boolean","isClosable","canCloseAny","_tabs$i3","canReopenLast","_LayoutUtils$getStack","_workspace$data$close","workspace","stackId","getStackForConfig","layoutManager","root","getConfig","data","closed","some","panel","parentStackId","render","_glContainer$tab4","additionalActions","contextActions","push","title","group","groups","medium","action","order","low","undefined","actions","_defineProperty","mapStateToProps","state","ConnectedPanelContextMenu"],"sources":["../src/PanelContextMenu.tsx"],"sourcesContent":["import React, { PureComponent, type ReactElement } from 'react';\nimport {\n ContextActions,\n type ResolvableContextAction,\n} from '@deephaven/components';\nimport type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';\nimport {\n type CustomizableWorkspace,\n type RootState,\n getWorkspace,\n setWorkspace as setWorkspaceAction,\n} from '@deephaven/redux';\nimport { connect } from 'react-redux';\nimport { type ClosedPanel } from './PanelManager';\nimport { LayoutUtils } from './layout';\nimport { PanelEvent } from './PanelEvent';\n\ninterface PanelContextMenuProps {\n additionalActions: ResolvableContextAction[];\n glContainer: Container;\n glEventHub: EventEmitter;\n workspace: CustomizableWorkspace;\n}\n\ninterface HasContainer {\n container: {\n close: () => void;\n };\n}\nclass PanelContextMenu extends PureComponent<\n PanelContextMenuProps,\n Record<string, never>\n> {\n static defaultProps = {\n additionalActions: [],\n };\n\n constructor(props: PanelContextMenuProps) {\n super(props);\n\n this.handleCloseTab = this.handleCloseTab.bind(this);\n this.handleCloseTabsRight = this.handleCloseTabsRight.bind(this);\n this.handleCloseTabsAll = this.handleCloseTabsAll.bind(this);\n this.handleReopenLast = this.handleReopenLast.bind(this);\n }\n\n getAllTabs(): Tab[] {\n // return a clone of the tabs array, or returns empty array if null\n const { glContainer } = this.props;\n return [...(glContainer?.tab?.header?.tabs ?? [])];\n }\n\n handleCloseTab(): void {\n const { glContainer } = this.props;\n glContainer.close();\n }\n\n handleCloseTabsAll(): void {\n const tabs = this.getAllTabs();\n\n // No need to check if isClosable, golden-layout returns\n // false when attempting to close tabs that you can't\n tabs.forEach(\n tab => (tab?.contentItem as unknown as HasContainer).container?.close()\n );\n }\n\n handleCloseTabsRight(): void {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n\n // eslint-disable-next-line no-unused-expressions\n (tabs[i]?.contentItem as unknown as HasContainer).container?.close();\n }\n }\n\n handleReopenLast(): void {\n const { glContainer, glEventHub } = this.props;\n glEventHub.emit(PanelEvent.REOPEN_LAST, glContainer);\n }\n\n canCloseTabsRight(): boolean {\n const { glContainer } = this.props;\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (\n tabs[i].contentItem?.config?.id ===\n glContainer.tab?.contentItem?.config?.id\n ) {\n break; // end when we get back to current id\n }\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break; // end if we find a closeable tab\n }\n }\n return disabled;\n }\n\n canCloseAny(): boolean {\n const tabs = this.getAllTabs();\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n const closable = Boolean(tabs[i]?.contentItem?.config?.isClosable);\n if (closable) {\n disabled = false;\n break;\n }\n }\n return disabled;\n }\n\n canReopenLast(): boolean {\n const { workspace, glContainer } = this.props;\n const stackId = LayoutUtils.getStackForConfig(\n glContainer.layoutManager.root,\n glContainer.getConfig()\n )?.config.id;\n\n return !workspace.data.closed?.some(\n panel => (panel as ClosedPanel).parentStackId === stackId\n );\n }\n\n render(): ReactElement {\n const { additionalActions, glContainer } = this.props;\n\n const contextActions = [...additionalActions];\n\n contextActions.push(() => ({\n title: 'Re-open closed panel',\n group: ContextActions.groups.medium + 2004,\n action: this.handleReopenLast,\n disabled: this.canReopenLast(),\n }));\n\n const closable = glContainer.tab?.contentItem?.config?.isClosable;\n contextActions.push({\n title: 'Close',\n order: 10,\n group: ContextActions.groups.low,\n action: this.handleCloseTab,\n disabled: closable === undefined || !closable,\n });\n\n // pushed as function so the disable check happens on run\n contextActions.push(() => ({\n title: 'Close Tabs to Right',\n order: 20,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsRight,\n disabled: this.canCloseTabsRight(),\n }));\n\n contextActions.push(() => ({\n title: 'Close All',\n order: 30,\n group: ContextActions.groups.low,\n action: this.handleCloseTabsAll,\n disabled: this.canCloseAny(),\n }));\n\n return <ContextActions actions={contextActions} />;\n }\n}\n\nconst mapStateToProps = (\n state: RootState\n): {\n workspace: CustomizableWorkspace;\n} => ({\n workspace: getWorkspace(state),\n});\n\nconst ConnectedPanelContextMenu = connect(mapStateToProps, {\n setWorkspace: setWorkspaceAction,\n})(PanelContextMenu);\n\nexport default ConnectedPanelContextMenu;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelErrorBoundary.js","names":["React","Component","LoadingOverlay","Log","PanelEvent","LayoutUtils","jsx","_jsx","log","module","PanelErrorBoundary","constructor","props","state","error","componentDidCatch","setState","componentWillUnmount","glContainer","glEventHub","panelId","getIdFromContainer","debug","emit","CLOSED","render","children","className","errorMessage","concat","isLoading","isLoaded"],"sources":["../src/PanelErrorBoundary.tsx"],"sourcesContent":["import React, { Component, type ReactNode } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport PanelEvent from './PanelEvent';\nimport LayoutUtils from './layout/LayoutUtils';\nimport './PanelErrorBoundary.scss';\n\nconst log = Log.module('PanelErrorBoundary');\n\ninterface PanelErrorBoundaryProps {\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n}\n\ninterface PanelErrorBoundaryState {\n error: Error | null;\n}\n/**\n * Panel wrapper implementing Error Boundary and emitting Closed event.\n * Closed event has to be emitted from the wrapper instead of the panel itself\n * because the panel can get unmounted on errors\n * and we want to differentiate between unmount on error vs panel being intentionally closed.\n */\nclass PanelErrorBoundary extends Component<\n PanelErrorBoundaryProps,\n PanelErrorBoundaryState\n> {\n constructor(props: PanelErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n componentDidCatch(error: Error): void {\n this.setState({ error });\n }\n\n componentWillUnmount(): void {\n const { glContainer, glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromContainer(glContainer);\n log.debug('componentWillUnmount', panelId);\n glEventHub.emit(PanelEvent.CLOSED, panelId, glContainer);\n }\n\n render(): ReactNode {\n const { children } = this.props;\n const { error } = this.state;\n if (error != null) {\n return (\n <div className=\"panel-error-boundary\">\n <LoadingOverlay\n data-testid=\"panel-error-boundary-loading-error\"\n errorMessage={`${error}`}\n isLoading={false}\n isLoaded={false}\n />\n </div>\n );\n }\n\n // We need to check for undefined children because React will throw an error if we return undefined from a render method\n // Note this behaviour was changed in React 18: https://github.com/reactwg/react-18/discussions/75\n return children ?? null;\n }\n}\n\nexport default PanelErrorBoundary;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAwB,OAAO;AACxD,SAASC,cAAc,QAAQ,uBAAuB;AAEtD,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,UAAU;AAAA,OACVC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGlB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,oBAAoB,CAAC;AAW5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAAST,SAAS,CAGxC;EACAU,WAAWA,CAACC,KAA8B,EAAE;IAC1C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEC,KAAK,EAAE;IAAK,CAAC;EAC9B;EAEAC,iBAAiBA,CAACD,KAAY,EAAQ;IACpC,IAAI,CAACE,QAAQ,CAAC;MAAEF;IAAM,CAAC,CAAC;EAC1B;EAEAG,oBAAoBA,CAAA,EAAS;IAC3B,IAAM;MAAEC,WAAW;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACP,KAAK;IAC9C,IAAMQ,OAAO,GAAGf,WAAW,CAACgB,kBAAkB,CAACH,WAAW,CAAC;IAC3DV,GAAG,CAACc,KAAK,CAAC,sBAAsB,EAAEF,OAAO,CAAC;IAC1CD,UAAU,CAACI,IAAI,CAACnB,UAAU,CAACoB,MAAM,EAAEJ,OAAO,EAAEF,WAAW,CAAC;EAC1D;EAEAO,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACd,KAAK;IAC/B,IAAM;MAAEE;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjB,oBACEP,IAAA;QAAKoB,SAAS,EAAC,sBAAsB;QAAAD,QAAA,eACnCnB,IAAA,CAACL,cAAc;UACb,eAAY,oCAAoC;UAChD0B,YAAY,KAAAC,MAAA,CAAKf,KAAK,CAAG;UACzBgB,SAAS,EAAE,KAAM;UACjBC,QAAQ,EAAE;QAAM,CACjB;MAAC,CACC,CAAC;IAEV;;IAEA;IACA;IACA,OAAOL,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,IAAI;EACzB;AACF;AAEA,eAAehB,kBAAkB"}
1
+ {"version":3,"file":"PanelErrorBoundary.js","names":["React","Component","LoadingOverlay","Log","PanelEvent","LayoutUtils","jsx","_jsx","log","module","PanelErrorBoundary","constructor","props","state","error","componentDidCatch","setState","componentWillUnmount","glContainer","glEventHub","panelId","getIdFromContainer","debug","emit","CLOSED","render","children","className","errorMessage","concat","isLoading","isLoaded"],"sources":["../src/PanelErrorBoundary.tsx"],"sourcesContent":["import React, { Component, type ReactNode } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport type { Container, EventEmitter } from '@deephaven/golden-layout';\nimport Log from '@deephaven/log';\nimport PanelEvent from './PanelEvent';\nimport LayoutUtils from './layout/LayoutUtils';\nimport './PanelErrorBoundary.scss';\n\nconst log = Log.module('PanelErrorBoundary');\n\ninterface PanelErrorBoundaryProps {\n children: ReactNode;\n glContainer: Container;\n glEventHub: EventEmitter;\n}\n\ninterface PanelErrorBoundaryState {\n error: Error | null;\n}\n/**\n * Panel wrapper implementing Error Boundary and emitting Closed event.\n * Closed event has to be emitted from the wrapper instead of the panel itself\n * because the panel can get unmounted on errors\n * and we want to differentiate between unmount on error vs panel being intentionally closed.\n */\nclass PanelErrorBoundary extends Component<\n PanelErrorBoundaryProps,\n PanelErrorBoundaryState\n> {\n constructor(props: PanelErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n componentDidCatch(error: Error): void {\n this.setState({ error });\n }\n\n componentWillUnmount(): void {\n const { glContainer, glEventHub } = this.props;\n const panelId = LayoutUtils.getIdFromContainer(glContainer);\n log.debug('componentWillUnmount', panelId);\n glEventHub.emit(PanelEvent.CLOSED, panelId, glContainer);\n }\n\n render(): ReactNode {\n const { children } = this.props;\n const { error } = this.state;\n if (error != null) {\n return (\n <div className=\"panel-error-boundary\">\n <LoadingOverlay\n data-testid=\"panel-error-boundary-loading-error\"\n errorMessage={`${error}`}\n isLoading={false}\n isLoaded={false}\n />\n </div>\n );\n }\n\n // We need to check for undefined children because React will throw an error if we return undefined from a render method\n // Note this behaviour was changed in React 18: https://github.com/reactwg/react-18/discussions/75\n return children ?? null;\n }\n}\n\nexport default PanelErrorBoundary;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAwB,OAAO;AACxD,SAASC,cAAc,QAAQ,uBAAuB;AAEtD,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,UAAU;AAAA,OACVC,WAAW;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGlB,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,oBAAoB,CAAC;AAW5C;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,SAAST,SAAS,CAGxC;EACAU,WAAWA,CAACC,KAA8B,EAAE;IAC1C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEC,KAAK,EAAE;IAAK,CAAC;EAC9B;EAEAC,iBAAiBA,CAACD,KAAY,EAAQ;IACpC,IAAI,CAACE,QAAQ,CAAC;MAAEF;IAAM,CAAC,CAAC;EAC1B;EAEAG,oBAAoBA,CAAA,EAAS;IAC3B,IAAM;MAAEC,WAAW;MAAEC;IAAW,CAAC,GAAG,IAAI,CAACP,KAAK;IAC9C,IAAMQ,OAAO,GAAGf,WAAW,CAACgB,kBAAkB,CAACH,WAAW,CAAC;IAC3DV,GAAG,CAACc,KAAK,CAAC,sBAAsB,EAAEF,OAAO,CAAC;IAC1CD,UAAU,CAACI,IAAI,CAACnB,UAAU,CAACoB,MAAM,EAAEJ,OAAO,EAAEF,WAAW,CAAC;EAC1D;EAEAO,MAAMA,CAAA,EAAc;IAClB,IAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACd,KAAK;IAC/B,IAAM;MAAEE;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjB,oBACEP,IAAA;QAAKoB,SAAS,EAAC,sBAAsB;QAAAD,QAAA,eACnCnB,IAAA,CAACL,cAAc;UACb,eAAY,oCAAoC;UAChD0B,YAAY,KAAAC,MAAA,CAAKf,KAAK,CAAG;UACzBgB,SAAS,EAAE,KAAM;UACjBC,QAAQ,EAAE;QAAM,CACjB;MAAC,CACC,CAAC;IAEV;;IAEA;IACA;IACA,OAAOL,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,IAAI;EACzB;AACF;AAEA,eAAehB,kBAAkB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelEvent.js","names":["makeEventFunctions","PanelEvent","Object","freeze","FOCUS","MOUNT","UNMOUNT","TITLE_CHANGED","REOPEN","REOPEN_LAST","DELETE","CLONED","CLOSED","OPEN","CLOSE","DRAGGING","DROPPED","listen","listenForPanelOpen","emit","emitPanelOpen","useListener","usePanelOpenListener"],"sources":["../src/PanelEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nexport type WidgetDescriptor = {\n type: string;\n name?: string | null;\n id?: string | null;\n};\n\nexport type PanelOpenEventDetail<T = unknown> = {\n /**\n * Opening the widget was triggered by dragging from a list, such as the Panels dropdown.\n * The coordinates are used as the starting location for the drag, where we will show the panel until the user drops it in the dashboard.\n */\n dragEvent?: MouseEvent;\n\n /** ID of the panel to re-use. Will replace any existing panel with this ID. Otherwise a new panel is opened with a randomly generated ID. */\n panelId?: string;\n\n /** Descriptor of the widget. */\n widget: WidgetDescriptor;\n\n /**\n * Function to fetch the instance of the widget\n * @deprecated Use `useWidget` hook with the `widget` descriptor instead\n */\n fetch?: () => Promise<T>;\n};\n\n/**\n * Events emitted by panels and to control panels\n */\nexport const PanelEvent = Object.freeze({\n // Panel has received focus\n FOCUS: 'PanelEvent.FOCUS',\n\n // Panel has been mounted\n MOUNT: 'PanelEvent.MOUNT',\n\n // Panel has been unmounted\n UNMOUNT: 'PanelEvent.UNMOUNT',\n\n // The title of the panel has changed\n TITLE_CHANGED: 'PanelEvent.TITLE_CHANGED',\n\n // Panel was re-opened from a dehydrated state\n REOPEN: 'PanelEvent.REOPEN',\n\n // Reopen last closed panel\n REOPEN_LAST: 'PanelEvent.REOPEN_LAST',\n\n // Panel was deleted\n DELETE: 'PanelEvent.DELETE',\n\n // Panel was cloned/copied\n CLONED: 'PanelEvent.CLONED',\n\n // Panel was closed\n CLOSED: 'PanelEvent.CLOSED',\n\n // Event to open a new panel\n // Plugins will need to register to open based on this event.\n // Multiple plugins could open panels for the same event if desired.\n OPEN: 'PanelEvent.OPEN',\n\n // Event to close a panel that's currently open\n CLOSE: 'PanelEvent.CLOSE',\n\n // Panel is being dragged\n DRAGGING: 'PanelEvent.DRAGGING',\n\n // Panel is dropped\n DROPPED: 'PanelEvent.DROPPED',\n});\n\nexport const {\n listen: listenForPanelOpen,\n emit: emitPanelOpen,\n useListener: usePanelOpenListener,\n} = makeEventFunctions<[detail: PanelOpenEventDetail]>(PanelEvent.OPEN);\n\n// TODO (#2147): Add the rest of the event functions here. Need to create the correct types for all of them.\n\nexport default PanelEvent;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AA4B7D;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EACtC;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,OAAO,EAAE,oBAAoB;EAE7B;EACAC,aAAa,EAAE,0BAA0B;EAEzC;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,WAAW,EAAE,wBAAwB;EAErC;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACA;EACA;EACAC,IAAI,EAAE,iBAAiB;EAEvB;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,QAAQ,EAAE,qBAAqB;EAE/B;EACAC,OAAO,EAAE;AACX,CAAC,CAAC;AAEF,OAAO,IAAM;EACXC,MAAM,EAAEC,kBAAkB;EAC1BC,IAAI,EAAEC,aAAa;EACnBC,WAAW,EAAEC;AACf,CAAC,GAAGtB,kBAAkB,CAAiCC,UAAU,CAACY,IAAI,CAAC;;AAEvE;;AAEA,eAAeZ,UAAU"}
1
+ {"version":3,"file":"PanelEvent.js","names":["makeEventFunctions","PanelEvent","Object","freeze","FOCUS","MOUNT","UNMOUNT","TITLE_CHANGED","REOPEN","REOPEN_LAST","DELETE","CLONED","CLOSED","OPEN","CLOSE","DRAGGING","DROPPED","listen","listenForPanelOpen","emit","emitPanelOpen","useListener","usePanelOpenListener"],"sources":["../src/PanelEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\n\nexport type WidgetDescriptor = {\n type: string;\n name?: string | null;\n id?: string | null;\n};\n\nexport type PanelOpenEventDetail<T = unknown> = {\n /**\n * Opening the widget was triggered by dragging from a list, such as the Panels dropdown.\n * The coordinates are used as the starting location for the drag, where we will show the panel until the user drops it in the dashboard.\n */\n dragEvent?: MouseEvent;\n\n /** ID of the panel to re-use. Will replace any existing panel with this ID. Otherwise a new panel is opened with a randomly generated ID. */\n panelId?: string;\n\n /** Descriptor of the widget. */\n widget: WidgetDescriptor;\n\n /**\n * Function to fetch the instance of the widget\n * @deprecated Use `useWidget` hook with the `widget` descriptor instead\n */\n fetch?: () => Promise<T>;\n};\n\n/**\n * Events emitted by panels and to control panels\n */\nexport const PanelEvent = Object.freeze({\n // Panel has received focus\n FOCUS: 'PanelEvent.FOCUS',\n\n // Panel has been mounted\n MOUNT: 'PanelEvent.MOUNT',\n\n // Panel has been unmounted\n UNMOUNT: 'PanelEvent.UNMOUNT',\n\n // The title of the panel has changed\n TITLE_CHANGED: 'PanelEvent.TITLE_CHANGED',\n\n // Panel was re-opened from a dehydrated state\n REOPEN: 'PanelEvent.REOPEN',\n\n // Reopen last closed panel\n REOPEN_LAST: 'PanelEvent.REOPEN_LAST',\n\n // Panel was deleted\n DELETE: 'PanelEvent.DELETE',\n\n // Panel was cloned/copied\n CLONED: 'PanelEvent.CLONED',\n\n // Panel was closed\n CLOSED: 'PanelEvent.CLOSED',\n\n // Event to open a new panel\n // Plugins will need to register to open based on this event.\n // Multiple plugins could open panels for the same event if desired.\n OPEN: 'PanelEvent.OPEN',\n\n // Event to close a panel that's currently open\n CLOSE: 'PanelEvent.CLOSE',\n\n // Panel is being dragged\n DRAGGING: 'PanelEvent.DRAGGING',\n\n // Panel is dropped\n DROPPED: 'PanelEvent.DROPPED',\n});\n\nexport const {\n listen: listenForPanelOpen,\n emit: emitPanelOpen,\n useListener: usePanelOpenListener,\n} = makeEventFunctions<[detail: PanelOpenEventDetail]>(PanelEvent.OPEN);\n\n// TODO (#2147): Add the rest of the event functions here. Need to create the correct types for all of them.\n\nexport default PanelEvent;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AA4B7D;AACA;AACA;AACA,OAAO,IAAMC,UAAU,GAAGC,MAAM,CAACC,MAAM,CAAC;EACtC;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,OAAO,EAAE,oBAAoB;EAE7B;EACAC,aAAa,EAAE,0BAA0B;EAEzC;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,WAAW,EAAE,wBAAwB;EAErC;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACAC,MAAM,EAAE,mBAAmB;EAE3B;EACA;EACA;EACAC,IAAI,EAAE,iBAAiB;EAEvB;EACAC,KAAK,EAAE,kBAAkB;EAEzB;EACAC,QAAQ,EAAE,qBAAqB;EAE/B;EACAC,OAAO,EAAE;AACX,CAAC,CAAC;AAEF,OAAO,IAAM;EACXC,MAAM,EAAEC,kBAAkB;EAC1BC,IAAI,EAAEC,aAAa;EACnBC,WAAW,EAAEC;AACf,CAAC,GAAGtB,kBAAkB,CAAiCC,UAAU,CAACY,IAAI,CAAC;;AAEvE;;AAEA,eAAeZ,UAAU","ignoreList":[]}
@@ -1,13 +1,13 @@
1
1
  import { type ComponentType } from 'react';
2
2
  import type GoldenLayout from '@deephaven/golden-layout';
3
3
  import type { Container, ContentItem, ItemConfig, ReactComponentConfig } from '@deephaven/golden-layout';
4
- import { type PanelComponent, type PanelComponentType, type PanelProps } from './DashboardPlugin';
4
+ import { type DehydratedDashboardPanelProps, type DehydratedPanelConfig, type DehydratedPanelProps, type PanelComponent, type PanelComponentType, type PanelProps } from './DashboardPlugin';
5
5
  declare enum CycleDirection {
6
6
  Next = 0,
7
7
  Previous = 1
8
8
  }
9
- export type PanelHydraterFunction = (name: string, props: PanelProps) => PanelProps;
10
- export type PanelDehydraterFunction = (name: string, config: ReactComponentConfig) => ReactComponentConfig;
9
+ export type PanelHydraterFunction = (name: string, props: DehydratedPanelProps) => DehydratedDashboardPanelProps;
10
+ export type PanelDehydraterFunction = (name: string, config: ReactComponentConfig) => DehydratedPanelConfig;
11
11
  export type ClosedPanel = ReactComponentConfig & {
12
12
  /**
13
13
  * The stack the component is in.
@@ -1 +1 @@
1
- {"version":3,"file":"PanelManager.d.ts","sourceRoot":"","sources":["../src/PanelManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PanelManager.d.ts","sourceRoot":"","sources":["../src/PanelManager.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,11 @@ import { listenForCycleToNextStack, listenForCycleToPreviousStack, listenForCycl
9
9
  import LayoutUtils, { isReactComponentConfig } from "./layout/LayoutUtils.js";
10
10
  import { isWrappedComponent } from "./DashboardPlugin.js";
11
11
  var log = Log.module('PanelManager');
12
- var CycleDirection;
13
- (function (CycleDirection) {
12
+ var CycleDirection = /*#__PURE__*/function (CycleDirection) {
14
13
  CycleDirection[CycleDirection["Next"] = 0] = "Next";
15
14
  CycleDirection[CycleDirection["Previous"] = 1] = "Previous";
16
- })(CycleDirection || (CycleDirection = {}));
15
+ return CycleDirection;
16
+ }(CycleDirection || {});
17
17
  /**
18
18
  * Class to keep track of which panels are open, have been closed, and also events to close panels.
19
19
  */
@@ -135,9 +135,9 @@ class PanelManager {
135
135
  getLastUsedPanel(matcher) {
136
136
  var opened = this.getOpenedPanels();
137
137
  for (var i = opened.length - 1; i >= 0; i -= 1) {
138
- var _panel = opened[i];
139
- if (matcher == null || matcher(_panel)) {
140
- return _panel;
138
+ var panel = opened[i];
139
+ if (matcher == null || matcher(panel)) {
140
+ return panel;
141
141
  }
142
142
  }
143
143
  return undefined;
@@ -327,15 +327,14 @@ class PanelManager {
327
327
  LayoutUtils.closeComponent(root, config);
328
328
  }
329
329
  addClosedPanel(glContainer) {
330
- var {
331
- root
332
- } = this.layout;
333
330
  var config = LayoutUtils.getComponentConfigFromContainer(glContainer);
334
331
  if (config && isReactComponentConfig(config)) {
335
332
  var dehydratedConfig = this.dehydrateComponent(config.component, config);
336
333
  if (dehydratedConfig != null) {
337
- var _LayoutUtils$getStack2;
338
- dehydratedConfig.parentStackId = (_LayoutUtils$getStack2 = LayoutUtils.getStackForConfig(root, config)) === null || _LayoutUtils$getStack2 === void 0 ? void 0 : _LayoutUtils$getStack2.config.id;
334
+ var _glContainer$tab;
335
+ // Not using LayoutUtils.getStackForConfig here because the panel may be removed from the root config already.
336
+ // The container config should be the same as it was when it was unmounted, so this avoids the issue of the config not existing on root.
337
+ dehydratedConfig.parentStackId = (_glContainer$tab = glContainer.tab) === null || _glContainer$tab === void 0 ? void 0 : _glContainer$tab.header.parent.config.id;
339
338
  this.closed.push(dehydratedConfig);
340
339
  }
341
340
  }