@deephaven/dashboard-core-plugins 1.4.1-beta.0 → 1.4.1-react19.43

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 (162) hide show
  1. package/dist/ChartBuilderPlugin.js.map +1 -1
  2. package/dist/ChartBuilderPluginConfig.js.map +1 -1
  3. package/dist/ChartPanelPlugin.js +1 -1
  4. package/dist/ChartPanelPlugin.js.map +1 -1
  5. package/dist/ChartPluginConfig.js.map +1 -1
  6. package/dist/ChartWidgetPlugin.js.map +1 -1
  7. package/dist/ConsolePlugin.d.ts.map +1 -1
  8. package/dist/ConsolePlugin.js +12 -2
  9. package/dist/ConsolePlugin.js.map +1 -1
  10. package/dist/FilterEvents.js.map +1 -1
  11. package/dist/FilterPlugin.js +2 -2
  12. package/dist/FilterPlugin.js.map +1 -1
  13. package/dist/FilterPluginConfig.js.map +1 -1
  14. package/dist/GridPanelPlugin.js.map +1 -1
  15. package/dist/GridPluginConfig.js.map +1 -1
  16. package/dist/GridWidgetPlugin.d.ts.map +1 -1
  17. package/dist/GridWidgetPlugin.js +3 -1
  18. package/dist/GridWidgetPlugin.js.map +1 -1
  19. package/dist/LinkerPlugin.js.map +1 -1
  20. package/dist/LinkerPluginConfig.js.map +1 -1
  21. package/dist/MarkdownPlugin.js +1 -1
  22. package/dist/MarkdownPlugin.js.map +1 -1
  23. package/dist/MarkdownPluginConfig.js.map +1 -1
  24. package/dist/PandasPanelPlugin.js.map +1 -1
  25. package/dist/PandasPluginConfig.js.map +1 -1
  26. package/dist/PandasWidgetPlugin.d.ts.map +1 -1
  27. package/dist/PandasWidgetPlugin.js +4 -2
  28. package/dist/PandasWidgetPlugin.js.map +1 -1
  29. package/dist/TablePluginWrapper.js.map +1 -1
  30. package/dist/WidgetLoaderPlugin.js.map +1 -1
  31. package/dist/WidgetLoaderPluginConfig.js.map +1 -1
  32. package/dist/controls/ControlType.js.map +1 -1
  33. package/dist/controls/dropdown-filter/DropdownFilter.d.ts +1 -1
  34. package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -1
  35. package/dist/controls/dropdown-filter/DropdownFilter.js +4 -6
  36. package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
  37. package/dist/controls/input-filter/InputFilter.js +1 -2
  38. package/dist/controls/input-filter/InputFilter.js.map +1 -1
  39. package/dist/controls/markdown/MarkdownContainer.js +1 -2
  40. package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
  41. package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
  42. package/dist/controls/markdown/MarkdownStartPage.js +1 -2
  43. package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
  44. package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
  45. package/dist/events/ChartEvent.js +2 -0
  46. package/dist/events/ChartEvent.js.map +1 -1
  47. package/dist/events/ConsoleEvent.js.map +1 -1
  48. package/dist/events/InputFilterEvent.js +8 -0
  49. package/dist/events/InputFilterEvent.js.map +1 -1
  50. package/dist/events/IrisGridEvent.js +2 -0
  51. package/dist/events/IrisGridEvent.js.map +1 -1
  52. package/dist/events/MarkdownEvent.js.map +1 -1
  53. package/dist/events/NotebookEvent.js.map +1 -1
  54. package/dist/events/PQEvent.js.map +1 -1
  55. package/dist/events/PandasEvent.js +2 -0
  56. package/dist/events/PandasEvent.js.map +1 -1
  57. package/dist/events/TabEventMap.js.map +1 -1
  58. package/dist/events/index.js.map +1 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/linker/ColumnSelectionValidator.js.map +1 -1
  61. package/dist/linker/Linker.js +2 -2
  62. package/dist/linker/Linker.js.map +1 -1
  63. package/dist/linker/LinkerEvent.js.map +1 -1
  64. package/dist/linker/LinkerLink.js +1 -3
  65. package/dist/linker/LinkerLink.js.map +1 -1
  66. package/dist/linker/LinkerOverlayContent.js +1 -2
  67. package/dist/linker/LinkerOverlayContent.js.map +1 -1
  68. package/dist/linker/LinkerUtils.js.map +1 -1
  69. package/dist/linker/ToolType.js.map +1 -1
  70. package/dist/linker/index.js.map +1 -1
  71. package/dist/panels/ChartColumnSelectorOverlay.d.ts +0 -4
  72. package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -1
  73. package/dist/panels/ChartColumnSelectorOverlay.js +2 -7
  74. package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
  75. package/dist/panels/ChartFilterOverlay.d.ts +0 -12
  76. package/dist/panels/ChartFilterOverlay.d.ts.map +1 -1
  77. package/dist/panels/ChartFilterOverlay.js +1 -13
  78. package/dist/panels/ChartFilterOverlay.js.map +1 -1
  79. package/dist/panels/ChartPanel.d.ts +10 -10
  80. package/dist/panels/ChartPanel.d.ts.map +1 -1
  81. package/dist/panels/ChartPanel.js +2 -4
  82. package/dist/panels/ChartPanel.js.map +1 -1
  83. package/dist/panels/ChartPanelUtils.js.map +1 -1
  84. package/dist/panels/CommandHistoryPanel.js +2 -4
  85. package/dist/panels/CommandHistoryPanel.js.map +1 -1
  86. package/dist/panels/ConsolePanel.d.ts +2 -1
  87. package/dist/panels/ConsolePanel.d.ts.map +1 -1
  88. package/dist/panels/ConsolePanel.js +13 -12
  89. package/dist/panels/ConsolePanel.js.map +1 -1
  90. package/dist/panels/CorePanel.js +3 -3
  91. package/dist/panels/CorePanel.js.map +1 -1
  92. package/dist/panels/DropdownFilterPanel.d.ts +2 -8
  93. package/dist/panels/DropdownFilterPanel.d.ts.map +1 -1
  94. package/dist/panels/DropdownFilterPanel.js +6 -6
  95. package/dist/panels/DropdownFilterPanel.js.map +1 -1
  96. package/dist/panels/FileExplorerPanel.d.ts +1 -7
  97. package/dist/panels/FileExplorerPanel.d.ts.map +1 -1
  98. package/dist/panels/FileExplorerPanel.js +1 -2
  99. package/dist/panels/FileExplorerPanel.js.map +1 -1
  100. package/dist/panels/FilterSetManager.js +12 -13
  101. package/dist/panels/FilterSetManager.js.map +1 -1
  102. package/dist/panels/FilterSetManagerPanel.d.ts +3 -3
  103. package/dist/panels/FilterSetManagerPanel.js +4 -4
  104. package/dist/panels/FilterSetManagerPanel.js.map +1 -1
  105. package/dist/panels/InputFilterPanel.d.ts +3 -3
  106. package/dist/panels/InputFilterPanel.js +4 -5
  107. package/dist/panels/InputFilterPanel.js.map +1 -1
  108. package/dist/panels/IrisGridPanel.d.ts +6 -5
  109. package/dist/panels/IrisGridPanel.d.ts.map +1 -1
  110. package/dist/panels/IrisGridPanel.js +19 -13
  111. package/dist/panels/IrisGridPanel.js.map +1 -1
  112. package/dist/panels/IrisGridPanelTooltip.js +1 -2
  113. package/dist/panels/IrisGridPanelTooltip.js.map +1 -1
  114. package/dist/panels/IrisGridPanelTypes.js.map +1 -1
  115. package/dist/panels/LogPanel.d.ts +3 -3
  116. package/dist/panels/LogPanel.d.ts.map +1 -1
  117. package/dist/panels/LogPanel.js +1 -3
  118. package/dist/panels/LogPanel.js.map +1 -1
  119. package/dist/panels/MarkdownNotebook.js +3 -4
  120. package/dist/panels/MarkdownNotebook.js.map +1 -1
  121. package/dist/panels/MarkdownPanel.d.ts +3 -3
  122. package/dist/panels/MarkdownPanel.d.ts.map +1 -1
  123. package/dist/panels/MarkdownPanel.js +3 -1
  124. package/dist/panels/MarkdownPanel.js.map +1 -1
  125. package/dist/panels/MockFileStorage.js.map +1 -1
  126. package/dist/panels/MockFileStorageTable.js +1 -1
  127. package/dist/panels/MockFileStorageTable.js.map +1 -1
  128. package/dist/panels/NotebookPanel.d.ts +7 -9
  129. package/dist/panels/NotebookPanel.d.ts.map +1 -1
  130. package/dist/panels/NotebookPanel.js +11 -11
  131. package/dist/panels/NotebookPanel.js.map +1 -1
  132. package/dist/panels/PandasPanel.d.ts +11 -3
  133. package/dist/panels/PandasPanel.d.ts.map +1 -1
  134. package/dist/panels/PandasPanel.js +62 -6
  135. package/dist/panels/PandasPanel.js.map +1 -1
  136. package/dist/panels/PandasReloadButton.js +2 -3
  137. package/dist/panels/PandasReloadButton.js.map +1 -1
  138. package/dist/panels/WidgetPanel.js +2 -3
  139. package/dist/panels/WidgetPanel.js.map +1 -1
  140. package/dist/panels/WidgetPanelTooltip.js +1 -3
  141. package/dist/panels/WidgetPanelTooltip.js.map +1 -1
  142. package/dist/panels/WidgetPanelTypes.js.map +1 -1
  143. package/dist/panels/index.js.map +1 -1
  144. package/dist/prop-types/CommonPropTypes.js.map +1 -1
  145. package/dist/prop-types/UIPropTypes.js.map +1 -1
  146. package/dist/prop-types/index.js.map +1 -1
  147. package/dist/redux/actions.js.map +1 -1
  148. package/dist/redux/index.js.map +1 -1
  149. package/dist/redux/selectors.js.map +1 -1
  150. package/dist/useChartLinker.js.map +1 -1
  151. package/dist/useConfigureRuff.js.map +1 -1
  152. package/dist/useDashboardColumnFilters.js.map +1 -1
  153. package/dist/useGridLinker.js.map +1 -1
  154. package/dist/useHydrateGrid.js.map +1 -1
  155. package/dist/useIrisGridModel.js +2 -2
  156. package/dist/useIrisGridModel.js.map +1 -1
  157. package/dist/useLoadTablePlugin.js.map +1 -1
  158. package/dist/useTablePlugin.d.ts +1 -1
  159. package/dist/useTablePlugin.d.ts.map +1 -1
  160. package/dist/useTablePlugin.js +2 -2
  161. package/dist/useTablePlugin.js.map +1 -1
  162. package/package.json +24 -24
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerEvent.js","names":["makeEventFunctions","LinkerEvent","Object","freeze","LINK_POINT_SELECTED","SOURCE_DATA_SELECTED","REGISTER_TARGET","linkPointSelectedFns","listenForLinkPointSelected","listen","emitLinkPointSelected","emit","useLinkPointSelectedListener","useListener","linkSourceDataSelectedFns","listenForLinkSourceDataSelected","emitLinkSourceDataSelected","useLinkSourceDataSelectedListener","registerLinkTargetFns","listenForRegisterLinkTarget","emitRegisterLinkTarget","useRegisterLinkTargetListener"],"sources":["../../src/linker/LinkerEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\nimport { type RowDataMap } from '@deephaven/jsapi-utils';\nimport {\n type LinkPointOptions,\n type LinkColumn,\n type LinkFilterMap,\n} from './LinkerUtils';\n\nexport const LinkerEvent = Object.freeze({\n LINK_POINT_SELECTED: 'LinkerEvent.LINK_POINT_SELECTED',\n SOURCE_DATA_SELECTED: 'LinkerEvent.SOURCE_DATA_SELECTED',\n REGISTER_TARGET: 'LinkerEvent.REGISTER_TARGET',\n});\n\nconst linkPointSelectedFns = makeEventFunctions<\n [sourceId: string, column: LinkColumn, options: LinkPointOptions]\n>(LinkerEvent.LINK_POINT_SELECTED);\nexport const listenForLinkPointSelected = linkPointSelectedFns.listen;\n\n/**\n * Emit a linker point selected event\n * @param sourceId The source ID for the link point. Typically panel ID or widget ID\n * @param column The column selected as the link point\n * @param options Optional parameters for the link point selection\n * @param options.isAlwaysEnd Whether this link point is always the end of a link\n * @param options.isIsolatedLinker Whether this link point is selected in an isolated linker context\n */\nexport const emitLinkPointSelected = linkPointSelectedFns.emit;\nexport const useLinkPointSelectedListener = linkPointSelectedFns.useListener;\n\nconst linkSourceDataSelectedFns = makeEventFunctions<\n [sourceId: string, data: RowDataMap]\n>(LinkerEvent.SOURCE_DATA_SELECTED);\nexport const listenForLinkSourceDataSelected = linkSourceDataSelectedFns.listen;\nexport const emitLinkSourceDataSelected = linkSourceDataSelectedFns.emit;\nexport const useLinkSourceDataSelectedListener =\n linkSourceDataSelectedFns.useListener;\n\nexport type LinkTargetProps = {\n /**\n * Gets the coordinates for displaying a link point in the target.\n * Coordinates are relative to the window, not the panel.\n * @param columnName The column name to get coordinates for\n * @returns The coordinates for the column, or null if column not visible\n * @throws Error if the column is not valid for this target\n */\n getCoordinates: (columnName: string) => [number, number] | null;\n\n /**\n * Called when a link source value is selected.\n * Only includes the values from the current event, not previously set links.\n * @param filterMap The filter map to set for the target. May include multiple columns.\n */\n setFilterValues: (filterMap: LinkFilterMap) => void;\n\n /**\n * Called when a link is deleted or a filter value is unset.\n * @param columnName The column name to unset the filter value for.\n * @param type The column type of the filter to unset.\n */\n unsetFilterValue: (columnName: string, type: string | null) => void;\n\n /**\n * The ID of the golden layout panel the target is in.\n * May be the same as the sourceId if the target is a panel component.\n */\n panelId: string;\n};\n\nconst registerLinkTargetFns = makeEventFunctions<\n [sourceId: string, props: LinkTargetProps | null]\n>(LinkerEvent.REGISTER_TARGET);\n\nexport const listenForRegisterLinkTarget = registerLinkTargetFns.listen;\nexport const emitRegisterLinkTarget = registerLinkTargetFns.emit;\nexport const useRegisterLinkTargetListener = registerLinkTargetFns.useListener;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAQ7D,OAAO,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,mBAAmB,EAAE,iCAAiC;EACtDC,oBAAoB,EAAE,kCAAkC;EACxDC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEF,IAAMC,oBAAoB,GAAGP,kBAAkB,CAE7CC,WAAW,CAACG,mBAAmB,CAAC;AAClC,OAAO,IAAMI,0BAA0B,GAAGD,oBAAoB,CAACE,MAAM;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,qBAAqB,GAAGH,oBAAoB,CAACI,IAAI;AAC9D,OAAO,IAAMC,4BAA4B,GAAGL,oBAAoB,CAACM,WAAW;AAE5E,IAAMC,yBAAyB,GAAGd,kBAAkB,CAElDC,WAAW,CAACI,oBAAoB,CAAC;AACnC,OAAO,IAAMU,+BAA+B,GAAGD,yBAAyB,CAACL,MAAM;AAC/E,OAAO,IAAMO,0BAA0B,GAAGF,yBAAyB,CAACH,IAAI;AACxE,OAAO,IAAMM,iCAAiC,GAC5CH,yBAAyB,CAACD,WAAW;AAiCvC,IAAMK,qBAAqB,GAAGlB,kBAAkB,CAE9CC,WAAW,CAACK,eAAe,CAAC;AAE9B,OAAO,IAAMa,2BAA2B,GAAGD,qBAAqB,CAACT,MAAM;AACvE,OAAO,IAAMW,sBAAsB,GAAGF,qBAAqB,CAACP,IAAI;AAChE,OAAO,IAAMU,6BAA6B,GAAGH,qBAAqB,CAACL,WAAW"}
1
+ {"version":3,"file":"LinkerEvent.js","names":["makeEventFunctions","LinkerEvent","Object","freeze","LINK_POINT_SELECTED","SOURCE_DATA_SELECTED","REGISTER_TARGET","linkPointSelectedFns","listenForLinkPointSelected","listen","emitLinkPointSelected","emit","useLinkPointSelectedListener","useListener","linkSourceDataSelectedFns","listenForLinkSourceDataSelected","emitLinkSourceDataSelected","useLinkSourceDataSelectedListener","registerLinkTargetFns","listenForRegisterLinkTarget","emitRegisterLinkTarget","useRegisterLinkTargetListener"],"sources":["../../src/linker/LinkerEvent.ts"],"sourcesContent":["import { makeEventFunctions } from '@deephaven/golden-layout';\nimport { type RowDataMap } from '@deephaven/jsapi-utils';\nimport {\n type LinkPointOptions,\n type LinkColumn,\n type LinkFilterMap,\n} from './LinkerUtils';\n\nexport const LinkerEvent = Object.freeze({\n LINK_POINT_SELECTED: 'LinkerEvent.LINK_POINT_SELECTED',\n SOURCE_DATA_SELECTED: 'LinkerEvent.SOURCE_DATA_SELECTED',\n REGISTER_TARGET: 'LinkerEvent.REGISTER_TARGET',\n});\n\nconst linkPointSelectedFns = makeEventFunctions<\n [sourceId: string, column: LinkColumn, options: LinkPointOptions]\n>(LinkerEvent.LINK_POINT_SELECTED);\nexport const listenForLinkPointSelected = linkPointSelectedFns.listen;\n\n/**\n * Emit a linker point selected event\n * @param sourceId The source ID for the link point. Typically panel ID or widget ID\n * @param column The column selected as the link point\n * @param options Optional parameters for the link point selection\n * @param options.isAlwaysEnd Whether this link point is always the end of a link\n * @param options.isIsolatedLinker Whether this link point is selected in an isolated linker context\n */\nexport const emitLinkPointSelected = linkPointSelectedFns.emit;\nexport const useLinkPointSelectedListener = linkPointSelectedFns.useListener;\n\nconst linkSourceDataSelectedFns = makeEventFunctions<\n [sourceId: string, data: RowDataMap]\n>(LinkerEvent.SOURCE_DATA_SELECTED);\nexport const listenForLinkSourceDataSelected = linkSourceDataSelectedFns.listen;\nexport const emitLinkSourceDataSelected = linkSourceDataSelectedFns.emit;\nexport const useLinkSourceDataSelectedListener =\n linkSourceDataSelectedFns.useListener;\n\nexport type LinkTargetProps = {\n /**\n * Gets the coordinates for displaying a link point in the target.\n * Coordinates are relative to the window, not the panel.\n * @param columnName The column name to get coordinates for\n * @returns The coordinates for the column, or null if column not visible\n * @throws Error if the column is not valid for this target\n */\n getCoordinates: (columnName: string) => [number, number] | null;\n\n /**\n * Called when a link source value is selected.\n * Only includes the values from the current event, not previously set links.\n * @param filterMap The filter map to set for the target. May include multiple columns.\n */\n setFilterValues: (filterMap: LinkFilterMap) => void;\n\n /**\n * Called when a link is deleted or a filter value is unset.\n * @param columnName The column name to unset the filter value for.\n * @param type The column type of the filter to unset.\n */\n unsetFilterValue: (columnName: string, type: string | null) => void;\n\n /**\n * The ID of the golden layout panel the target is in.\n * May be the same as the sourceId if the target is a panel component.\n */\n panelId: string;\n};\n\nconst registerLinkTargetFns = makeEventFunctions<\n [sourceId: string, props: LinkTargetProps | null]\n>(LinkerEvent.REGISTER_TARGET);\n\nexport const listenForRegisterLinkTarget = registerLinkTargetFns.listen;\nexport const emitRegisterLinkTarget = registerLinkTargetFns.emit;\nexport const useRegisterLinkTargetListener = registerLinkTargetFns.useListener;\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAQ7D,OAAO,IAAMC,WAAW,GAAGC,MAAM,CAACC,MAAM,CAAC;EACvCC,mBAAmB,EAAE,iCAAiC;EACtDC,oBAAoB,EAAE,kCAAkC;EACxDC,eAAe,EAAE;AACnB,CAAC,CAAC;AAEF,IAAMC,oBAAoB,GAAGP,kBAAkB,CAE7CC,WAAW,CAACG,mBAAmB,CAAC;AAClC,OAAO,IAAMI,0BAA0B,GAAGD,oBAAoB,CAACE,MAAM;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,qBAAqB,GAAGH,oBAAoB,CAACI,IAAI;AAC9D,OAAO,IAAMC,4BAA4B,GAAGL,oBAAoB,CAACM,WAAW;AAE5E,IAAMC,yBAAyB,GAAGd,kBAAkB,CAElDC,WAAW,CAACI,oBAAoB,CAAC;AACnC,OAAO,IAAMU,+BAA+B,GAAGD,yBAAyB,CAACL,MAAM;AAC/E,OAAO,IAAMO,0BAA0B,GAAGF,yBAAyB,CAACH,IAAI;AACxE,OAAO,IAAMM,iCAAiC,GAC5CH,yBAAyB,CAACD,WAAW;AAiCvC,IAAMK,qBAAqB,GAAGlB,kBAAkB,CAE9CC,WAAW,CAACK,eAAe,CAAC;AAE9B,OAAO,IAAMa,2BAA2B,GAAGD,qBAAqB,CAACT,MAAM;AACvE,OAAO,IAAMW,sBAAsB,GAAGF,qBAAqB,CAACP,IAAI;AAChE,OAAO,IAAMU,6BAA6B,GAAGH,qBAAqB,CAACL,WAAW","ignoreList":[]}
@@ -11,9 +11,7 @@ import { Type as FilterType, getLabelForNumberFilter, getLabelForTextFilter, get
11
11
  import Log from '@deephaven/log';
12
12
  import { TableUtils } from '@deephaven/jsapi-utils';
13
13
  import "./LinkerLink.css";
14
- import { jsx as _jsx } from "react/jsx-runtime";
15
- import { jsxs as _jsxs } from "react/jsx-runtime";
16
- import { Fragment as _Fragment } from "react/jsx-runtime";
14
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
17
15
  var log = Log.module('LinkerLink');
18
16
 
19
17
  /** The constant for how droopy the links are. Increase for more droopiness. */
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerLink.js","names":["React","Component","memoize","classNames","Button","DropdownMenu","vsTrash","vsTriangleDown","FontAwesomeIcon","Type","FilterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","Log","TableUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","HALF_PI","PI","LinkerLink","makeCirclePath","x","y","r","concat","getLabelForLinkFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","eq","notEq","Error","e","warn","constructor","props","_defineProperty","linkId","onOperatorChanged","filterTypes","getFilterTypes","flatMap","type","index","symbol","getFilterOperatorString","title","icon","children","action","order","handleClick","bind","handleMouseEnter","handleMouseLeave","handleDelete","getDropdownActions","state","isHovering","undefined","event","stopPropagation","preventDefault","id","onClick","onDelete","altKey","setState","startColumnType","getOperators","render","className","operator","isSelected","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","Number","isFinite","abs","showOperator","hovering","d","clipRule","onMouseEnter","onMouseLeave","clipPath","cx","cy","kind","style","top","left","transform","tooltip","actions","popperOptions","placement"],"sources":["../../src/linker/LinkerLink.tsx"],"sourcesContent":["import React, { Component, type MouseEvent } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport {\n Button,\n type DropdownAction,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Type as FilterType,\n type TypeValue as FilterTypeValue,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n getLabelForDateFilter,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './LinkerLink.scss';\nimport { type LinkType } from './LinkerUtils';\n\nconst log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nconst DROOP = 0.015;\nconst DROOP_EXPONENT = 1.5;\nconst TRIANGLE_HEIGHT = 12;\nconst TRIANGLE_BASE = 12;\nconst TRIANGLE_TIP = 2;\nconst TRIANGLE_HYPOTENUSE = Math.sqrt(\n (TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2\n);\nconst TRIANGLE_THETA = Math.asin((TRIANGLE_BASE * 0.5) / TRIANGLE_HEIGHT);\nconst CLIP_RADIUS = 15;\nconst HALF_PI = Math.PI * 0.5;\n\nexport type LinkerLinkProps = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n isSelected: boolean;\n startColumnType: string | null;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n onOperatorChanged: (id: string, type: FilterTypeValue) => void;\n};\n\nexport type LinkerLinkState = {\n isHovering?: boolean;\n};\n\nexport class LinkerLink extends Component<LinkerLinkProps, LinkerLinkState> {\n static defaultProps = {\n className: '',\n isSelected: false,\n onClick(): void {\n // no-op\n },\n onDelete(): void {\n // no-op\n },\n };\n\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x: number, y: number, r: number): string {\n return `M ${x} ${y} m -${r},0 a ${r},${r} 0 1,0 ${\n r * 2\n },0 a ${r},${r} 0 1,0 -${r * 2},0 z`;\n }\n\n static getLabelForLinkFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n\n this.state = {\n isHovering: undefined,\n };\n }\n\n getOperators = memoize(\n (linkId: string, columnType: string): DropdownAction[] => {\n const { onOperatorChanged } = this.props;\n let filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === `notEqIgnoreCase`) {\n return [];\n }\n let symbol = '';\n\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n\n return [\n {\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: <b>{symbol}</b>,\n action: () => onOperatorChanged(linkId, type),\n order: index,\n },\n ];\n });\n }\n );\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick, onDelete } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n\n handleMouseEnter(): void {\n this.setState({\n isHovering: true,\n });\n }\n\n handleMouseLeave(): void {\n this.setState({\n isHovering: false,\n });\n }\n\n handleDelete(): void {\n const { id, onDelete } = this.props;\n onDelete(id);\n }\n\n getDropdownActions(): DropdownAction[] {\n const { id, startColumnType } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n\n render(): JSX.Element {\n const {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type,\n } = this.props;\n const { isHovering } = this.state;\n\n // Path between the two points\n const len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n const theta = Math.atan2(y2 - y1, x2 - x1);\n const xMult = Math.sin(theta);\n const yMult = Math.cos(theta) + 2;\n const maxX = window.innerWidth;\n const maxY = window.innerHeight;\n const minX = 0;\n const minY = 0;\n const qx = Math.max(\n minX,\n Math.min(\n x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT,\n maxX\n )\n );\n const qy = Math.max(\n minY,\n Math.min(\n y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT,\n maxY\n )\n );\n const path = `M ${x1} ${y1} Q ${qx} ${qy} ${x2} ${y2}`;\n\n // path for a 100%, 100% rect, then two paths for circles at point\n const selectClipPath = `M ${minX} ${minY} L ${minX} ${maxY} L ${maxX} ${maxY} L ${maxX} ${minY} z\n ${LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS)}\n ${LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS)}`;\n const clipPathId = `link-select-clip-${id}`;\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n const endTheta = Math.atan2(y2 - qy, x2 - qx);\n const t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n const t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n const tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n const ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n const tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n const ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n const tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n const ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n const points = `${tx1},${ty1} ${tx2},${ty2} ${tx3},${ty3}`;\n\n // Button offset calculations\n const midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n const midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n const dMidX = qx - x1 + (x2 - qx);\n const dMidY = qy - y1 + (y2 - qy);\n const slopeAtMid = dMidY / dMidX;\n const DISTANCE_FROM_MID = 20;\n let topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n let topOffsetY = topOffsetX * slopeAtMid;\n let bottomOffsetX = topOffsetX * -1;\n let bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n\n let symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n\n const showOperator = type !== 'chartLink' && type !== 'filterSource';\n\n return (\n <>\n <svg\n className={classNames(className, {\n hovering: isHovering,\n })}\n >\n <clipPath id={clipPathId}>\n <path d={selectClipPath} clipRule=\"evenodd\" />\n </clipPath>\n <path\n className=\"link-select\"\n d={path}\n onClick={this.handleClick}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n clipPath={`url(#${clipPathId})`}\n data-testid=\"link-select\"\n />\n <path className=\"link-background\" d={path} />\n <path className=\"link-foreground\" d={path} />\n <circle className=\"link-dot\" cx={x1} cy={y1} r=\"5\" />\n <polygon className=\"link-triangle\" points={points} />\n </svg>\n {startColumnType != null && isSelected && (\n <>\n {showOperator && (\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-operator\"\n style={{\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n icon={\n <div className=\"fa-md fa-layers\">\n <b>{symbol}</b>\n <FontAwesomeIcon\n icon={vsTriangleDown}\n transform=\"right-8 down-9 shrink-5\"\n />\n </div>\n }\n tooltip=\"Change comparison operator\"\n >\n <DropdownMenu\n actions={this.getDropdownActions}\n popperOptions={{ placement: 'bottom-start' }}\n />\n </Button>\n )}\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-delete\"\n style={{\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </>\n )}\n </>\n );\n }\n}\n\nexport default LinkerLink;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkerLink.js","names":["React","Component","memoize","classNames","Button","DropdownMenu","vsTrash","vsTriangleDown","FontAwesomeIcon","Type","FilterType","getLabelForNumberFilter","getLabelForTextFilter","getLabelForDateFilter","Log","TableUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","HALF_PI","PI","LinkerLink","makeCirclePath","x","y","r","concat","getLabelForLinkFilter","columnType","filterType","isNumberType","isCharType","isTextType","isDateType","isBooleanType","eq","notEq","Error","e","warn","constructor","props","_defineProperty","linkId","onOperatorChanged","filterTypes","getFilterTypes","flatMap","type","index","symbol","getFilterOperatorString","title","icon","children","action","order","handleClick","bind","handleMouseEnter","handleMouseLeave","handleDelete","getDropdownActions","state","isHovering","undefined","event","stopPropagation","preventDefault","id","onClick","onDelete","altKey","setState","startColumnType","getOperators","render","className","operator","isSelected","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","clipPathId","endTheta","t2theta","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points","midX","midY","dMidX","dMidY","slopeAtMid","DISTANCE_FROM_MID","topOffsetX","topOffsetY","bottomOffsetX","bottomOffsetY","Number","isFinite","abs","showOperator","hovering","d","clipRule","onMouseEnter","onMouseLeave","clipPath","cx","cy","kind","style","top","left","transform","tooltip","actions","popperOptions","placement"],"sources":["../../src/linker/LinkerLink.tsx"],"sourcesContent":["import React, { Component, type MouseEvent } from 'react';\nimport memoize from 'memoize-one';\nimport classNames from 'classnames';\nimport {\n Button,\n type DropdownAction,\n DropdownMenu,\n} from '@deephaven/components';\nimport { vsTrash, vsTriangleDown } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n Type as FilterType,\n type TypeValue as FilterTypeValue,\n getLabelForNumberFilter,\n getLabelForTextFilter,\n getLabelForDateFilter,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport './LinkerLink.scss';\nimport { type LinkType } from './LinkerUtils';\n\nconst log = Log.module('LinkerLink');\n\n/** The constant for how droopy the links are. Increase for more droopiness. */\nconst DROOP = 0.015;\nconst DROOP_EXPONENT = 1.5;\nconst TRIANGLE_HEIGHT = 12;\nconst TRIANGLE_BASE = 12;\nconst TRIANGLE_TIP = 2;\nconst TRIANGLE_HYPOTENUSE = Math.sqrt(\n (TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2\n);\nconst TRIANGLE_THETA = Math.asin((TRIANGLE_BASE * 0.5) / TRIANGLE_HEIGHT);\nconst CLIP_RADIUS = 15;\nconst HALF_PI = Math.PI * 0.5;\n\nexport type LinkerLinkProps = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n isSelected: boolean;\n startColumnType: string | null;\n onClick: (id: string) => void;\n onDelete: (id: string) => void;\n onOperatorChanged: (id: string, type: FilterTypeValue) => void;\n};\n\nexport type LinkerLinkState = {\n isHovering?: boolean;\n};\n\nexport class LinkerLink extends Component<LinkerLinkProps, LinkerLinkState> {\n static defaultProps = {\n className: '',\n isSelected: false,\n onClick(): void {\n // no-op\n },\n onDelete(): void {\n // no-op\n },\n };\n\n /**\n * Make an SVG path for a circle at the specified coordinates.\n * @param x The x coordinate for the centre of the circle\n * @param y The y coordinate for the centre of the circle\n * @param r Radius of the circle\n * @returns The SVG string path\n */\n static makeCirclePath(x: number, y: number, r: number): string {\n return `M ${x} ${y} m -${r},0 a ${r},${r} 0 1,0 ${\n r * 2\n },0 a ${r},${r} 0 1,0 -${r * 2},0 z`;\n }\n\n static getLabelForLinkFilter(\n columnType: string,\n filterType: FilterTypeValue\n ): string {\n try {\n if (\n TableUtils.isNumberType(columnType) ||\n TableUtils.isCharType(columnType)\n ) {\n return getLabelForNumberFilter(filterType);\n }\n if (TableUtils.isTextType(columnType)) {\n return getLabelForTextFilter(filterType);\n }\n if (TableUtils.isDateType(columnType)) {\n return getLabelForDateFilter(filterType);\n }\n if (TableUtils.isBooleanType(columnType)) {\n if (filterType === FilterType.eq) {\n return 'is equal to';\n }\n if (filterType === FilterType.notEq) {\n return 'is not equal to';\n }\n }\n throw new Error(`Unrecognized column type: ${columnType}`);\n } catch (e) {\n log.warn(e);\n return '';\n }\n }\n\n constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleDelete = this.handleDelete.bind(this);\n this.getDropdownActions = this.getDropdownActions.bind(this);\n\n this.state = {\n isHovering: undefined,\n };\n }\n\n getOperators = memoize(\n (linkId: string, columnType: string): DropdownAction[] => {\n const { onOperatorChanged } = this.props;\n let filterTypes = TableUtils.getFilterTypes(columnType);\n if (TableUtils.isBooleanType(columnType)) {\n filterTypes = [FilterType.eq, FilterType.notEq];\n }\n return filterTypes.flatMap((type, index) => {\n // Remove case-insensitive string comparisons\n if (type === 'eqIgnoreCase' || type === `notEqIgnoreCase`) {\n return [];\n }\n let symbol = '';\n\n if (type === 'startsWith') {\n symbol = 'a*';\n } else if (type === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(type);\n }\n\n return [\n {\n title: LinkerLink.getLabelForLinkFilter(columnType, type),\n icon: <b>{symbol}</b>,\n action: () => onOperatorChanged(linkId, type),\n order: index,\n },\n ];\n });\n }\n );\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick, onDelete } = this.props;\n if (event.altKey) {\n onDelete(id);\n } else {\n onClick(id);\n }\n }\n\n handleMouseEnter(): void {\n this.setState({\n isHovering: true,\n });\n }\n\n handleMouseLeave(): void {\n this.setState({\n isHovering: false,\n });\n }\n\n handleDelete(): void {\n const { id, onDelete } = this.props;\n onDelete(id);\n }\n\n getDropdownActions(): DropdownAction[] {\n const { id, startColumnType } = this.props;\n if (startColumnType != null) {\n return this.getOperators(id, startColumnType);\n }\n return [];\n }\n\n render(): JSX.Element {\n const {\n className,\n operator,\n isSelected,\n x1,\n y1,\n x2,\n y2,\n id,\n startColumnType,\n type,\n } = this.props;\n const { isHovering } = this.state;\n\n // Path between the two points\n const len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);\n const theta = Math.atan2(y2 - y1, x2 - x1);\n const xMult = Math.sin(theta);\n const yMult = Math.cos(theta) + 2;\n const maxX = window.innerWidth;\n const maxY = window.innerHeight;\n const minX = 0;\n const minY = 0;\n const qx = Math.max(\n minX,\n Math.min(\n x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT,\n maxX\n )\n );\n const qy = Math.max(\n minY,\n Math.min(\n y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT,\n maxY\n )\n );\n const path = `M ${x1} ${y1} Q ${qx} ${qy} ${x2} ${y2}`;\n\n // path for a 100%, 100% rect, then two paths for circles at point\n const selectClipPath = `M ${minX} ${minY} L ${minX} ${maxY} L ${maxX} ${maxY} L ${maxX} ${minY} z\n ${LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS)}\n ${LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS)}`;\n const clipPathId = `link-select-clip-${id}`;\n\n // Calculate location of the end triangle\n // We draw it instead of using markers to allow for transitions in the style\n const endTheta = Math.atan2(y2 - qy, x2 - qx);\n const t2theta = endTheta - TRIANGLE_THETA + Math.PI;\n const t3theta = endTheta + TRIANGLE_THETA + Math.PI;\n const tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;\n const ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;\n const tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;\n const ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;\n const tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;\n const ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;\n const points = `${tx1},${ty1} ${tx2},${ty2} ${tx3},${ty3}`;\n\n // Button offset calculations\n const midX = 0.25 * x1 + 0.5 * qx + 0.25 * x2;\n const midY = 0.25 * y1 + 0.5 * qy + 0.25 * y2;\n const dMidX = qx - x1 + (x2 - qx);\n const dMidY = qy - y1 + (y2 - qy);\n const slopeAtMid = dMidY / dMidX;\n const DISTANCE_FROM_MID = 20;\n let topOffsetX = DISTANCE_FROM_MID / Math.sqrt(1 + slopeAtMid ** 2);\n let topOffsetY = topOffsetX * slopeAtMid;\n let bottomOffsetX = topOffsetX * -1;\n let bottomOffsetY = topOffsetY * -1;\n if (!Number.isFinite(slopeAtMid)) {\n bottomOffsetX = 10;\n bottomOffsetY = 5;\n topOffsetX = 10;\n topOffsetY = -35;\n } else if (slopeAtMid > 0) {\n topOffsetX *= -1;\n topOffsetY *= -1;\n bottomOffsetX *= -1;\n bottomOffsetY *= -1;\n bottomOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX -= 50 - 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else if (slopeAtMid < 0) {\n bottomOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n bottomOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetX += 10 * (Math.abs(theta) % HALF_PI);\n topOffsetY += 10 * (Math.abs(theta) % HALF_PI);\n } else {\n bottomOffsetX = 15;\n bottomOffsetY = 10;\n topOffsetX = -25;\n topOffsetY = 10;\n }\n\n let symbol = '';\n if (operator !== undefined) {\n if (operator === 'startsWith') {\n symbol = 'a*';\n } else if (operator === 'endsWith') {\n symbol = '*z';\n } else {\n symbol = TableUtils.getFilterOperatorString(operator);\n }\n }\n\n const showOperator = type !== 'chartLink' && type !== 'filterSource';\n\n return (\n <>\n <svg\n className={classNames(className, {\n hovering: isHovering,\n })}\n >\n <clipPath id={clipPathId}>\n <path d={selectClipPath} clipRule=\"evenodd\" />\n </clipPath>\n <path\n className=\"link-select\"\n d={path}\n onClick={this.handleClick}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n clipPath={`url(#${clipPathId})`}\n data-testid=\"link-select\"\n />\n <path className=\"link-background\" d={path} />\n <path className=\"link-foreground\" d={path} />\n <circle className=\"link-dot\" cx={x1} cy={y1} r=\"5\" />\n <polygon className=\"link-triangle\" points={points} />\n </svg>\n {startColumnType != null && isSelected && (\n <>\n {showOperator && (\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-operator\"\n style={{\n top: midY + (slopeAtMid >= 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid >= 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={() => {\n // no-op: click is handled in `DropdownMenu'\n }}\n icon={\n <div className=\"fa-md fa-layers\">\n <b>{symbol}</b>\n <FontAwesomeIcon\n icon={vsTriangleDown}\n transform=\"right-8 down-9 shrink-5\"\n />\n </div>\n }\n tooltip=\"Change comparison operator\"\n >\n <DropdownMenu\n actions={this.getDropdownActions}\n popperOptions={{ placement: 'bottom-start' }}\n />\n </Button>\n )}\n <Button\n kind=\"primary\"\n className=\"btn-fab btn-delete\"\n style={{\n top: midY + (slopeAtMid < 0 ? topOffsetY : bottomOffsetY),\n left: midX + (slopeAtMid < 0 ? topOffsetX : bottomOffsetX),\n }}\n onClick={this.handleDelete}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n </>\n )}\n </>\n );\n }\n}\n\nexport default LinkerLink;\n"],"mappings":"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","ignoreList":[]}
@@ -13,8 +13,7 @@ import clamp from 'lodash.clamp';
13
13
  import { isLinkableFromPanel } from "./LinkerUtils.js";
14
14
  import LinkerLink from "./LinkerLink.js";
15
15
  import "./LinkerOverlayContent.css";
16
- import { jsx as _jsx } from "react/jsx-runtime";
17
- import { jsxs as _jsxs } from "react/jsx-runtime";
16
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
18
17
  var log = Log.module('LinkerOverlayContent');
19
18
  export class LinkerOverlayContent extends Component {
20
19
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","linkTargetPropMap","panelId","linkPointId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","preventDefault","right","bottom","key","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { type TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkerOverlayContent.js","names":["React","Component","classNames","Button","ContextActions","GLOBAL_SHORTCUTS","Tooltip","LayoutUtils","Log","vsGripper","clamp","isLinkableFromPanel","LinkerLink","jsx","_jsx","jsxs","_jsxs","log","module","LinkerOverlayContent","constructor","props","_defineProperty","handleBlur","bind","handleResize","handleMouseMove","handleMouseDown","handleMouseUp","handleKeyDown","handleKeyUp","handleEscapePressed","handleOperatorChanged","dialogRef","createRef","state","mouse","undefined","dialog","offset","x","y","isDragging","mode","componentDidMount","window","addEventListener","componentDidCatch","error","info","componentWillUnmount","removeEventListener","getPointFromLinkPoint","linkPoint","panelManager","linkTargetPropMap","panelId","linkPointId","columnName","linkTargetHandlers","get","coordinates","getCoordinates","panel","getOpenedPanelById","Error","concat","coordinate","getCoordinateForColumn","e","glContainer","getContainerByPanelId","getTabPoint","linkId","type","links","onLinksUpdated","newLinks","map","link","id","_objectSpread","operator","setState","current","rect","getBoundingClientRect","dialogX","innerWidth","width","dialogY","innerHeight","height","event","clientX","clientY","preventDefault","right","bottom","key","selectedIds","onLinkDeleted","forEach","onCancel","render","disabled","messageText","onLinkSelected","onAllLinksDeleted","onDone","visibleLinks","_mouse$x","_mouse$y","isReversed","start","end","startColumnType","columnType","x1","y1","x2","y2","tmpX","tmpY","className","interactive","has","warn","filter","item","children","_ref","onClick","onDelete","isSelected","onOperatorChanged","dragging","ref","style","draggable","kind","icon","onMouseDown","actions","action","shortcut","LINKER_CLOSE","isGlobal"],"sources":["../../src/linker/LinkerOverlayContent.tsx"],"sourcesContent":["import React, { Component, type ErrorInfo } from 'react';\nimport classNames from 'classnames';\nimport {\n Button,\n ContextActions,\n GLOBAL_SHORTCUTS,\n Tooltip,\n} from '@deephaven/components';\nimport { LayoutUtils, type PanelManager } from '@deephaven/dashboard';\nimport Log from '@deephaven/log';\nimport type { Container } from '@deephaven/golden-layout';\nimport { vsGripper } from '@deephaven/icons';\nimport { type TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport clamp from 'lodash.clamp';\nimport {\n isLinkableFromPanel,\n type Link,\n type LinkerCoordinate,\n type LinkPoint,\n type LinkType,\n} from './LinkerUtils';\nimport LinkerLink from './LinkerLink';\nimport './LinkerOverlayContent.scss';\nimport { type LinkTargetProps } from './LinkerEvent';\n\nconst log = Log.module('LinkerOverlayContent');\n\nexport type VisibleLink = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n type: LinkType;\n operator: FilterTypeValue;\n startColumnType: string | null;\n};\n\nexport type LinkerOverlayContentProps = {\n disabled?: boolean;\n links: Link[];\n selectedIds: Set<string>;\n messageText: string;\n onLinkSelected: (linkId: string) => void;\n onLinkDeleted: (linkId: string) => void;\n onAllLinksDeleted: () => void;\n onLinksUpdated: (newLinks: Link[]) => void;\n onCancel: () => void;\n onDone: () => void;\n panelManager: PanelManager;\n linkTargetPropMap: Map<string, LinkTargetProps>;\n};\n\ntype Point = { x: number; y: number };\n\nexport type LinkerOverlayContentState = {\n mouse?: Point;\n dialog?: Point;\n offset: Point;\n isDragging: boolean;\n mode: 'select' | 'delete';\n};\n\nexport class LinkerOverlayContent extends Component<\n LinkerOverlayContentProps,\n LinkerOverlayContentState\n> {\n static defaultProps = {\n disabled: 'false',\n };\n\n constructor(props: LinkerOverlayContentProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEscapePressed = this.handleEscapePressed.bind(this);\n this.handleOperatorChanged = this.handleOperatorChanged.bind(this);\n\n this.dialogRef = React.createRef();\n\n this.state = {\n mouse: undefined,\n dialog: undefined,\n offset: { x: 0, y: 0 },\n isDragging: false,\n mode: 'select',\n };\n }\n\n componentDidMount(): void {\n window.addEventListener('blur', this.handleBlur, true);\n window.addEventListener('mousemove', this.handleMouseMove, true);\n window.addEventListener('mouseup', this.handleMouseUp, true);\n window.addEventListener('keydown', this.handleKeyDown, true);\n window.addEventListener('keyup', this.handleKeyUp, true);\n window.addEventListener('resize', this.handleResize, true);\n }\n\n // eslint-disable-next-line react/sort-comp\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('blur', this.handleBlur, true);\n window.removeEventListener('mousemove', this.handleMouseMove, true);\n window.removeEventListener('mouseup', this.handleMouseUp, true);\n window.removeEventListener('keydown', this.handleKeyDown, true);\n window.removeEventListener('keyup', this.handleKeyUp, true);\n window.removeEventListener('resize', this.handleResize, true);\n }\n\n dialogRef: React.RefObject<HTMLInputElement>;\n\n /** Gets the on screen points for a link start or end spec */\n getPointFromLinkPoint(linkPoint: LinkPoint): LinkerCoordinate {\n const { panelManager, linkTargetPropMap } = this.props;\n const { panelId: linkPointId, columnName } = linkPoint;\n\n let panelId = linkPointId;\n const linkTargetHandlers = linkTargetPropMap.get(linkPointId);\n\n if (linkTargetHandlers != null) {\n panelId = linkTargetHandlers.panelId;\n const coordinates = linkTargetHandlers.getCoordinates(columnName);\n if (coordinates != null) {\n return coordinates;\n }\n }\n\n const panel = panelManager.getOpenedPanelById(panelId);\n if (linkTargetHandlers == null && panel != null) {\n if (!isLinkableFromPanel(panel)) {\n throw new Error(\n `Panel does not have getCoordinateForColumn method: ${panelId}`\n );\n }\n try {\n // TODO: remove try/catch when IDS-7371 is fixed.\n // getCoordinateForColumn throws an exception when accessing\n // columns on a model while it reconnects\n const coordinate = panel.getCoordinateForColumn(columnName);\n if (coordinate != null) {\n return coordinate;\n }\n } catch (e) {\n log.error('Could not get coordinate for column', columnName, panel);\n }\n }\n // Fallback to panel container if the panel itself\n // crashed, unmounted, and removed from openedPanelMap.\n const glContainer = panelManager.getContainerByPanelId(panelId);\n if (glContainer == null) {\n throw new Error(`Unable to find panel container for id: ${panelId}`);\n }\n return LayoutUtils.getTabPoint(glContainer as unknown as Container);\n }\n\n handleOperatorChanged(linkId: string, type: FilterTypeValue): void {\n const { links, onLinksUpdated } = this.props;\n const newLinks: Link[] = links.map(link =>\n link.id === linkId ? { ...link, operator: type } : link\n );\n onLinksUpdated(newLinks);\n }\n\n handleBlur(): void {\n this.setState({ mode: 'select' });\n }\n\n handleResize(): void {\n const { dialog } = this.state;\n if (dialog && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(dialog.x, 0, window.innerWidth - rect.width);\n const dialogY = clamp(dialog.y, 0, window.innerHeight - rect.height);\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseMove(event: MouseEvent): void {\n const { offset, isDragging } = this.state;\n this.setState({\n mouse: { x: event.clientX, y: event.clientY },\n });\n\n if (isDragging && this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n const dialogX = clamp(\n window.innerWidth - (event.clientX + rect.width + offset.x),\n 0,\n window.innerWidth - rect.width\n );\n\n const dialogY = clamp(\n window.innerHeight - (event.clientY + rect.height + offset.y),\n 0,\n window.innerHeight - rect.height\n );\n\n this.setState({\n dialog: { x: dialogX, y: dialogY },\n });\n }\n }\n\n handleMouseDown(event: React.MouseEvent): void {\n event.preventDefault();\n const offset: Point = { x: 0, y: 0 };\n if (this.dialogRef.current) {\n const rect = this.dialogRef.current.getBoundingClientRect();\n offset.x = rect.right - (rect.width + event.clientX);\n offset.y = rect.bottom - (rect.height + event.clientY);\n }\n this.setState({\n isDragging: true,\n offset,\n });\n }\n\n handleMouseUp(): void {\n this.setState({\n isDragging: false,\n });\n }\n\n handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'delete',\n });\n } else if (event.key === 'Delete' || event.key === 'Backspace') {\n const { selectedIds, onLinkDeleted } = this.props;\n event.preventDefault();\n selectedIds.forEach(id => onLinkDeleted(id));\n }\n }\n\n handleKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Alt') {\n event.preventDefault();\n this.setState({\n mode: 'select',\n });\n }\n }\n\n handleEscapePressed(): void {\n const { onCancel } = this.props;\n onCancel();\n }\n\n render(): JSX.Element {\n const {\n disabled,\n links,\n selectedIds,\n messageText,\n onLinkSelected,\n onLinkDeleted,\n onAllLinksDeleted,\n onDone,\n } = this.props;\n\n const { mouse, dialog, isDragging, mode } = this.state;\n const visibleLinks = links\n .map(link => {\n try {\n const { id, type, isReversed, start, end, operator } = link;\n const startColumnType = start.columnType;\n let [x1, y1] = this.getPointFromLinkPoint(start);\n let x2 = mouse?.x ?? x1;\n let y2 = mouse?.y ?? y1;\n if (end != null) {\n [x2, y2] = this.getPointFromLinkPoint(end);\n }\n if (isReversed != null && isReversed) {\n const [tmpX, tmpY] = [x1, y1];\n [x1, y1] = [x2, y2];\n [x2, y2] = [tmpX, tmpY];\n }\n const className = classNames(\n 'linker-link',\n { disabled },\n { 'link-filter-source': type === 'filterSource' },\n { 'link-invalid': type === 'invalid' },\n { interactive: link.end == null },\n { 'link-is-selected': selectedIds.has(id) },\n { 'danger-delete': mode === 'delete' }\n );\n return {\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n };\n } catch (error) {\n log.warn('Unable to get point for link', link, error);\n return null;\n }\n })\n .filter(item => item != null) as VisibleLink[];\n\n return (\n <div\n className={classNames('linker-overlay', {\n 'danger-delete': mode === 'delete',\n })}\n >\n {visibleLinks.map(\n ({\n x1,\n y1,\n x2,\n y2,\n id,\n className,\n operator,\n startColumnType,\n type,\n }) => (\n <LinkerLink\n className={className}\n id={id}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n key={id}\n onClick={onLinkSelected}\n onDelete={onLinkDeleted}\n isSelected={selectedIds.has(id)}\n operator={operator}\n startColumnType={startColumnType}\n type={type}\n onOperatorChanged={this.handleOperatorChanged}\n />\n )\n )}\n <div\n className={classNames('linker-toast-dialog', {\n dragging: isDragging,\n })}\n ref={this.dialogRef}\n style={{ bottom: dialog?.y, right: dialog?.x }}\n data-testid=\"linker-toast-dialog\"\n >\n <Button\n draggable\n kind=\"inline\"\n className=\"btn-drag-handle\"\n icon={vsGripper}\n onClick={() => {\n // no-op\n }}\n onMouseDown={this.handleMouseDown}\n >\n {!isDragging && <Tooltip>Drag to reposition</Tooltip>}\n </Button>\n <div className=\"toast-body\">{messageText}</div>\n <div className=\"toast-footer\">\n <Button kind=\"secondary\" onClick={onAllLinksDeleted}>\n Clear All\n </Button>\n <Button kind=\"primary\" onClick={onDone}>\n Done\n </Button>\n </div>\n </div>\n <ContextActions\n actions={[\n {\n action: this.handleEscapePressed,\n shortcut: GLOBAL_SHORTCUTS.LINKER_CLOSE,\n isGlobal: true,\n },\n ]}\n />\n </div>\n );\n }\n}\n\nexport default LinkerOverlayContent;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","columnType","startColumnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { type TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string | null;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(\n start: LinkPoint,\n end: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): boolean {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start.panelId == null ||\n end.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: readonly LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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"}
1
+ {"version":3,"file":"LinkerUtils.js","names":["nanoid","TableUtils","Log","isLinkableFromPanel","panel","p","getCoordinateForColumn","isLinkablePanel","setFilterMap","unsetFilterValue","isLinkableColumn","column","description","startsWith","log","module","LinkerUtils","isLinkValid","start","end","isolatedLinkerPanelId","panelId","debug2","columnType","startColumnType","endColumnType","isCompatibleType","findColumn","columns","_ref","columnName","find","_ref2","name","type","cloneLinksForPanel","links","cloneId","clonedLinks","forEach","link","_link$end","push","_objectSpread","id"],"sources":["../../src/linker/LinkerUtils.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport { type PanelComponent } from '@deephaven/dashboard';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport { type TypeValue as FilterTypeValue } from '@deephaven/filters';\nimport Log from '@deephaven/log';\n\nexport type LinkType = 'invalid' | 'filterSource' | 'tableLink' | 'chartLink';\n\nexport type LinkPoint = {\n panelId: string;\n columnName: string;\n columnType: string | null;\n};\n\nexport type LinkPointOptions = {\n /**\n * The type of link this point is associated with.\n * If this point is the end point of a link, this will set the type of the link.\n */\n type: LinkType;\n};\n\nexport type Link = {\n start: LinkPoint;\n end?: LinkPoint;\n id: string;\n isReversed?: boolean;\n type: LinkType;\n operator?: FilterTypeValue;\n};\n\nexport type LinkColumn = {\n name: string;\n type: string | null;\n description?: string | null;\n};\n\nexport type LinkDataValue<T = unknown> = {\n operator: FilterTypeValue;\n text: string;\n value: T;\n startColumnIndex: number;\n};\n\nexport type LinkFilterMapValue<T = unknown> = {\n columnType: string | null;\n filterList: LinkDataValue<T>[];\n};\n\nexport type LinkFilterMap<T = unknown> = Map<string, LinkFilterMapValue<T>>;\n\n// [x,y] screen coordinates used by the Linker\nexport type LinkerCoordinate = [number, number];\n\nexport type LinkableFromPanel = PanelComponent & {\n getCoordinateForColumn: (name: string) => LinkerCoordinate;\n};\n\nexport type LinkablePanel = LinkableFromPanel & {\n setFilterMap: (filterMap: LinkFilterMap) => void;\n unsetFilterValue: (name: string, type: string | null) => void;\n};\n\nexport function isLinkableFromPanel(\n panel: PanelComponent\n): panel is LinkableFromPanel {\n const p = panel as LinkableFromPanel;\n return typeof p.getCoordinateForColumn === 'function';\n}\n\nexport function isLinkablePanel(panel: PanelComponent): panel is LinkablePanel {\n const p = panel as LinkablePanel;\n return (\n isLinkableFromPanel(panel) &&\n typeof p.setFilterMap === 'function' &&\n typeof p.unsetFilterValue === 'function'\n );\n}\n\nexport function isLinkableColumn(column: LinkColumn): boolean {\n // TODO: core/#3358 Use preview/original type property instead of checking description\n return (\n column.description == null ||\n !column.description.startsWith('Preview of type: ')\n );\n}\n\nconst log = Log.module('LinkerUtils');\n\n/**\n * Collection of utility functions for use with the Linker\n */\nclass LinkerUtils {\n /**\n * Retrieve the type of link given parameters.\n * @param start The link start\n * @param end The link end\n * @param isolatedLinkerPanelId Whether there's an isolated linker\n * @returns The type of link, or invalid if there's an error\n */\n static isLinkValid(\n start: LinkPoint,\n end: LinkPoint,\n isolatedLinkerPanelId?: string | string[]\n ): boolean {\n // Panel compatibility checks:\n // Link ends should point to different non-null panelIds\n // For isolated linker one of the panels should match isolated panel id\n if (\n start.panelId == null ||\n end.panelId == null ||\n start.panelId === end.panelId ||\n (isolatedLinkerPanelId != null &&\n isolatedLinkerPanelId !== start.panelId &&\n isolatedLinkerPanelId !== end.panelId)\n ) {\n log.debug2('Incompatible panel ids', start, end, isolatedLinkerPanelId);\n return false;\n }\n\n // Check column type compatibility\n const { columnType: startColumnType } = start;\n const { columnType: endColumnType } = end;\n\n // Null columnType in ending link point allows linking to any type\n const isCompatibleType =\n endColumnType === null ||\n TableUtils.isCompatibleType(startColumnType, endColumnType);\n\n if (!isCompatibleType) {\n log.debug2('Incompatible type', startColumnType, endColumnType);\n return false;\n }\n\n return true;\n }\n\n /**\n * Find column matching the link point\n * @param columns Columns to search in\n * @param linkPoint Link point to find column for\n * @param linkPoint.columnName Column name to find\n * @param linkPoint.columnType Column type to find\n * @returns Column matching the link point, undefined if not found\n */\n static findColumn(\n columns: readonly LinkColumn[],\n { columnName, columnType }: LinkPoint\n ): LinkColumn | undefined {\n return columns.find(\n ({ name, type }) => name === columnName && type === columnType\n );\n }\n\n /**\n * Clone links for a given panel id\n * @param links Original links array\n * @param panelId Original panel id\n * @param cloneId Cloned panel id\n * @returns Cloned links array or empty array if no new links added\n */\n static cloneLinksForPanel(\n links: Link[],\n panelId: string | string[],\n cloneId: string\n ): Link[] {\n const clonedLinks: Link[] = [];\n links.forEach(link => {\n if (link.start.panelId === panelId && link.type !== 'filterSource') {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n start: { ...link.start, panelId: cloneId },\n });\n } else if (link.end?.panelId === panelId) {\n clonedLinks.push({\n ...link,\n id: nanoid(),\n end: { ...link.end, panelId: cloneId },\n });\n }\n });\n return clonedLinks;\n }\n}\n\nexport default LinkerUtils;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolType.js","names":["Object","freeze","DEFAULT","LINKER"],"sources":["../../src/linker/ToolType.ts"],"sourcesContent":["export default Object.freeze({\n DEFAULT: 'DEFAULT',\n LINKER: 'LINKER',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAM,CAAC;EAC3BC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE;AACV,CAAC,CAAC"}
1
+ {"version":3,"file":"ToolType.js","names":["Object","freeze","DEFAULT","LINKER"],"sources":["../../src/linker/ToolType.ts"],"sourcesContent":["export default Object.freeze({\n DEFAULT: 'DEFAULT',\n LINKER: 'LINKER',\n});\n"],"mappings":"AAAA,eAAeA,MAAM,CAACC,MAAM,CAAC;EAC3BC,OAAO,EAAE,SAAS;EAClBC,MAAM,EAAE;AACV,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/linker/index.ts"],"sourcesContent":["export * from './ColumnSelectionValidator';\n"],"mappings":""}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/linker/index.ts"],"sourcesContent":["export * from './ColumnSelectionValidator';\n"],"mappings":"","ignoreList":[]}
@@ -15,10 +15,6 @@ interface ChartColumnSelectorOverlayProps {
15
15
  declare function ChartColumnSelectorOverlay({ columns, onColumnSelected, onMouseEnter, onMouseLeave, }: ChartColumnSelectorOverlayProps): ReactElement;
16
16
  declare namespace ChartColumnSelectorOverlay {
17
17
  var makeButtonClassName: (columnName: string) => string;
18
- var defaultProps: {
19
- onMouseEnter: () => void;
20
- onMouseLeave: () => void;
21
- };
22
18
  }
23
19
  export default ChartColumnSelectorOverlay;
24
20
  //# sourceMappingURL=ChartColumnSelectorOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartColumnSelectorOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,mCAAmC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,+BAA+B;IACvC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CACrD;AAED,iBAAS,0BAA0B,CAAC,EAClC,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE,+BAA+B,GAAG,YAAY,CA+BhD;kBApCQ,0BAA0B;0CAsC2B,MAAM;;4BAIhD,IAAI;4BACJ,IAAI;;;AAGxB,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"ChartColumnSelectorOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzE,OAAO,mCAAmC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,+BAA+B;IACvC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;CACrD;AAED,iBAAS,0BAA0B,CAAC,EAClC,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,EAAE,+BAA+B,GAAG,YAAY,CA+BhD;kBApCQ,0BAA0B;0CAsC2B,MAAM;;AAGpE,eAAe,0BAA0B,CAAC"}
@@ -2,8 +2,7 @@ import React from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { SocketedButton } from '@deephaven/components';
4
4
  import "./ChartColumnSelectorOverlay.css";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
- import { jsxs as _jsxs } from "react/jsx-runtime";
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
6
  function ChartColumnSelectorOverlay(_ref) {
8
7
  var {
9
8
  columns,
@@ -24,7 +23,7 @@ function ChartColumnSelectorOverlay(_ref) {
24
23
  className: classNames('btn-chart-column-selector', ChartColumnSelectorOverlay.makeButtonClassName(column.name)),
25
24
  onClick: () => onColumnSelected(column.name),
26
25
  onMouseEnter: () => {
27
- if (_onMouseEnter) _onMouseEnter(column);
26
+ _onMouseEnter === null || _onMouseEnter === void 0 || _onMouseEnter(column);
28
27
  },
29
28
  onMouseLeave: onMouseLeave,
30
29
  disabled: !column.isValid,
@@ -36,9 +35,5 @@ function ChartColumnSelectorOverlay(_ref) {
36
35
  });
37
36
  }
38
37
  ChartColumnSelectorOverlay.makeButtonClassName = columnName => "btn-chart-column-selector-".concat(columnName);
39
- ChartColumnSelectorOverlay.defaultProps = {
40
- onMouseEnter: () => undefined,
41
- onMouseLeave: () => undefined
42
- };
43
38
  export default ChartColumnSelectorOverlay;
44
39
  //# sourceMappingURL=ChartColumnSelectorOverlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat","defaultProps","undefined"],"sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"sourcesContent":["import React, { type MouseEventHandler, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport './ChartColumnSelectorOverlay.scss';\n\nexport interface SelectorColumn {\n name: string;\n type: string;\n isValid: boolean;\n isActive: boolean;\n}\n\ninterface ChartColumnSelectorOverlayProps {\n columns: SelectorColumn[];\n onColumnSelected: (name: string) => void;\n onMouseEnter?: (column: SelectorColumn) => void;\n onMouseLeave?: MouseEventHandler<HTMLButtonElement>;\n}\n\nfunction ChartColumnSelectorOverlay({\n columns,\n onColumnSelected,\n onMouseEnter,\n onMouseLeave,\n}: ChartColumnSelectorOverlayProps): ReactElement {\n return (\n <div className=\"chart-panel-overlay chart-column-selector-overlay\">\n <div className={classNames('chart-panel-overlay-content')}>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-column-select-list\">\n {columns.map(column => (\n <SocketedButton\n key={column.name}\n className={classNames(\n 'btn-chart-column-selector',\n ChartColumnSelectorOverlay.makeButtonClassName(column.name)\n )}\n onClick={() => onColumnSelected(column.name)}\n onMouseEnter={() => {\n if (onMouseEnter) onMouseEnter(column);\n }}\n onMouseLeave={onMouseLeave}\n disabled={!column.isValid}\n isLinked={column.isActive}\n >\n {column.name}\n </SocketedButton>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nChartColumnSelectorOverlay.makeButtonClassName = (columnName: string) =>\n `btn-chart-column-selector-${columnName}`;\n\nChartColumnSelectorOverlay.defaultProps = {\n onMouseEnter: (): void => undefined,\n onMouseLeave: (): void => undefined,\n};\n\nexport default ChartColumnSelectorOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqD,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAiBvD,SAASC,0BAA0BA,CAAAC,IAAA,EAKe;EAAA,IALd;IAClCC,OAAO;IACPC,gBAAgB;IAChBC,YAAY,EAAZA,aAAY;IACZC;EAC+B,CAAC,GAAAJ,IAAA;EAChC,oBACEJ,IAAA;IAAKS,SAAS,EAAC,mDAAmD;IAAAC,QAAA,eAChER,KAAA;MAAKO,SAAS,EAAEZ,UAAU,CAAC,6BAA6B,CAAE;MAAAa,QAAA,gBACxDV,IAAA;QAAKS,SAAS,EAAC,cAAc;QAAAC,QAAA,EAAC;MAG9B,CAAK,CAAC,eACNV,IAAA;QAAKS,SAAS,EAAC,4BAA4B;QAAAC,QAAA,EACxCL,OAAO,CAACM,GAAG,CAACC,MAAM,iBACjBZ,IAAA,CAACF,cAAc;UAEbW,SAAS,EAAEZ,UAAU,CACnB,2BAA2B,EAC3BM,0BAA0B,CAACU,mBAAmB,CAACD,MAAM,CAACE,IAAI,CAC5D,CAAE;UACFC,OAAO,EAAEA,CAAA,KAAMT,gBAAgB,CAACM,MAAM,CAACE,IAAI,CAAE;UAC7CP,YAAY,EAAEA,CAAA,KAAM;YAClB,IAAIA,aAAY,EAAEA,aAAY,CAACK,MAAM,CAAC;UACxC,CAAE;UACFJ,YAAY,EAAEA,YAAa;UAC3BQ,QAAQ,EAAE,CAACJ,MAAM,CAACK,OAAQ;UAC1BC,QAAQ,EAAEN,MAAM,CAACO,QAAS;UAAAT,QAAA,EAEzBE,MAAM,CAACE;QAAI,GAbPF,MAAM,CAACE,IAcE,CACjB;MAAC,CACC,CAAC;IAAA,CACH;EAAC,CACH,CAAC;AAEV;AAEAX,0BAA0B,CAACU,mBAAmB,GAAIO,UAAkB,iCAAAC,MAAA,CACrCD,UAAU,CAAE;AAE3CjB,0BAA0B,CAACmB,YAAY,GAAG;EACxCf,YAAY,EAAEA,CAAA,KAAYgB,SAAS;EACnCf,YAAY,EAAEA,CAAA,KAAYe;AAC5B,CAAC;AAED,eAAepB,0BAA0B"}
1
+ {"version":3,"file":"ChartColumnSelectorOverlay.js","names":["React","classNames","SocketedButton","jsx","_jsx","jsxs","_jsxs","ChartColumnSelectorOverlay","_ref","columns","onColumnSelected","onMouseEnter","onMouseLeave","className","children","map","column","makeButtonClassName","name","onClick","disabled","isValid","isLinked","isActive","columnName","concat"],"sources":["../../src/panels/ChartColumnSelectorOverlay.tsx"],"sourcesContent":["import React, { type MouseEventHandler, type ReactElement } from 'react';\nimport classNames from 'classnames';\nimport { SocketedButton } from '@deephaven/components';\nimport './ChartColumnSelectorOverlay.scss';\n\nexport interface SelectorColumn {\n name: string;\n type: string;\n isValid: boolean;\n isActive: boolean;\n}\n\ninterface ChartColumnSelectorOverlayProps {\n columns: SelectorColumn[];\n onColumnSelected: (name: string) => void;\n onMouseEnter?: (column: SelectorColumn) => void;\n onMouseLeave?: MouseEventHandler<HTMLButtonElement>;\n}\n\nfunction ChartColumnSelectorOverlay({\n columns,\n onColumnSelected,\n onMouseEnter,\n onMouseLeave,\n}: ChartColumnSelectorOverlayProps): ReactElement {\n return (\n <div className=\"chart-panel-overlay chart-column-selector-overlay\">\n <div className={classNames('chart-panel-overlay-content')}>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-column-select-list\">\n {columns.map(column => (\n <SocketedButton\n key={column.name}\n className={classNames(\n 'btn-chart-column-selector',\n ChartColumnSelectorOverlay.makeButtonClassName(column.name)\n )}\n onClick={() => onColumnSelected(column.name)}\n onMouseEnter={() => {\n onMouseEnter?.(column);\n }}\n onMouseLeave={onMouseLeave}\n disabled={!column.isValid}\n isLinked={column.isActive}\n >\n {column.name}\n </SocketedButton>\n ))}\n </div>\n </div>\n </div>\n );\n}\n\nChartColumnSelectorOverlay.makeButtonClassName = (columnName: string) =>\n `btn-chart-column-selector-${columnName}`;\n\nexport default ChartColumnSelectorOverlay;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAqD,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBvD,SAASC,0BAA0BA,CAAAC,IAAA,EAKe;EAAA,IALd;IAClCC,OAAO;IACPC,gBAAgB;IAChBC,YAAY,EAAZA,aAAY;IACZC;EAC+B,CAAC,GAAAJ,IAAA;EAChC,oBACEJ,IAAA;IAAKS,SAAS,EAAC,mDAAmD;IAAAC,QAAA,eAChER,KAAA;MAAKO,SAAS,EAAEZ,UAAU,CAAC,6BAA6B,CAAE;MAAAa,QAAA,gBACxDV,IAAA;QAAKS,SAAS,EAAC,cAAc;QAAAC,QAAA,EAAC;MAG9B,CAAK,CAAC,eACNV,IAAA;QAAKS,SAAS,EAAC,4BAA4B;QAAAC,QAAA,EACxCL,OAAO,CAACM,GAAG,CAACC,MAAM,iBACjBZ,IAAA,CAACF,cAAc;UAEbW,SAAS,EAAEZ,UAAU,CACnB,2BAA2B,EAC3BM,0BAA0B,CAACU,mBAAmB,CAACD,MAAM,CAACE,IAAI,CAC5D,CAAE;UACFC,OAAO,EAAEA,CAAA,KAAMT,gBAAgB,CAACM,MAAM,CAACE,IAAI,CAAE;UAC7CP,YAAY,EAAEA,CAAA,KAAM;YAClBA,aAAY,aAAZA,aAAY,eAAZA,aAAY,CAAGK,MAAM,CAAC;UACxB,CAAE;UACFJ,YAAY,EAAEA,YAAa;UAC3BQ,QAAQ,EAAE,CAACJ,MAAM,CAACK,OAAQ;UAC1BC,QAAQ,EAAEN,MAAM,CAACO,QAAS;UAAAT,QAAA,EAEzBE,MAAM,CAACE;QAAI,GAbPF,MAAM,CAACE,IAcE,CACjB;MAAC,CACC,CAAC;IAAA,CACH;EAAC,CACH,CAAC;AAEV;AAEAX,0BAA0B,CAACU,mBAAmB,GAAIO,UAAkB,iCAAAC,MAAA,CACrCD,UAAU,CAAE;AAE3C,eAAejB,0BAA0B","ignoreList":[]}
@@ -1,5 +1,4 @@
1
1
  import { type ReactElement } from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { type ColumnName, type InputFilter } from '@deephaven/iris-grid';
4
3
  import './ChartFilterOverlay.scss';
5
4
  export type ColumnMap = Map<ColumnName, {
@@ -16,16 +15,5 @@ interface ChartFilterOverlayProps {
16
15
  waitingInputMap: Map<ColumnName, unknown>;
17
16
  }
18
17
  declare function ChartFilterOverlay({ columnMap, inputFilterMap, linkedColumnMap, onAdd, onOpenLinker, waitingFilterMap, waitingInputMap, }: ChartFilterOverlayProps): ReactElement;
19
- declare namespace ChartFilterOverlay {
20
- var propTypes: {
21
- columnMap: PropTypes.Validator<Map<unknown, unknown>>;
22
- inputFilterMap: PropTypes.Validator<Map<unknown, unknown>>;
23
- linkedColumnMap: PropTypes.Validator<Map<unknown, unknown>>;
24
- onAdd: PropTypes.Validator<(...args: any[]) => any>;
25
- onOpenLinker: PropTypes.Validator<(...args: any[]) => any>;
26
- waitingFilterMap: PropTypes.Validator<Map<unknown, unknown>>;
27
- waitingInputMap: PropTypes.Validator<Map<unknown, unknown>>;
28
- };
29
- }
30
18
  export default ChartFilterOverlay;
31
19
  //# sourceMappingURL=ChartFilterOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,YAAY,EAGlB,MAAM,OAAO,CAAC;AACf,OAAO,SAAS,MAAM,YAAY,CAAC;AAMnC,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,2BAA2B,CAAC;AAEnC,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,eAAe,EACf,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,GAAG,YAAY,CAoGxC;kBA5GQ,kBAAkB;;;;;;;;;;;AAwH3B,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ChartFilterOverlay.d.ts","sourceRoot":"","sources":["../../src/panels/ChartFilterOverlay.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEZ,KAAK,YAAY,EAGlB,MAAM,OAAO,CAAC;AAMf,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,2BAA2B,CAAC;AAEnC,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,UAAU,uBAAuB;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,KAAK,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,cAAc,EACd,eAAe,EACf,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,GAAG,YAAY,CAoGxC;AAED,eAAe,kBAAkB,CAAC"}
@@ -1,14 +1,11 @@
1
1
  import React, { useCallback, useMemo } from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import classNames from 'classnames';
4
3
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
5
4
  import { Button } from '@deephaven/components';
6
5
  import { vsPass, vsWarning } from '@deephaven/icons';
7
6
  import { TextUtils } from '@deephaven/utils';
8
7
  import "./ChartFilterOverlay.css";
9
- import { jsx as _jsx } from "react/jsx-runtime";
10
- import { jsxs as _jsxs } from "react/jsx-runtime";
11
- import { Fragment as _Fragment } from "react/jsx-runtime";
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
9
  function ChartFilterOverlay(_ref) {
13
10
  var {
14
11
  columnMap,
@@ -94,14 +91,5 @@ function ChartFilterOverlay(_ref) {
94
91
  })
95
92
  });
96
93
  }
97
- ChartFilterOverlay.propTypes = {
98
- columnMap: PropTypes.instanceOf(Map).isRequired,
99
- inputFilterMap: PropTypes.instanceOf(Map).isRequired,
100
- linkedColumnMap: PropTypes.instanceOf(Map).isRequired,
101
- onAdd: PropTypes.func.isRequired,
102
- onOpenLinker: PropTypes.func.isRequired,
103
- waitingFilterMap: PropTypes.instanceOf(Map).isRequired,
104
- waitingInputMap: PropTypes.instanceOf(Map).isRequired
105
- };
106
94
  export default ChartFilterOverlay;
107
95
  //# sourceMappingURL=ChartFilterOverlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","PropTypes","classNames","FontAwesomeIcon","Button","vsPass","vsWarning","TextUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","concat","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","className","children","column","isColumnWaiting","has","name","icon","kind","onClick","propTypes","instanceOf","Map","isRequired","func"],"sources":["../../src/panels/ChartFilterOverlay.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { type ColumnName, type InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nfunction ChartFilterOverlay({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (\n needsInputFilterValue != null &&\n needsInputFilterValue &&\n needsLinkValue != null &&\n needsLinkValue\n ) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n event => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <Button kind=\"primary\" onClick={handleAddClick}>\n Add Input Filters\n </Button>\n <Button kind=\"primary\" onClick={handleOpenLinker}>\n Open Linker Tool\n </Button>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nChartFilterOverlay.propTypes = {\n columnMap: PropTypes.instanceOf(Map).isRequired,\n inputFilterMap: PropTypes.instanceOf(Map).isRequired,\n linkedColumnMap: PropTypes.instanceOf(Map).isRequired,\n onAdd: PropTypes.func.isRequired,\n onOpenLinker: PropTypes.func.isRequired,\n waitingFilterMap: PropTypes.instanceOf(Map).isRequired,\n waitingInputMap: PropTypes.instanceOf(Map).isRequired,\n};\n\nexport default ChartFilterOverlay;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartFilterOverlay.js","names":["React","useCallback","useMemo","classNames","FontAwesomeIcon","Button","vsPass","vsWarning","TextUtils","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","ChartFilterOverlay","_ref","columnMap","inputFilterMap","linkedColumnMap","onAdd","onOpenLinker","waitingFilterMap","waitingInputMap","inputMessage","waitingColumns","Array","from","keys","needsInputFilterValue","find","columnName","get","needsLinkValue","columnsText","join","map","item","concat","columns","values","handleAddClick","event","stopPropagation","preventDefault","handleOpenLinker","isWaitingFilters","size","isWaitingInput","className","children","column","isColumnWaiting","has","name","icon","kind","onClick"],"sources":["../../src/panels/ChartFilterOverlay.tsx"],"sourcesContent":["import React, {\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n} from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button } from '@deephaven/components';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { TextUtils } from '@deephaven/utils';\nimport { type ColumnName, type InputFilter } from '@deephaven/iris-grid';\nimport './ChartFilterOverlay.scss';\n\nexport type ColumnMap = Map<ColumnName, { name: string; type: string }>;\n\ninterface ChartFilterOverlayProps {\n columnMap: ColumnMap;\n inputFilterMap: Map<ColumnName, InputFilter>;\n linkedColumnMap: Map<string, unknown>;\n onAdd: (columns: InputFilter[]) => void;\n onOpenLinker: () => void;\n waitingFilterMap: Map<string, InputFilter>;\n waitingInputMap: Map<ColumnName, unknown>;\n}\n\nfunction ChartFilterOverlay({\n columnMap,\n inputFilterMap,\n linkedColumnMap,\n onAdd,\n onOpenLinker,\n waitingFilterMap,\n waitingInputMap,\n}: ChartFilterOverlayProps): ReactElement {\n const inputMessage = useMemo(() => {\n const waitingColumns = Array.from(waitingInputMap.keys());\n const needsInputFilterValue = waitingColumns.find(\n (columnName: ColumnName) => inputFilterMap.get(columnName) != null\n );\n const needsLinkValue = waitingColumns.find(\n columnName => linkedColumnMap.get(columnName) != null\n );\n const columnsText = TextUtils.join(waitingColumns.map(item => `\"${item}\"`));\n if (\n needsInputFilterValue != null &&\n needsInputFilterValue &&\n needsLinkValue != null &&\n needsLinkValue\n ) {\n return `Use a filter control or linked table to set a value for ${columnsText}`;\n }\n if (needsInputFilterValue != null && needsInputFilterValue) {\n return `Set a filter control value for ${columnsText}`;\n }\n return `Double click a row in a linked table to set a value for ${columnsText}`;\n }, [inputFilterMap, linkedColumnMap, waitingInputMap]);\n\n const columns = useMemo(() => Array.from(columnMap.values()), [columnMap]);\n\n const handleAddClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onAdd(Array.from(waitingFilterMap.values()));\n },\n [onAdd, waitingFilterMap]\n );\n\n const handleOpenLinker = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n event.preventDefault();\n\n onOpenLinker();\n },\n [onOpenLinker]\n );\n\n const isWaitingFilters = waitingFilterMap.size > 0;\n const isWaitingInput = !isWaitingFilters && waitingInputMap.size > 0;\n\n return (\n <div className=\"chart-panel-overlay chart-filter-overlay\">\n <div\n className={classNames(\n 'chart-panel-overlay-content chart-filter-overlay-content',\n { 'chart-filter-waiting-filter': isWaitingFilters },\n { 'chart-filter-waiting-input': isWaitingInput }\n )}\n >\n {isWaitingFilters && (\n <>\n <div className=\"info-message\">\n This plot requires a filter control to be added to the layout or a\n table link to be created on the following columns:\n </div>\n <div className=\"waiting-filter-list\">\n {columns.map(column => {\n const isColumnWaiting = waitingFilterMap.has(column.name);\n const icon = isColumnWaiting ? vsWarning : vsPass;\n return (\n <div\n key={column.name}\n className={classNames('waiting-filter-item', {\n 'is-invalid': isColumnWaiting,\n })}\n >\n <FontAwesomeIcon icon={icon} />\n {column.name}\n </div>\n );\n })}\n </div>\n <div>\n <Button kind=\"primary\" onClick={handleAddClick}>\n Add Input Filters\n </Button>\n <Button kind=\"primary\" onClick={handleOpenLinker}>\n Open Linker Tool\n </Button>\n </div>\n </>\n )}\n {isWaitingInput && (\n <>\n <div className=\"info-message\">Waiting for User Input</div>\n <div className=\"\">{inputMessage}</div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nexport default ChartFilterOverlay;\n"],"mappings":"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","ignoreList":[]}
@@ -32,7 +32,7 @@ export interface ChartPanelTableMetadata extends PanelMetadata {
32
32
  title: string;
33
33
  xAxis: string;
34
34
  series: string[];
35
- type: keyof dh.plot.SeriesPlotStyle;
35
+ type: keyof typeof dh.plot.SeriesPlotStyle;
36
36
  };
37
37
  tableSettings: TableSettings;
38
38
  }
@@ -193,14 +193,14 @@ export declare class ChartPanel extends Component<ChartPanelProps, ChartPanelSta
193
193
  pruneFilterMaps(): void;
194
194
  render(): ReactElement;
195
195
  }
196
- declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glEventHub" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "Plotly" | "inputFilters" | "links" | keyof DispatchProps | keyof React.RefAttributes<ChartPanel>> & Partial<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "source" | "panelState" | "settings" | "containerRef" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator">> & Partial<Pick<{
197
- columnSelectionValidator: null;
198
- isLinkerActive: boolean;
199
- source: null;
200
- sourcePanel: null;
201
- panelState: null;
202
- settings: {};
203
- containerRef: null;
204
- }, never>>, "source" | "settings" | "inputFilters" | "links" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & OwnProps>;
196
+ declare const ConnectedChartPanel: import("react-redux").ConnectedComponent<typeof ChartPanel, import("react-redux").Omit<Pick<OwnProps & StateProps & DispatchProps & React.RefAttributes<ChartPanel>, "glEventHub" | "glContainer" | "metadata" | "makeModel" | "localDashboardId" | "Plotly" | "inputFilters" | "links" | keyof DispatchProps | keyof React.RefAttributes<ChartPanel>> & {
197
+ source?: dh.Table | undefined;
198
+ settings?: Partial<WorkspaceSettings> | undefined;
199
+ containerRef?: React.Ref<HTMLDivElement> | undefined;
200
+ panelState?: GLChartPanelState | undefined;
201
+ isLinkerActive?: boolean | undefined;
202
+ sourcePanel?: PanelComponent | undefined;
203
+ columnSelectionValidator?: ColumnSelectionValidator | undefined;
204
+ } & {}, "source" | "settings" | "inputFilters" | "links" | "isLinkerActive" | "sourcePanel" | "columnSelectionValidator" | "setActiveTool" | "setDashboardIsolatedLinkerPanelId"> & OwnProps>;
205
205
  export default ConnectedChartPanel;
206
206
  //# sourceMappingURL=ChartPanel.d.ts.map