@deephaven/dashboard-core-plugins 0.108.1-beta.1 → 0.108.1-beta.13

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 (105) hide show
  1. package/dist/FilterEvents.d.ts +86 -0
  2. package/dist/FilterEvents.d.ts.map +1 -0
  3. package/dist/FilterEvents.js +78 -0
  4. package/dist/FilterEvents.js.map +1 -0
  5. package/dist/FilterPlugin.d.ts +1 -12
  6. package/dist/FilterPlugin.d.ts.map +1 -1
  7. package/dist/FilterPlugin.js +30 -23
  8. package/dist/FilterPlugin.js.map +1 -1
  9. package/dist/GridWidgetPlugin.d.ts +2 -2
  10. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  11. package/dist/GridWidgetPlugin.js +54 -5
  12. package/dist/GridWidgetPlugin.js.map +1 -1
  13. package/dist/events/TabEventMap.d.ts +1 -1
  14. package/dist/events/TabEventMap.d.ts.map +1 -1
  15. package/dist/events/TabEventMap.js.map +1 -1
  16. package/dist/events/index.d.ts +7 -1
  17. package/dist/events/index.d.ts.map +1 -1
  18. package/dist/events/index.js +5 -1
  19. package/dist/events/index.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/linker/Linker.d.ts +3 -2
  25. package/dist/linker/Linker.d.ts.map +1 -1
  26. package/dist/linker/Linker.js +11 -2
  27. package/dist/linker/Linker.js.map +1 -1
  28. package/dist/linker/LinkerUtils.d.ts +2 -2
  29. package/dist/linker/LinkerUtils.d.ts.map +1 -1
  30. package/dist/linker/LinkerUtils.js +2 -1
  31. package/dist/linker/LinkerUtils.js.map +1 -1
  32. package/dist/panels/ChartPanel.d.ts +2 -2
  33. package/dist/panels/ChartPanel.d.ts.map +1 -1
  34. package/dist/panels/ChartPanel.js +4 -1
  35. package/dist/panels/ChartPanel.js.map +1 -1
  36. package/dist/panels/CommandHistoryPanel.js +1 -1
  37. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  38. package/dist/panels/ConsolePanel.js +1 -1
  39. package/dist/panels/ConsolePanel.js.map +1 -1
  40. package/dist/panels/CorePanel.d.ts +13 -0
  41. package/dist/panels/CorePanel.d.ts.map +1 -0
  42. package/dist/panels/CorePanel.js +76 -0
  43. package/dist/panels/CorePanel.js.map +1 -0
  44. package/dist/panels/DropdownFilterPanel.d.ts +1 -1
  45. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  46. package/dist/panels/DropdownFilterPanel.js +7 -4
  47. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  48. package/dist/panels/FileExplorerPanel.js +1 -1
  49. package/dist/panels/FileExplorerPanel.js.map +1 -1
  50. package/dist/panels/FilterSetManagerPanel.d.ts +2 -2
  51. package/dist/panels/FilterSetManagerPanel.js +1 -1
  52. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  53. package/dist/panels/InputFilterPanel.d.ts +2 -2
  54. package/dist/panels/InputFilterPanel.d.ts.map +1 -1
  55. package/dist/panels/InputFilterPanel.js +9 -5
  56. package/dist/panels/InputFilterPanel.js.map +1 -1
  57. package/dist/panels/IrisGridPanel.d.ts +2 -2
  58. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  59. package/dist/panels/IrisGridPanel.js +11 -4
  60. package/dist/panels/IrisGridPanel.js.map +1 -1
  61. package/dist/panels/LogPanel.d.ts +1 -1
  62. package/dist/panels/LogPanel.js +1 -1
  63. package/dist/panels/LogPanel.js.map +1 -1
  64. package/dist/panels/MarkdownPanel.d.ts +1 -1
  65. package/dist/panels/MarkdownPanel.js +1 -1
  66. package/dist/panels/MarkdownPanel.js.map +1 -1
  67. package/dist/panels/NotebookPanel.d.ts +1 -1
  68. package/dist/panels/NotebookPanel.js +1 -1
  69. package/dist/panels/NotebookPanel.js.map +1 -1
  70. package/dist/panels/WidgetPanel.d.ts +1 -1
  71. package/dist/panels/WidgetPanel.d.ts.map +1 -1
  72. package/dist/panels/WidgetPanel.js +1 -1
  73. package/dist/panels/WidgetPanel.js.map +1 -1
  74. package/dist/panels/index.d.ts +5 -1
  75. package/dist/panels/index.d.ts.map +1 -1
  76. package/dist/panels/index.js +7 -1
  77. package/dist/panels/index.js.map +1 -1
  78. package/dist/redux/selectors.d.ts +1 -1
  79. package/dist/redux/selectors.js.map +1 -1
  80. package/dist/useDashboardColumnFilters.d.ts +17 -0
  81. package/dist/useDashboardColumnFilters.d.ts.map +1 -0
  82. package/dist/useDashboardColumnFilters.js +59 -0
  83. package/dist/useDashboardColumnFilters.js.map +1 -0
  84. package/dist/useIrisGridModel.d.ts.map +1 -1
  85. package/dist/useIrisGridModel.js +25 -22
  86. package/dist/useIrisGridModel.js.map +1 -1
  87. package/package.json +24 -24
  88. package/dist/events/TabEvent.d.ts +0 -6
  89. package/dist/events/TabEvent.d.ts.map +0 -1
  90. package/dist/events/TabEvent.js +0 -6
  91. package/dist/events/TabEvent.js.map +0 -1
  92. package/dist/panels/Panel.css +0 -5
  93. package/dist/panels/Panel.css.map +0 -1
  94. package/dist/panels/Panel.d.ts +0 -44
  95. package/dist/panels/Panel.d.ts.map +0 -1
  96. package/dist/panels/Panel.js +0 -333
  97. package/dist/panels/Panel.js.map +0 -1
  98. package/dist/panels/PanelContextMenu.d.ts +0 -30
  99. package/dist/panels/PanelContextMenu.d.ts.map +0 -1
  100. package/dist/panels/PanelContextMenu.js +0 -159
  101. package/dist/panels/PanelContextMenu.js.map +0 -1
  102. package/dist/panels/RenameDialog.d.ts +0 -34
  103. package/dist/panels/RenameDialog.d.ts.map +0 -1
  104. package/dist/panels/RenameDialog.js +0 -167
  105. package/dist/panels/RenameDialog.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_OBJECT","Object","freeze","EMPTY_MAP","Map","EMPTY_ARRAY","getColumnsForDashboard","store","dashboardId","_getDashboardData$col","columns","getFilterSetsForDashboard","_getDashboardData$fil","filterSets","getInputFiltersForDashboard","_getDashboardData$fil2","filters","getTableMapForDashboard","_getDashboardData$tab","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","_getDashboardData$lin","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","_getDashboardData$con","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type SessionWrapper } from '@deephaven/jsapi-utils';\nimport { type RootState } from '@deephaven/redux';\nimport { type FilterChangeEvent } from '../FilterPlugin';\nimport { type Link } from '../linker/LinkerUtils';\nimport { type FilterSet } from '../panels';\nimport { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): dh.Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as dh.Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, dh.Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n dh.Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n (getDashboardData(store, dashboardId).consoleSettings ??\n EMPTY_OBJECT) as Record<string, unknown>;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): dh.IdeConnection | undefined =>\n getDashboardData(store, dashboardId).connection as\n | dh.IdeConnection\n | undefined;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper | undefined =>\n getDashboardData(store, dashboardId).sessionWrapper as\n | SessionWrapper\n | undefined;\n"],"mappings":"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"}
1
+ {"version":3,"file":"selectors.js","names":["getDashboardData","EMPTY_OBJECT","Object","freeze","EMPTY_MAP","Map","EMPTY_ARRAY","getColumnsForDashboard","store","dashboardId","_getDashboardData$col","columns","getFilterSetsForDashboard","_getDashboardData$fil","filterSets","getInputFiltersForDashboard","_getDashboardData$fil2","filters","getTableMapForDashboard","_getDashboardData$tab","tableMap","getIsolatedLinkerPanelIdForDashboard","isolatedLinkerPanelId","getLinksForDashboard","_getDashboardData$lin","links","getColumnSelectionValidatorForDashboard","columnSelectionValidator","getDashboardConsoleSettings","_getDashboardData$con","consoleSettings","getDashboardConnection","connection","getDashboardSessionWrapper","sessionWrapper"],"sources":["../../src/redux/selectors.ts"],"sourcesContent":["import { getDashboardData } from '@deephaven/dashboard';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { type SessionWrapper } from '@deephaven/jsapi-utils';\nimport { type RootState } from '@deephaven/redux';\nimport { type FilterChangeEvent } from '../FilterEvents';\nimport { type Link } from '../linker/LinkerUtils';\nimport { type FilterSet } from '../panels';\nimport { type ColumnSelectionValidator } from '../linker/ColumnSelectionValidator';\n\nconst EMPTY_OBJECT = Object.freeze({});\n\nconst EMPTY_MAP = new Map();\n\nconst EMPTY_ARRAY = Object.freeze([]);\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns All column objects found in all panels in this dashboard\n */\nexport const getColumnsForDashboard = (\n store: RootState,\n dashboardId: string\n): dh.Column[] =>\n (getDashboardData(store, dashboardId).columns ?? EMPTY_ARRAY) as dh.Column[];\n\n/**\n * Get the known filter sets for the dashboard.\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filter sets set on this dashboard\n */\nexport const getFilterSetsForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterSet[] =>\n (getDashboardData(store, dashboardId).filterSets ??\n EMPTY_ARRAY) as FilterSet[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns The filters set on this dashboard\n */\nexport const getInputFiltersForDashboard = (\n store: RootState,\n dashboardId: string\n): FilterChangeEvent[] =>\n (getDashboardData(store, dashboardId).filters ??\n EMPTY_ARRAY) as FilterChangeEvent[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get data for\n * @returns Map from panel ID to the table used in that panel\n */\nexport const getTableMapForDashboard = (\n store: RootState,\n dashboardId: string\n): Map<string, dh.Table> =>\n (getDashboardData(store, dashboardId).tableMap ?? EMPTY_MAP) as Map<\n string,\n dh.Table\n >;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data for\n * @returns The panel ID that is isolated, undefined if none is isolated\n */\nexport const getIsolatedLinkerPanelIdForDashboard = (\n store: RootState,\n dashboardId: string\n): string | undefined =>\n getDashboardData(store, dashboardId).isolatedLinkerPanelId as\n | string\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the data from\n * @returns The links for the dashboard\n */\nexport const getLinksForDashboard = (\n store: RootState,\n dashboardId: string\n): Link[] =>\n (getDashboardData(store, dashboardId).links ?? EMPTY_ARRAY) as Link[];\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the column selection validators for\n * @returns Column selection validator active on a dashboard\n */\nexport const getColumnSelectionValidatorForDashboard = (\n store: RootState,\n dashboardId: string\n): ColumnSelectionValidator | undefined =>\n getDashboardData(store, dashboardId).columnSelectionValidator as\n | ColumnSelectionValidator\n | undefined;\n\n/**\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the console settings for\n * @returns Console settings for this dashboard\n */\nexport const getDashboardConsoleSettings = (\n store: RootState,\n dashboardId: string\n): Record<string, unknown> =>\n (getDashboardData(store, dashboardId).consoleSettings ??\n EMPTY_OBJECT) as Record<string, unknown>;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the IdeConnection for\n * @returns The connection for the dashboard\n */\nexport const getDashboardConnection = (\n store: RootState,\n dashboardId: string\n): dh.IdeConnection | undefined =>\n getDashboardData(store, dashboardId).connection as\n | dh.IdeConnection\n | undefined;\n\n/**\n *\n * @param store The redux store\n * @param dashboardId The dashboard ID to get the SessionWrapper for\n * @returns The session wrapper for the dashboard\n */\nexport const getDashboardSessionWrapper = (\n store: RootState,\n dashboardId: string\n): SessionWrapper | undefined =>\n getDashboardData(store, dashboardId).sessionWrapper as\n | SessionWrapper\n | undefined;\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { dh } from '@deephaven/jsapi-types';
2
+ import { type InputFilter } from '@deephaven/iris-grid';
3
+ /**
4
+ * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and
5
+ * adds the columns provided to the filter options in the dashboard.
6
+ * @param columns The columns this source has available for filtering.
7
+ * These are used to populate filter options in the UI (InputFilter, DropdownFilter)
8
+ * @param table The table for this source if applicable.
9
+ * This is used to enable ChartBuilder from IrisGrid.
10
+ * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.
11
+ */
12
+ export declare function useDashboardColumnFilters(columns: readonly {
13
+ name: string;
14
+ type: string;
15
+ }[], table?: dh.Table): InputFilter[];
16
+ export default useDashboardColumnFilters;
17
+ //# sourceMappingURL=useDashboardColumnFilters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDashboardColumnFilters.d.ts","sourceRoot":"","sources":["../src/useDashboardColumnFilters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAevE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAClD,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GACf,WAAW,EAAE,CA+Df;AAED,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { useCallback, useEffect, useMemo } from 'react';
2
+ import { IrisGridUtils } from '@deephaven/iris-grid';
3
+ import { useLayoutManager, useDashboardId, useAppSelector, useDhId } from '@deephaven/dashboard';
4
+ import { getInputFiltersForDashboard } from "./redux/index.js";
5
+ import { emitFilterColumnsChanged, emitFilterTableChanged } from "./FilterEvents.js";
6
+ /**
7
+ * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and
8
+ * adds the columns provided to the filter options in the dashboard.
9
+ * @param columns The columns this source has available for filtering.
10
+ * These are used to populate filter options in the UI (InputFilter, DropdownFilter)
11
+ * @param table The table for this source if applicable.
12
+ * This is used to enable ChartBuilder from IrisGrid.
13
+ * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.
14
+ */
15
+ export function useDashboardColumnFilters(columns, table) {
16
+ var {
17
+ eventHub
18
+ } = useLayoutManager();
19
+ var dashboardId = useDashboardId();
20
+ var panelId = useDhId();
21
+ useEffect(function columnsChanged() {
22
+ if (panelId == null) {
23
+ return;
24
+ }
25
+ emitFilterColumnsChanged(eventHub, panelId, columns);
26
+ }, [eventHub, panelId, columns]);
27
+ useEffect(function tableChanged() {
28
+ if (table == null || panelId == null) {
29
+ return;
30
+ }
31
+ emitFilterTableChanged(eventHub, panelId, table);
32
+ }, [eventHub, panelId, table]);
33
+
34
+ // Cleanup separately because filtering the table or other operations can get a new columns array,
35
+ // and we are using null to indicate unmount, not change
36
+ useEffect(function cleanupOnUnmount() {
37
+ if (panelId == null) {
38
+ return;
39
+ }
40
+ return () => {
41
+ emitFilterColumnsChanged(eventHub, panelId, null);
42
+ emitFilterTableChanged(eventHub, panelId, null);
43
+ };
44
+ }, [eventHub, panelId]);
45
+ var getInputFilters = useCallback(s => getInputFiltersForDashboard(s, dashboardId), [dashboardId]);
46
+ var reduxInputFilters = useAppSelector(getInputFilters);
47
+ var inputFilters = useMemo(() => IrisGridUtils.getInputFiltersForColumns(columns,
48
+ // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.
49
+ reduxInputFilters.filter(_ref => {
50
+ var {
51
+ value,
52
+ excludePanelIds
53
+ } = _ref;
54
+ return value != null && (excludePanelIds == null || panelId != null && !excludePanelIds.includes(panelId));
55
+ })), [columns, panelId, reduxInputFilters]);
56
+ return inputFilters;
57
+ }
58
+ export default useDashboardColumnFilters;
59
+ //# sourceMappingURL=useDashboardColumnFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDashboardColumnFilters.js","names":["useCallback","useEffect","useMemo","IrisGridUtils","useLayoutManager","useDashboardId","useAppSelector","useDhId","getInputFiltersForDashboard","emitFilterColumnsChanged","emitFilterTableChanged","useDashboardColumnFilters","columns","table","eventHub","dashboardId","panelId","columnsChanged","tableChanged","cleanupOnUnmount","getInputFilters","s","reduxInputFilters","inputFilters","getInputFiltersForColumns","filter","_ref","value","excludePanelIds","includes"],"sources":["../src/useDashboardColumnFilters.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { IrisGridUtils, type InputFilter } from '@deephaven/iris-grid';\nimport {\n useLayoutManager,\n useDashboardId,\n useAppSelector,\n useDhId,\n} from '@deephaven/dashboard';\nimport { type RootState } from '@deephaven/redux';\nimport { getInputFiltersForDashboard } from './redux';\nimport {\n type FilterColumnSourceId,\n emitFilterColumnsChanged,\n emitFilterTableChanged,\n} from './FilterEvents';\n\n/**\n * Subscribes to the dashboard column filters (a.k.a. InputFilter) for the current panel or widget, and\n * adds the columns provided to the filter options in the dashboard.\n * @param columns The columns this source has available for filtering.\n * These are used to populate filter options in the UI (InputFilter, DropdownFilter)\n * @param table The table for this source if applicable.\n * This is used to enable ChartBuilder from IrisGrid.\n * @returns The dashboard column filters (InputFilter[]) that apply to the columns provided.\n */\nexport function useDashboardColumnFilters(\n columns: readonly { name: string; type: string }[],\n table?: dh.Table\n): InputFilter[] {\n const { eventHub } = useLayoutManager();\n const dashboardId = useDashboardId();\n const panelId = useDhId() as FilterColumnSourceId | null;\n\n useEffect(\n function columnsChanged() {\n if (panelId == null) {\n return;\n }\n emitFilterColumnsChanged(eventHub, panelId, columns);\n },\n [eventHub, panelId, columns]\n );\n\n useEffect(\n function tableChanged() {\n if (table == null || panelId == null) {\n return;\n }\n emitFilterTableChanged(eventHub, panelId, table);\n },\n [eventHub, panelId, table]\n );\n\n // Cleanup separately because filtering the table or other operations can get a new columns array,\n // and we are using null to indicate unmount, not change\n useEffect(\n function cleanupOnUnmount() {\n if (panelId == null) {\n return;\n }\n return () => {\n emitFilterColumnsChanged(eventHub, panelId, null);\n emitFilterTableChanged(eventHub, panelId, null);\n };\n },\n [eventHub, panelId]\n );\n\n const getInputFilters = useCallback(\n (s: RootState) => getInputFiltersForDashboard(s, dashboardId),\n [dashboardId]\n );\n\n const reduxInputFilters = useAppSelector(getInputFilters);\n\n const inputFilters = useMemo(\n () =>\n IrisGridUtils.getInputFiltersForColumns(\n columns,\n // They may have picked a column, but not actually entered a value yet. In that case, don't need to update.\n reduxInputFilters.filter(\n ({ value, excludePanelIds }) =>\n value != null &&\n (excludePanelIds == null ||\n (panelId != null && !excludePanelIds.includes(panelId)))\n )\n ),\n [columns, panelId, reduxInputFilters]\n );\n\n return inputFilters;\n}\n\nexport default useDashboardColumnFilters;\n"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEvD,SAASC,aAAa,QAA0B,sBAAsB;AACtE,SACEC,gBAAgB,EAChBC,cAAc,EACdC,cAAc,EACdC,OAAO,QACF,sBAAsB;AAAC,SAErBC,2BAA2B;AAAA,SAGlCC,wBAAwB,EACxBC,sBAAsB;AAGxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,yBAAyBA,CACvCC,OAAkD,EAClDC,KAAgB,EACD;EACf,IAAM;IAAEC;EAAS,CAAC,GAAGV,gBAAgB,CAAC,CAAC;EACvC,IAAMW,WAAW,GAAGV,cAAc,CAAC,CAAC;EACpC,IAAMW,OAAO,GAAGT,OAAO,CAAC,CAAgC;EAExDN,SAAS,CACP,SAASgB,cAAcA,CAAA,EAAG;IACxB,IAAID,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACAP,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAAC;EACtD,CAAC,EACD,CAACE,QAAQ,EAAEE,OAAO,EAAEJ,OAAO,CAC7B,CAAC;EAEDX,SAAS,CACP,SAASiB,YAAYA,CAAA,EAAG;IACtB,IAAIL,KAAK,IAAI,IAAI,IAAIG,OAAO,IAAI,IAAI,EAAE;MACpC;IACF;IACAN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAAC;EAClD,CAAC,EACD,CAACC,QAAQ,EAAEE,OAAO,EAAEH,KAAK,CAC3B,CAAC;;EAED;EACA;EACAZ,SAAS,CACP,SAASkB,gBAAgBA,CAAA,EAAG;IAC1B,IAAIH,OAAO,IAAI,IAAI,EAAE;MACnB;IACF;IACA,OAAO,MAAM;MACXP,wBAAwB,CAACK,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;MACjDN,sBAAsB,CAACI,QAAQ,EAAEE,OAAO,EAAE,IAAI,CAAC;IACjD,CAAC;EACH,CAAC,EACD,CAACF,QAAQ,EAAEE,OAAO,CACpB,CAAC;EAED,IAAMI,eAAe,GAAGpB,WAAW,CAChCqB,CAAY,IAAKb,2BAA2B,CAACa,CAAC,EAAEN,WAAW,CAAC,EAC7D,CAACA,WAAW,CACd,CAAC;EAED,IAAMO,iBAAiB,GAAGhB,cAAc,CAACc,eAAe,CAAC;EAEzD,IAAMG,YAAY,GAAGrB,OAAO,CAC1B,MACEC,aAAa,CAACqB,yBAAyB,CACrCZ,OAAO;EACP;EACAU,iBAAiB,CAACG,MAAM,CACtBC,IAAA;IAAA,IAAC;MAAEC,KAAK;MAAEC;IAAgB,CAAC,GAAAF,IAAA;IAAA,OACzBC,KAAK,IAAI,IAAI,KACZC,eAAe,IAAI,IAAI,IACrBZ,OAAO,IAAI,IAAI,IAAI,CAACY,eAAe,CAACC,QAAQ,CAACb,OAAO,CAAE,CAAC;EAAA,CAC9D,CACF,CAAC,EACH,CAACJ,OAAO,EAAEI,OAAO,EAAEM,iBAAiB,CACtC,CAAC;EAED,OAAOC,YAAY;AACrB;AAEA,eAAeZ,yBAAyB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAG3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CAsF1B"}
1
+ {"version":3,"file":"useIrisGridModel.d.ts","sourceRoot":"","sources":["../src/useIrisGridModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAG3E,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACnC,6BAA6B,GAC7B,+BAA+B,GAC/B,+BAA+B,CAClC,GAAG;IACF,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,GACxB,wBAAwB,CA0F1B"}
@@ -2,7 +2,7 @@ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.
2
2
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
3
3
  import { useApi } from '@deephaven/jsapi-bootstrap';
4
4
  import { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';
5
- import { useCallback, useEffect, useState } from 'react';
5
+ import { useCallback, useEffect, useMemo, useState } from 'react';
6
6
  /** Pass in a table `fetch` function, will load the model and handle any errors */
7
7
  export function useIrisGridModel(fetch) {
8
8
  var dh = useApi();
@@ -71,26 +71,29 @@ export function useIrisGridModel(fetch) {
71
71
  model.removeEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);
72
72
  };
73
73
  }, [model]);
74
- if (isLoading) {
75
- return {
76
- reload,
77
- status: 'loading'
78
- };
79
- }
80
- if (error != null) {
81
- return {
82
- error,
83
- reload,
84
- status: 'error'
85
- };
86
- }
87
- if (model != null) {
88
- return {
89
- model,
90
- reload,
91
- status: 'success'
92
- };
93
- }
94
- throw new Error('Invalid state');
74
+ var result = useMemo(() => {
75
+ if (isLoading) {
76
+ return {
77
+ reload,
78
+ status: 'loading'
79
+ };
80
+ }
81
+ if (error != null) {
82
+ return {
83
+ error,
84
+ reload,
85
+ status: 'error'
86
+ };
87
+ }
88
+ if (model != null) {
89
+ return {
90
+ model,
91
+ reload,
92
+ status: 'success'
93
+ };
94
+ }
95
+ throw new Error('Invalid state');
96
+ }, [error, isLoading, model, reload]);
97
+ return result;
95
98
  }
96
99
  //# sourceMappingURL=useIrisGridModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useState","useIrisGridModel","fetch","dh","model","setModel","error","setError","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","reload","undefined","newModel","e","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }, [dh, fetch]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useIrisGridModel.js","names":["useApi","IrisGridModel","IrisGridModelFactory","useCallback","useEffect","useMemo","useState","useIrisGridModel","fetch","dh","model","setModel","error","setError","isLoading","setIsLoading","makeModel","_asyncToGenerator","table","reload","undefined","newModel","e","cancelled","init","_init","apply","arguments","startListeningModel","handleDisconnect","Error","addEventListener","EVENT","DISCONNECT","removeEventListener","result","status"],"sources":["../src/useIrisGridModel.ts"],"sourcesContent":["import { type dh } from '@deephaven/jsapi-types';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { IrisGridModel, IrisGridModelFactory } from '@deephaven/iris-grid';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nexport type IrisGridModelFetch = () => Promise<dh.Table>;\n\nexport type IrisGridModelFetchErrorResult = {\n error: NonNullable<unknown>;\n status: 'error';\n};\n\nexport type IrisGridModelFetchLoadingResult = {\n status: 'loading';\n};\n\nexport type IrisGridModelFetchSuccessResult = {\n status: 'success';\n model: IrisGridModel;\n};\n\nexport type IrisGridModelFetchResult = (\n | IrisGridModelFetchErrorResult\n | IrisGridModelFetchLoadingResult\n | IrisGridModelFetchSuccessResult\n) & {\n reload: () => void;\n};\n\n/** Pass in a table `fetch` function, will load the model and handle any errors */\nexport function useIrisGridModel(\n fetch: IrisGridModelFetch\n): IrisGridModelFetchResult {\n const dh = useApi();\n const [model, setModel] = useState<IrisGridModel>();\n const [error, setError] = useState<unknown>();\n const [isLoading, setIsLoading] = useState(true);\n\n const makeModel = useCallback(async () => {\n const table = await fetch();\n return IrisGridModelFactory.makeModel(dh, table);\n }, [dh, fetch]);\n\n const reload = useCallback(async () => {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n setModel(newModel);\n setIsLoading(false);\n } catch (e) {\n setError(e);\n setIsLoading(false);\n }\n }, [makeModel]);\n\n useEffect(() => {\n let cancelled = false;\n async function init() {\n setIsLoading(true);\n setError(undefined);\n try {\n const newModel = await makeModel();\n if (!cancelled) {\n setModel(newModel);\n setIsLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e);\n setIsLoading(false);\n }\n }\n }\n\n init();\n\n return () => {\n cancelled = true;\n };\n }, [makeModel]);\n\n useEffect(\n function startListeningModel() {\n if (!model) {\n return;\n }\n\n // If the table inside a widget is disconnected, then don't bother trying to listen to reconnect, just close it and show a message\n // Widget closes the table already when it is disconnected, so no need to close it again\n function handleDisconnect() {\n setError(new Error('Table disconnected'));\n setModel(undefined);\n setIsLoading(false);\n }\n\n model.addEventListener(IrisGridModel.EVENT.DISCONNECT, handleDisconnect);\n\n return () => {\n model.removeEventListener(\n IrisGridModel.EVENT.DISCONNECT,\n handleDisconnect\n );\n };\n },\n [model]\n );\n\n const result: IrisGridModelFetchResult = useMemo(() => {\n if (isLoading) {\n return { reload, status: 'loading' };\n }\n if (error != null) {\n return { error, reload, status: 'error' };\n }\n if (model != null) {\n return { model, reload, status: 'success' };\n }\n throw new Error('Invalid state');\n }, [error, isLoading, model, reload]);\n\n return result;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/dashboard-core-plugins",
3
- "version": "0.108.1-beta.1+728ad95f",
3
+ "version": "0.108.1-beta.13+1c9a8ed1",
4
4
  "description": "Deephaven Dashboard Core Plugins",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,26 +22,26 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/chart": "^0.108.1-beta.1+728ad95f",
26
- "@deephaven/components": "^0.108.1-beta.1+728ad95f",
27
- "@deephaven/console": "^0.108.1-beta.1+728ad95f",
28
- "@deephaven/dashboard": "^0.108.1-beta.1+728ad95f",
29
- "@deephaven/file-explorer": "^0.108.1-beta.1+728ad95f",
30
- "@deephaven/filters": "^0.108.1-beta.1+728ad95f",
31
- "@deephaven/golden-layout": "^0.108.1-beta.1+728ad95f",
32
- "@deephaven/grid": "^0.108.1-beta.1+728ad95f",
33
- "@deephaven/icons": "^0.108.1-beta.1+728ad95f",
34
- "@deephaven/iris-grid": "^0.108.1-beta.1+728ad95f",
35
- "@deephaven/jsapi-bootstrap": "^0.108.1-beta.1+728ad95f",
36
- "@deephaven/jsapi-components": "^0.108.1-beta.1+728ad95f",
25
+ "@deephaven/chart": "^0.108.1-beta.13+1c9a8ed1",
26
+ "@deephaven/components": "^0.108.1-beta.13+1c9a8ed1",
27
+ "@deephaven/console": "^0.108.1-beta.13+1c9a8ed1",
28
+ "@deephaven/dashboard": "^0.108.1-beta.13+1c9a8ed1",
29
+ "@deephaven/file-explorer": "^0.108.1-beta.13+1c9a8ed1",
30
+ "@deephaven/filters": "^0.108.1-beta.13+1c9a8ed1",
31
+ "@deephaven/golden-layout": "^0.108.1-beta.13+1c9a8ed1",
32
+ "@deephaven/grid": "^0.108.1-beta.13+1c9a8ed1",
33
+ "@deephaven/icons": "^0.108.1-beta.13+1c9a8ed1",
34
+ "@deephaven/iris-grid": "^0.108.1-beta.13+1c9a8ed1",
35
+ "@deephaven/jsapi-bootstrap": "^0.108.1-beta.13+1c9a8ed1",
36
+ "@deephaven/jsapi-components": "^0.108.1-beta.13+1c9a8ed1",
37
37
  "@deephaven/jsapi-types": "^1.0.0-dev0.37.2",
38
- "@deephaven/jsapi-utils": "^0.108.1-beta.1+728ad95f",
39
- "@deephaven/log": "^0.108.1-beta.1+728ad95f",
40
- "@deephaven/plugin": "^0.108.1-beta.1+728ad95f",
41
- "@deephaven/react-hooks": "^0.108.1-beta.1+728ad95f",
42
- "@deephaven/redux": "^0.108.1-beta.1+728ad95f",
43
- "@deephaven/storage": "^0.108.1-beta.1+728ad95f",
44
- "@deephaven/utils": "^0.108.1-beta.1+728ad95f",
38
+ "@deephaven/jsapi-utils": "^0.108.1-beta.13+1c9a8ed1",
39
+ "@deephaven/log": "^0.108.1-beta.13+1c9a8ed1",
40
+ "@deephaven/plugin": "^0.108.1-beta.13+1c9a8ed1",
41
+ "@deephaven/react-hooks": "^0.108.1-beta.13+1c9a8ed1",
42
+ "@deephaven/redux": "^0.108.1-beta.13+1c9a8ed1",
43
+ "@deephaven/storage": "^0.108.1-beta.13+1c9a8ed1",
44
+ "@deephaven/utils": "^0.108.1-beta.13+1c9a8ed1",
45
45
  "@fortawesome/react-fontawesome": "^0.2.0",
46
46
  "classnames": "^2.3.1",
47
47
  "fast-deep-equal": "^3.1.3",
@@ -65,9 +65,9 @@
65
65
  "react-redux": "^7.2.4"
66
66
  },
67
67
  "devDependencies": {
68
- "@deephaven/jsapi-shim": "^0.108.1-beta.1+728ad95f",
69
- "@deephaven/mocks": "^0.108.1-beta.1+728ad95f",
70
- "@deephaven/test-utils": "^0.108.1-beta.1+728ad95f"
68
+ "@deephaven/jsapi-shim": "^0.108.1-beta.13+1c9a8ed1",
69
+ "@deephaven/mocks": "^0.108.1-beta.13+1c9a8ed1",
70
+ "@deephaven/test-utils": "^0.108.1-beta.13+1c9a8ed1"
71
71
  },
72
72
  "files": [
73
73
  "dist",
@@ -79,5 +79,5 @@
79
79
  "publishConfig": {
80
80
  "access": "public"
81
81
  },
82
- "gitHead": "728ad95fe43ea966fb47632015572b5e901228d8"
82
+ "gitHead": "1c9a8ed1ebd923ffa07235b453602f9775660a6f"
83
83
  }
@@ -1,6 +0,0 @@
1
- declare const TabEvent: Readonly<{
2
- focus: "TabEvent.focus";
3
- blur: "TabEvent.blur";
4
- }>;
5
- export default TabEvent;
6
- //# sourceMappingURL=TabEvent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabEvent.d.ts","sourceRoot":"","sources":["../../src/events/TabEvent.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,QAAQ;;;EAGZ,CAAC;AAEH,eAAe,QAAQ,CAAC"}
@@ -1,6 +0,0 @@
1
- var TabEvent = Object.freeze({
2
- focus: 'TabEvent.focus',
3
- blur: 'TabEvent.blur'
4
- });
5
- export default TabEvent;
6
- //# sourceMappingURL=TabEvent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabEvent.js","names":["TabEvent","Object","freeze","focus","blur"],"sources":["../../src/events/TabEvent.ts"],"sourcesContent":["const TabEvent = Object.freeze({\n focus: 'TabEvent.focus',\n blur: 'TabEvent.blur',\n});\n\nexport default TabEvent;\n"],"mappings":"AAAA,IAAMA,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC;EAC7BC,KAAK,EAAE,gBAAgB;EACvBC,IAAI,EAAE;AACR,CAAC,CAAC;AAEF,eAAeJ,QAAQ"}
@@ -1,5 +0,0 @@
1
- .dh-panel {
2
- position: relative;
3
- }
4
-
5
- /*# sourceMappingURL=Panel.css.map */
@@ -1 +0,0 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/panels/Panel.scss"],"names":[],"mappings":"AAAA;EACE","file":"Panel.css","sourcesContent":[".dh-panel {\n position: relative;\n}"]}
@@ -1,44 +0,0 @@
1
- import { type FocusEventHandler, type ReactNode } from 'react';
2
- import { type ResolvableContextAction } from '@deephaven/components';
3
- import { type PanelComponent } from '@deephaven/dashboard';
4
- import type { Container, EventEmitter, Tab } from '@deephaven/golden-layout';
5
- import type { dh } from '@deephaven/jsapi-types';
6
- import './Panel.scss';
7
- export type CorePanelProps = {
8
- /**
9
- * Reference to the component panel.
10
- * Will wait until it is set before emitting mount/unmount events.
11
- *
12
- */
13
- componentPanel?: PanelComponent;
14
- children: ReactNode;
15
- glContainer: Container;
16
- glEventHub: EventEmitter;
17
- className?: string;
18
- onFocus?: FocusEventHandler<HTMLDivElement>;
19
- onBlur?: FocusEventHandler<HTMLDivElement>;
20
- onTab?: (tab: Tab) => void;
21
- onTabClicked?: (e: MouseEvent) => void;
22
- onClearAllFilters?: (...args: unknown[]) => void;
23
- onHide?: (...args: unknown[]) => void;
24
- onResize?: (...args: unknown[]) => void;
25
- onSessionClose?: (session: dh.IdeSession) => void;
26
- onSessionOpen?: (session: dh.IdeSession, { language, sessionId }: {
27
- language: string;
28
- sessionId: string;
29
- }) => void;
30
- onBeforeShow?: (...args: unknown[]) => void;
31
- onShow?: (...args: unknown[]) => void;
32
- onTabBlur?: (...args: unknown[]) => void;
33
- onTabFocus?: (...args: unknown[]) => void;
34
- renderTabTooltip?: () => ReactNode;
35
- additionalActions?: ResolvableContextAction[];
36
- errorMessage?: string;
37
- isLoading?: boolean;
38
- isLoaded?: boolean;
39
- isClonable?: boolean;
40
- isRenamable?: boolean;
41
- };
42
- declare const XPanel: import("@deephaven/components").XComponentType<CorePanelProps>;
43
- export default XPanel;
44
- //# sourceMappingURL=Panel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/panels/Panel.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,iBAAiB,EAGtB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAKL,KAAK,uBAAuB,EAE7B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EAEZ,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAIjD,OAAO,cAAc,CAAC;AAItB,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACxC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC;IAClD,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,EAAE,CAAC,UAAU,EACtB,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAC7D,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,SAAS,CAAC;IACnC,iBAAiB,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AA0TF,QAAA,MAAM,MAAM,gEAA0B,CAAC;AAEvC,eAAe,MAAM,CAAC"}