@deephaven/dashboard-core-plugins 0.5.2-matplotlib.3 → 0.6.1-demo.8
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.
- package/dist/{src/ChartPlugin.d.ts → ChartPlugin.d.ts} +0 -0
- package/dist/ChartPlugin.d.ts.map +1 -0
- package/dist/ChartPlugin.js +25 -22
- package/dist/ChartPlugin.js.map +1 -1
- package/dist/{src/ConsolePlugin.d.ts → ConsolePlugin.d.ts} +0 -0
- package/dist/ConsolePlugin.d.ts.map +1 -0
- package/dist/ConsolePlugin.js +141 -139
- package/dist/ConsolePlugin.js.map +1 -1
- package/dist/{src/FilterPlugin.d.ts → FilterPlugin.d.ts} +0 -0
- package/dist/FilterPlugin.d.ts.map +1 -0
- package/dist/FilterPlugin.js +114 -116
- package/dist/FilterPlugin.js.map +1 -1
- package/dist/{src/GridPlugin.d.ts → GridPlugin.d.ts} +0 -0
- package/dist/GridPlugin.d.ts.map +1 -0
- package/dist/GridPlugin.js +29 -26
- package/dist/GridPlugin.js.map +1 -1
- package/dist/{src/LinkerPlugin.d.ts → LinkerPlugin.d.ts} +0 -0
- package/dist/LinkerPlugin.d.ts.map +1 -0
- package/dist/LinkerPlugin.js +7 -5
- package/dist/LinkerPlugin.js.map +1 -1
- package/dist/{src/MarkdownPlugin.d.ts → MarkdownPlugin.d.ts} +0 -0
- package/dist/MarkdownPlugin.d.ts.map +1 -0
- package/dist/MarkdownPlugin.js +44 -45
- package/dist/MarkdownPlugin.js.map +1 -1
- package/dist/PandasPlugin.d.ts +8 -0
- package/dist/PandasPlugin.d.ts.map +1 -0
- package/dist/PandasPlugin.js +12 -12
- package/dist/PandasPlugin.js.map +1 -1
- package/dist/{src/controls → controls}/ControlType.d.ts +2 -0
- package/dist/controls/ControlType.d.ts.map +1 -0
- package/dist/controls/ControlType.js +5 -5
- package/dist/controls/ControlType.js.map +1 -1
- package/dist/{src/controls → controls}/dropdown-filter/DropdownFilter.d.ts +6 -0
- package/dist/controls/dropdown-filter/DropdownFilter.d.ts.map +1 -0
- package/dist/controls/dropdown-filter/DropdownFilter.js +356 -394
- package/dist/controls/dropdown-filter/DropdownFilter.js.map +1 -1
- package/dist/{src/controls → controls}/input-filter/InputFilter.d.ts +6 -0
- package/dist/controls/input-filter/InputFilter.d.ts.map +1 -0
- package/dist/controls/input-filter/InputFilter.js +256 -270
- package/dist/controls/input-filter/InputFilter.js.map +1 -1
- package/dist/{src/controls → controls}/markdown/MarkdownContainer.d.ts +0 -0
- package/dist/controls/markdown/MarkdownContainer.d.ts.map +1 -0
- package/dist/controls/markdown/MarkdownContainer.js +18 -56
- package/dist/controls/markdown/MarkdownContainer.js.map +1 -1
- package/dist/{src/controls → controls}/markdown/MarkdownEditor.d.ts +0 -0
- package/dist/controls/markdown/MarkdownEditor.d.ts.map +1 -0
- package/dist/controls/markdown/MarkdownEditor.js +36 -75
- package/dist/controls/markdown/MarkdownEditor.js.map +1 -1
- package/dist/{src/controls → controls}/markdown/MarkdownStartPage.d.ts +0 -0
- package/dist/controls/markdown/MarkdownStartPage.d.ts.map +1 -0
- package/dist/controls/markdown/MarkdownStartPage.js +93 -133
- package/dist/controls/markdown/MarkdownStartPage.js.map +1 -1
- package/dist/{src/controls → controls}/markdown/MarkdownUtils.d.ts +0 -0
- package/dist/controls/markdown/MarkdownUtils.d.ts.map +1 -0
- package/dist/controls/markdown/MarkdownUtils.js +17 -32
- package/dist/controls/markdown/MarkdownUtils.js.map +1 -1
- package/dist/{src/events → events}/ChartEvent.d.ts +0 -0
- package/dist/events/ChartEvent.d.ts.map +1 -0
- package/dist/events/ChartEvent.js +1 -5
- package/dist/events/ChartEvent.js.map +1 -1
- package/dist/{src/events → events}/ConsoleEvent.d.ts +0 -0
- package/dist/events/ConsoleEvent.d.ts.map +1 -0
- package/dist/events/ConsoleEvent.js +1 -5
- package/dist/events/ConsoleEvent.js.map +1 -1
- package/dist/{src/events → events}/ControlEvent.d.ts +0 -0
- package/dist/events/ControlEvent.d.ts.map +1 -0
- package/dist/events/ControlEvent.js +1 -5
- package/dist/events/ControlEvent.js.map +1 -1
- package/dist/{src/events → events}/InputFilterEvent.d.ts +2 -0
- package/dist/events/InputFilterEvent.d.ts.map +1 -0
- package/dist/events/InputFilterEvent.js +3 -5
- package/dist/events/InputFilterEvent.js.map +1 -1
- package/dist/{src/events → events}/IrisGridEvent.d.ts +0 -0
- package/dist/events/IrisGridEvent.d.ts.map +1 -0
- package/dist/events/IrisGridEvent.js +1 -5
- package/dist/events/IrisGridEvent.js.map +1 -1
- package/dist/{src/events → events}/MarkdownEvent.d.ts +0 -0
- package/dist/events/MarkdownEvent.d.ts.map +1 -0
- package/dist/{src/events → events}/NotebookEvent.d.ts +0 -0
- package/dist/events/NotebookEvent.d.ts.map +1 -0
- package/dist/events/NotebookEvent.js +1 -5
- package/dist/events/NotebookEvent.js.map +1 -1
- package/dist/{src/events → events}/PQEvent.d.ts +0 -0
- package/dist/events/PQEvent.d.ts.map +1 -0
- package/dist/events/PQEvent.js +1 -5
- package/dist/events/PQEvent.js.map +1 -1
- package/dist/{src/events → events}/PandasEvent.d.ts +0 -0
- package/dist/events/PandasEvent.d.ts.map +1 -0
- package/dist/events/PandasEvent.js +1 -5
- package/dist/events/PandasEvent.js.map +1 -1
- package/dist/{src/events → events}/TabEvent.d.ts +0 -0
- package/dist/events/TabEvent.d.ts.map +1 -0
- package/dist/events/TabEvent.js +1 -5
- package/dist/events/TabEvent.js.map +1 -1
- package/dist/{dist/events → events}/index.d.ts +0 -1
- package/dist/{dist/events → events}/index.d.ts.map +1 -1
- package/dist/events/index.js +9 -10
- package/dist/events/index.js.map +1 -1
- package/dist/{src/index.d.ts → index.d.ts} +0 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -11
- package/dist/index.js.map +1 -1
- package/dist/{src/linker → linker}/Linker.d.ts +1 -1
- package/dist/linker/Linker.d.ts.map +1 -0
- package/dist/linker/Linker.js +594 -606
- package/dist/linker/Linker.js.map +1 -1
- package/dist/{src/linker → linker}/LinkerLink.d.ts +0 -0
- package/dist/linker/LinkerLink.d.ts.map +1 -0
- package/dist/linker/LinkerLink.js +92 -126
- package/dist/linker/LinkerLink.js.map +1 -1
- package/dist/{src/linker → linker}/LinkerOverlayContent.d.ts +0 -0
- package/dist/linker/LinkerOverlayContent.d.ts.map +1 -0
- package/dist/linker/LinkerOverlayContent.js +162 -220
- package/dist/linker/LinkerOverlayContent.js.map +1 -1
- package/dist/{src/linker → linker}/LinkerUtils.d.ts +0 -0
- package/dist/linker/LinkerUtils.d.ts.map +1 -0
- package/dist/linker/LinkerUtils.js +105 -114
- package/dist/linker/LinkerUtils.js.map +1 -1
- package/dist/{src/linker → linker}/ToolType.d.ts +0 -0
- package/dist/{src/linker → linker}/ToolType.d.ts.map +1 -1
- package/dist/{src/panels → panels}/ChartColumnSelectorOverlay.d.ts +0 -0
- package/dist/panels/ChartColumnSelectorOverlay.d.ts.map +1 -0
- package/dist/panels/ChartColumnSelectorOverlay.js +19 -25
- package/dist/panels/ChartColumnSelectorOverlay.js.map +1 -1
- package/dist/{src/panels → panels}/ChartFilterOverlay.d.ts +0 -0
- package/dist/panels/ChartFilterOverlay.d.ts.map +1 -0
- package/dist/panels/ChartFilterOverlay.js +18 -24
- package/dist/panels/ChartFilterOverlay.js.map +1 -1
- package/dist/{src/panels → panels}/ChartPanel.d.ts +3 -0
- package/dist/panels/ChartPanel.d.ts.map +1 -0
- package/dist/panels/ChartPanel.js +839 -873
- package/dist/panels/ChartPanel.js.map +1 -1
- package/dist/{src/panels → panels}/CommandHistoryPanel.d.ts +0 -0
- package/dist/panels/CommandHistoryPanel.d.ts.map +1 -0
- package/dist/panels/CommandHistoryPanel.js +160 -186
- package/dist/panels/CommandHistoryPanel.js.map +1 -1
- package/dist/{src/panels → panels}/ConsolePanel.d.ts +1 -1
- package/dist/panels/ConsolePanel.d.ts.map +1 -0
- package/dist/panels/ConsolePanel.js +327 -374
- package/dist/panels/ConsolePanel.js.map +1 -1
- package/dist/{src/panels → panels}/DropdownFilterPanel.d.ts +6 -0
- package/dist/panels/DropdownFilterPanel.d.ts.map +1 -0
- package/dist/panels/DropdownFilterPanel.js +537 -566
- package/dist/panels/DropdownFilterPanel.js.map +1 -1
- package/dist/{src/panels → panels}/FileExplorerPanel.d.ts +6 -1
- package/dist/panels/FileExplorerPanel.d.ts.map +1 -0
- package/dist/panels/FileExplorerPanel.js +208 -210
- package/dist/panels/FileExplorerPanel.js.map +1 -1
- package/dist/panels/FilterSetManager.css +111 -0
- package/dist/panels/FilterSetManager.css.map +1 -0
- package/dist/panels/FilterSetManager.d.ts +66 -0
- package/dist/panels/FilterSetManager.d.ts.map +1 -0
- package/dist/panels/FilterSetManager.js +732 -0
- package/dist/panels/FilterSetManager.js.map +1 -0
- package/dist/panels/FilterSetManagerPanel.css +33 -0
- package/dist/panels/FilterSetManagerPanel.css.map +1 -0
- package/dist/panels/FilterSetManagerPanel.d.ts +69 -0
- package/dist/panels/FilterSetManagerPanel.d.ts.map +1 -0
- package/dist/panels/FilterSetManagerPanel.js +383 -0
- package/dist/panels/FilterSetManagerPanel.js.map +1 -0
- package/dist/{src/panels → panels}/InputFilterPanel.d.ts +7 -0
- package/dist/panels/InputFilterPanel.d.ts.map +1 -0
- package/dist/panels/InputFilterPanel.js +198 -206
- package/dist/panels/InputFilterPanel.js.map +1 -1
- package/dist/{src/panels → panels}/IrisGridPanel.d.ts +11 -3
- package/dist/panels/IrisGridPanel.d.ts.map +1 -0
- package/dist/panels/IrisGridPanel.js +779 -771
- package/dist/panels/IrisGridPanel.js.map +1 -1
- package/dist/{src/panels → panels}/LogPanel.d.ts +0 -0
- package/dist/panels/LogPanel.d.ts.map +1 -0
- package/dist/panels/LogPanel.js +80 -116
- package/dist/panels/LogPanel.js.map +1 -1
- package/dist/panels/MarkdownNotebookContainer.d.ts +21 -0
- package/dist/panels/MarkdownNotebookContainer.d.ts.map +1 -0
- package/dist/panels/MarkdownNotebookContainer.js +35 -0
- package/dist/panels/MarkdownNotebookContainer.js.map +1 -0
- package/dist/panels/MarkdownNotebookEditor.d.ts +46 -0
- package/dist/panels/MarkdownNotebookEditor.d.ts.map +1 -0
- package/dist/panels/MarkdownNotebookEditor.js +257 -0
- package/dist/panels/MarkdownNotebookEditor.js.map +1 -0
- package/dist/panels/MarkdownNotebookPanel.css +127 -0
- package/dist/panels/MarkdownNotebookPanel.css.map +1 -0
- package/dist/panels/MarkdownNotebookPanel.d.ts +91 -0
- package/dist/panels/MarkdownNotebookPanel.d.ts.map +1 -0
- package/dist/panels/MarkdownNotebookPanel.js +446 -0
- package/dist/panels/MarkdownNotebookPanel.js.map +1 -0
- package/dist/{src/panels → panels}/MarkdownPanel.d.ts +0 -0
- package/dist/panels/MarkdownPanel.d.ts.map +1 -0
- package/dist/panels/MarkdownPanel.js +165 -199
- package/dist/panels/MarkdownPanel.js.map +1 -1
- package/dist/{src/panels → panels}/NotebookPanel.d.ts +3 -1
- package/dist/panels/NotebookPanel.d.ts.map +1 -0
- package/dist/panels/NotebookPanel.js +870 -862
- package/dist/panels/NotebookPanel.js.map +1 -1
- package/dist/{src/panels → panels}/PandasPanel.d.ts +0 -0
- package/dist/panels/PandasPanel.d.ts.map +1 -0
- package/dist/panels/PandasPanel.js +56 -90
- package/dist/panels/PandasPanel.js.map +1 -1
- package/dist/{src/panels → panels}/Panel.d.ts +0 -0
- package/dist/panels/Panel.d.ts.map +1 -0
- package/dist/panels/Panel.js +282 -313
- package/dist/panels/Panel.js.map +1 -1
- package/dist/{src/panels → panels}/PanelContextMenu.d.ts +0 -0
- package/dist/panels/PanelContextMenu.d.ts.map +1 -0
- package/dist/panels/PanelContextMenu.js +107 -158
- package/dist/panels/PanelContextMenu.js.map +1 -1
- package/dist/{src/panels → panels}/RenameDialog.d.ts +0 -0
- package/dist/panels/RenameDialog.d.ts.map +1 -0
- package/dist/panels/RenameDialog.js +144 -172
- package/dist/panels/RenameDialog.js.map +1 -1
- package/dist/{src/panels → panels}/Shortcuts.d.ts +0 -0
- package/dist/panels/Shortcuts.d.ts.map +1 -0
- package/dist/panels/Shortcuts.js +1 -1
- package/dist/panels/Shortcuts.js.map +1 -1
- package/dist/{src/panels → panels}/WidgetPanel.d.ts +0 -0
- package/dist/panels/WidgetPanel.d.ts.map +1 -0
- package/dist/panels/WidgetPanel.js +133 -163
- package/dist/panels/WidgetPanel.js.map +1 -1
- package/dist/{src/panels → panels}/WidgetPanelTooltip.d.ts +0 -0
- package/dist/panels/WidgetPanelTooltip.d.ts.map +1 -0
- package/dist/panels/WidgetPanelTooltip.js +7 -5
- package/dist/panels/WidgetPanelTooltip.js.map +1 -1
- package/dist/{src/panels → panels}/index.d.ts +1 -1
- package/dist/{src/events → panels}/index.d.ts.map +1 -1
- package/dist/panels/index.js +16 -16
- package/dist/panels/index.js.map +1 -1
- package/dist/{src/prop-types → prop-types}/CommonPropTypes.d.ts +0 -0
- package/dist/prop-types/CommonPropTypes.d.ts.map +1 -0
- package/dist/prop-types/CommonPropTypes.js +4 -8
- package/dist/prop-types/CommonPropTypes.js.map +1 -1
- package/dist/{src/prop-types → prop-types}/UIPropTypes.d.ts +0 -0
- package/dist/prop-types/UIPropTypes.d.ts.map +1 -0
- package/dist/prop-types/UIPropTypes.js +6 -6
- package/dist/prop-types/UIPropTypes.js.map +1 -1
- package/dist/{src/prop-types → prop-types}/index.d.ts +0 -0
- package/dist/{src/panels → prop-types}/index.d.ts.map +1 -1
- package/dist/prop-types/index.js +2 -2
- package/dist/prop-types/index.js.map +1 -1
- package/dist/{src/redux → redux}/actionTypes.d.ts +0 -0
- package/dist/redux/actionTypes.d.ts.map +1 -0
- package/dist/{src/redux → redux}/actions.d.ts +1 -0
- package/dist/redux/actions.d.ts.map +1 -0
- package/dist/redux/actions.js +33 -54
- package/dist/redux/actions.js.map +1 -1
- package/dist/{src/redux → redux}/index.d.ts +0 -0
- package/dist/redux/index.d.ts.map +1 -0
- package/dist/redux/index.js +6 -21
- package/dist/redux/index.js.map +1 -1
- package/dist/{src/redux → redux}/reducers/index.d.ts +0 -0
- package/dist/{src/prop-types → redux/reducers}/index.d.ts.map +1 -1
- package/dist/redux/reducers/index.js +2 -2
- package/dist/redux/reducers/index.js.map +1 -1
- package/dist/{src/redux → redux}/reducers/sessionWrapper.d.ts +0 -0
- package/dist/redux/reducers/sessionWrapper.d.ts.map +1 -0
- package/dist/redux/reducers/sessionWrapper.js +1 -1
- package/dist/redux/reducers/sessionWrapper.js.map +1 -1
- package/dist/{src/redux → redux}/selectors.d.ts +1 -0
- package/dist/redux/selectors.d.ts.map +1 -0
- package/dist/redux/selectors.js +22 -18
- package/dist/redux/selectors.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -54
- package/dist/MatPlotLibPlugin.js +0 -45
- package/dist/MatPlotLibPlugin.js.map +0 -1
- package/dist/dist/events/ChartEvent.d.ts +0 -3
- package/dist/dist/events/ChartEvent.d.ts.map +0 -1
- package/dist/dist/events/ConsoleEvent.d.ts +0 -3
- package/dist/dist/events/ConsoleEvent.d.ts.map +0 -1
- package/dist/dist/events/ControlEvent.d.ts +0 -3
- package/dist/dist/events/ControlEvent.d.ts.map +0 -1
- package/dist/dist/events/InputFilterEvent.d.ts +0 -3
- package/dist/dist/events/InputFilterEvent.d.ts.map +0 -1
- package/dist/dist/events/IrisGridEvent.d.ts +0 -3
- package/dist/dist/events/IrisGridEvent.d.ts.map +0 -1
- package/dist/dist/events/MarkdownEvent.d.ts +0 -5
- package/dist/dist/events/MarkdownEvent.d.ts.map +0 -1
- package/dist/dist/events/MatPlotLibEvent.d.ts +0 -3
- package/dist/dist/events/MatPlotLibEvent.d.ts.map +0 -1
- package/dist/dist/events/NotebookEvent.d.ts +0 -3
- package/dist/dist/events/NotebookEvent.d.ts.map +0 -1
- package/dist/dist/events/PandasEvent.d.ts +0 -3
- package/dist/dist/events/PandasEvent.d.ts.map +0 -1
- package/dist/dist/events/TabEvent.d.ts +0 -3
- package/dist/dist/events/TabEvent.d.ts.map +0 -1
- package/dist/events/MatPlotLibEvent.js +0 -12
- package/dist/events/MatPlotLibEvent.js.map +0 -1
- package/dist/panels/MatPlotLibPanel.css +0 -11
- package/dist/panels/MatPlotLibPanel.css.map +0 -1
- package/dist/panels/MatPlotLibPanel.js +0 -124
- package/dist/panels/MatPlotLibPanel.js.map +0 -1
- package/dist/src/ChartPlugin.d.ts.map +0 -1
- package/dist/src/ConsolePlugin.d.ts.map +0 -1
- package/dist/src/FilterPlugin.d.ts.map +0 -1
- package/dist/src/GridPlugin.d.ts.map +0 -1
- package/dist/src/LinkerPlugin.d.ts.map +0 -1
- package/dist/src/MarkdownPlugin.d.ts.map +0 -1
- package/dist/src/MatPlotLibPlugin.d.ts +0 -5
- package/dist/src/MatPlotLibPlugin.d.ts.map +0 -1
- package/dist/src/PandasPlugin.d.ts +0 -5
- package/dist/src/PandasPlugin.d.ts.map +0 -1
- package/dist/src/controls/ControlType.d.ts.map +0 -1
- package/dist/src/controls/dropdown-filter/DropdownFilter.d.ts.map +0 -1
- package/dist/src/controls/input-filter/InputFilter.d.ts.map +0 -1
- package/dist/src/controls/markdown/MarkdownContainer.d.ts.map +0 -1
- package/dist/src/controls/markdown/MarkdownEditor.d.ts.map +0 -1
- package/dist/src/controls/markdown/MarkdownStartPage.d.ts.map +0 -1
- package/dist/src/controls/markdown/MarkdownUtils.d.ts.map +0 -1
- package/dist/src/events/ChartEvent.d.ts.map +0 -1
- package/dist/src/events/ConsoleEvent.d.ts.map +0 -1
- package/dist/src/events/ControlEvent.d.ts.map +0 -1
- package/dist/src/events/InputFilterEvent.d.ts.map +0 -1
- package/dist/src/events/IrisGridEvent.d.ts.map +0 -1
- package/dist/src/events/MarkdownEvent.d.ts.map +0 -1
- package/dist/src/events/MatPlotLibEvent.d.ts +0 -5
- package/dist/src/events/MatPlotLibEvent.d.ts.map +0 -1
- package/dist/src/events/NotebookEvent.d.ts.map +0 -1
- package/dist/src/events/PQEvent.d.ts.map +0 -1
- package/dist/src/events/PandasEvent.d.ts.map +0 -1
- package/dist/src/events/TabEvent.d.ts.map +0 -1
- package/dist/src/events/index.d.ts +0 -11
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/linker/Linker.d.ts.map +0 -1
- package/dist/src/linker/LinkerLink.d.ts.map +0 -1
- package/dist/src/linker/LinkerOverlayContent.d.ts.map +0 -1
- package/dist/src/linker/LinkerUtils.d.ts.map +0 -1
- package/dist/src/panels/ChartColumnSelectorOverlay.d.ts.map +0 -1
- package/dist/src/panels/ChartFilterOverlay.d.ts.map +0 -1
- package/dist/src/panels/ChartPanel.d.ts.map +0 -1
- package/dist/src/panels/CommandHistoryPanel.d.ts.map +0 -1
- package/dist/src/panels/ConsolePanel.d.ts.map +0 -1
- package/dist/src/panels/DropdownFilterPanel.d.ts.map +0 -1
- package/dist/src/panels/FileExplorerPanel.d.ts.map +0 -1
- package/dist/src/panels/InputFilterPanel.d.ts.map +0 -1
- package/dist/src/panels/IrisGridPanel.d.ts.map +0 -1
- package/dist/src/panels/LogPanel.d.ts.map +0 -1
- package/dist/src/panels/MarkdownPanel.d.ts.map +0 -1
- package/dist/src/panels/MatPlotLibPanel.d.ts +0 -22
- package/dist/src/panels/MatPlotLibPanel.d.ts.map +0 -1
- package/dist/src/panels/NotebookPanel.d.ts.map +0 -1
- package/dist/src/panels/PandasPanel.d.ts.map +0 -1
- package/dist/src/panels/Panel.d.ts.map +0 -1
- package/dist/src/panels/PanelContextMenu.d.ts.map +0 -1
- package/dist/src/panels/RenameDialog.d.ts.map +0 -1
- package/dist/src/panels/Shortcuts.d.ts.map +0 -1
- package/dist/src/panels/WidgetPanel.d.ts.map +0 -1
- package/dist/src/panels/WidgetPanelTooltip.d.ts.map +0 -1
- package/dist/src/prop-types/CommonPropTypes.d.ts.map +0 -1
- package/dist/src/prop-types/UIPropTypes.d.ts.map +0 -1
- package/dist/src/redux/actionTypes.d.ts.map +0 -1
- package/dist/src/redux/actions.d.ts.map +0 -1
- package/dist/src/redux/index.d.ts.map +0 -1
- package/dist/src/redux/reducers/index.d.ts.map +0 -1
- package/dist/src/redux/reducers/sessionWrapper.d.ts.map +0 -1
- package/dist/src/redux/selectors.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateUtils","TableUtils","DateTimeColumnFormatter","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","undefined","layout","startListening","updateSelectionValidators","prevProps","stopListening","error","info","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","columnName","name","columnType","type","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","filterMap","setFilterMap","clearAll","forEach","unsetFilterValueForLink","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","setPanelFilterMap","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","tableColumn","updateLinkInProgressType","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport { DateUtils, TableUtils } from '@deephaven/iris-grid';\nimport { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: LinkerState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\ntype DispatchProps = {\n setActiveTool: (activeTool: string) => void;\n setDashboardLinks: (dashboardId: string, links: Link[]) => void;\n addDashboardLinks: (dashboardId: string, links: Link[]) => void;\n deleteDashboardLinks: (dashboardId: string, linkIds: string[]) => void;\n setDashboardIsolatedLinkerPanelId: (\n dashboardId: string,\n panelId: string | undefined\n ) => void;\n setDashboardColumnSelectionValidator: (\n dashboardId: string,\n columnValidator:\n | ((panel: PanelComponent, column?: LinkColumn) => boolean)\n | undefined\n ) => void;\n};\n\nconst connector = connect<StateProps, DispatchProps, OwnProps>(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId == null) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n text = dateFilterFormatter.format(value);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId !== null) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === null\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/linker/Linker.tsx"],"names":["React","Component","connect","shortid","memoize","CSSTransition","ThemeExport","LayoutUtils","PanelEvent","DateUtils","TableUtils","DateTimeColumnFormatter","Log","getActiveTool","getTimeZone","setActiveTool","setActiveToolAction","getIsolatedLinkerPanelIdForDashboard","getLinksForDashboard","setDashboardLinks","setDashboardLinksAction","addDashboardLinks","addDashboardLinksAction","deleteDashboardLinks","deleteDashboardLinksAction","setDashboardIsolatedLinkerPanelId","setDashboardIsolatedLinkerPanelIdAction","setDashboardColumnSelectionValidator","setDashboardColumnSelectionValidatorAction","ToolType","ChartEvent","IrisGridEvent","InputFilterEvent","LinkerOverlayContent","LinkerUtils","isLinkablePanel","log","module","mapState","state","ownProps","activeTool","isolatedLinkerPanelId","localDashboardId","links","timeZone","connector","Linker","constructor","props","linkInProgress","isolateForPanelId","combinedLinks","start","push","filter","link","panelId","end","handleCancel","bind","handleDone","handlePanelCloned","handleFilterColumnSelect","handleColumnsChanged","handlePanelClosed","handleLayoutStateChanged","handleAllLinksDeleted","handleLinkDeleted","handleChartColumnSelect","handleGridColumnSelect","handleUpdateValues","handleStateChange","handleExited","isColumnSelectionValid","undefined","componentDidMount","layout","startListening","updateSelectionValidators","componentDidUpdate","prevProps","stopListening","componentDidCatch","error","info","componentWillUnmount","on","eventHub","COLUMN_SELECTED","DATA_SELECTED","STATE_CHANGED","CLONED","COLUMNS_CHANGED","CLOSED","off","DEFAULT","setState","panel","column","columnSelected","debug","isOverlayShown","getIdFromPanel","panelLinks","LINKER","length","columns","linksToDelete","findColumn","deleteLinks","isAlwaysEndPoint","overrideIsolatedLinkerPanelId","panelComponent","getComponentNameFromPanel","name","columnName","type","columnType","newLink","id","generate","isReversed","getLinkType","existingLinkPanelId","panelLinkEnd","addLinks","unsetFilterValueForLink","panelManager","endPanel","getOpenedPanelById","unsetFilterValue","setPanelFilterMap","filterMap","setFilterMap","clearAll","forEach","map","isolatedLinks","linkId","find","l","dataMap","panelFilterMap","Map","i","endPanelId","has","get","value","text","isDateType","dateFilterFormatter","showTimeZone","showTSeparator","defaultDateTimeFormatString","FULL_DATE_FORMAT","format","set","cloneConfig","cloneId","linksToAdd","cloneLinksForPanel","deleteLinksForPanelId","forceUpdate","updateLinkInProgressType","tableColumn","render","isLinkOverlayShown","disabled","linkerOverlayMessage","transitionMs","getCachedLinks"],"mappings":"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","sourcesContent":["import React, { Component, ErrorInfo } from 'react';\nimport { connect, ConnectedProps } from 'react-redux';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { CSSTransition } from 'react-transition-group';\nimport { ThemeExport } from '@deephaven/components';\nimport {\n LayoutUtils,\n PanelComponent,\n PanelEvent,\n PanelManager,\n} from '@deephaven/dashboard';\nimport type GoldenLayout from '@deephaven/golden-layout';\nimport { DateUtils, TableUtils } from '@deephaven/iris-grid';\nimport { DateTimeColumnFormatter } from '@deephaven/iris-grid/dist/formatters';\nimport Log from '@deephaven/log';\nimport {\n getActiveTool,\n getTimeZone,\n setActiveTool as setActiveToolAction,\n} from '@deephaven/redux';\nimport {\n getIsolatedLinkerPanelIdForDashboard,\n getLinksForDashboard,\n setDashboardLinks as setDashboardLinksAction,\n addDashboardLinks as addDashboardLinksAction,\n deleteDashboardLinks as deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId as setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator as setDashboardColumnSelectionValidatorAction,\n} from '../redux';\nimport ToolType from './ToolType';\nimport { ChartEvent, IrisGridEvent, InputFilterEvent } from '../events';\nimport LinkerOverlayContent from './LinkerOverlayContent';\nimport LinkerUtils, {\n isLinkablePanel,\n Link,\n LinkColumn,\n LinkDataMap,\n LinkFilterMap,\n LinkType,\n} from './LinkerUtils';\n\nconst log = Log.module('Linker');\n\ninterface StateProps {\n activeTool: string;\n isolatedLinkerPanelId?: string;\n links: Link[];\n timeZone: string;\n}\n\ninterface OwnProps {\n layout: GoldenLayout;\n panelManager: PanelManager;\n localDashboardId: string;\n}\n\nconst mapState = (state: LinkerState, ownProps: OwnProps): StateProps => ({\n activeTool: getActiveTool(state),\n isolatedLinkerPanelId: getIsolatedLinkerPanelIdForDashboard(\n state,\n ownProps.localDashboardId\n ),\n links: getLinksForDashboard(state, ownProps.localDashboardId),\n timeZone: getTimeZone(state),\n});\n\ntype DispatchProps = {\n setActiveTool: (activeTool: string) => void;\n setDashboardLinks: (dashboardId: string, links: Link[]) => void;\n addDashboardLinks: (dashboardId: string, links: Link[]) => void;\n deleteDashboardLinks: (dashboardId: string, linkIds: string[]) => void;\n setDashboardIsolatedLinkerPanelId: (\n dashboardId: string,\n panelId: string | undefined\n ) => void;\n setDashboardColumnSelectionValidator: (\n dashboardId: string,\n columnValidator:\n | ((panel: PanelComponent, column?: LinkColumn) => boolean)\n | undefined\n ) => void;\n};\n\nconst connector = connect<StateProps, DispatchProps, OwnProps>(mapState, {\n setActiveTool: setActiveToolAction,\n setDashboardLinks: setDashboardLinksAction,\n addDashboardLinks: addDashboardLinksAction,\n deleteDashboardLinks: deleteDashboardLinksAction,\n setDashboardIsolatedLinkerPanelId: setDashboardIsolatedLinkerPanelIdAction,\n setDashboardColumnSelectionValidator: setDashboardColumnSelectionValidatorAction,\n});\n\nexport type LinkerProps = OwnProps &\n StateProps &\n ConnectedProps<typeof connector>;\n\nexport type LinkerState = {\n linkInProgress?: Link;\n};\n\nexport class Linker extends Component<LinkerProps, LinkerState> {\n constructor(props: LinkerProps) {\n super(props);\n\n this.handleCancel = this.handleCancel.bind(this);\n this.handleDone = this.handleDone.bind(this);\n this.handlePanelCloned = this.handlePanelCloned.bind(this);\n this.handleFilterColumnSelect = this.handleFilterColumnSelect.bind(this);\n this.handleColumnsChanged = this.handleColumnsChanged.bind(this);\n this.handlePanelClosed = this.handlePanelClosed.bind(this);\n this.handleLayoutStateChanged = this.handleLayoutStateChanged.bind(this);\n this.handleAllLinksDeleted = this.handleAllLinksDeleted.bind(this);\n this.handleLinkDeleted = this.handleLinkDeleted.bind(this);\n this.handleChartColumnSelect = this.handleChartColumnSelect.bind(this);\n this.handleGridColumnSelect = this.handleGridColumnSelect.bind(this);\n this.handleUpdateValues = this.handleUpdateValues.bind(this);\n this.handleStateChange = this.handleStateChange.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.isColumnSelectionValid = this.isColumnSelectionValid.bind(this);\n\n this.state = { linkInProgress: undefined };\n }\n\n componentDidMount(): void {\n const { layout } = this.props;\n this.startListening(layout);\n this.updateSelectionValidators();\n }\n\n componentDidUpdate(prevProps: LinkerProps): void {\n const { activeTool, layout } = this.props;\n if (layout !== prevProps.layout) {\n this.stopListening(prevProps.layout);\n this.startListening(layout);\n }\n if (activeTool !== prevProps.activeTool) {\n this.updateSelectionValidators();\n }\n }\n\n componentDidCatch(error: Error, info: ErrorInfo): void {\n log.error('componentDidCatch', error, info);\n }\n\n componentWillUnmount(): void {\n const { layout } = this.props;\n this.stopListening(layout);\n }\n\n startListening(layout: GoldenLayout): void {\n layout.on('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.on(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.on(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.on(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.on(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.on(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.on(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.on(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.on(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n stopListening(layout: GoldenLayout): void {\n layout.off('stateChanged', this.handleLayoutStateChanged);\n\n const { eventHub } = layout;\n eventHub.off(IrisGridEvent.COLUMN_SELECTED, this.handleGridColumnSelect);\n eventHub.off(IrisGridEvent.DATA_SELECTED, this.handleUpdateValues);\n eventHub.off(IrisGridEvent.STATE_CHANGED, this.handleStateChange);\n eventHub.off(ChartEvent.COLUMN_SELECTED, this.handleChartColumnSelect);\n eventHub.off(PanelEvent.CLONED, this.handlePanelCloned);\n eventHub.off(\n InputFilterEvent.COLUMN_SELECTED,\n this.handleFilterColumnSelect\n );\n eventHub.off(InputFilterEvent.COLUMNS_CHANGED, this.handleColumnsChanged);\n eventHub.off(PanelEvent.CLOSED, this.handlePanelClosed);\n }\n\n handleCancel(): void {\n const { linkInProgress } = this.state;\n if (linkInProgress == null) {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleDone(): void {\n const { setActiveTool } = this.props;\n setActiveTool(ToolType.DEFAULT);\n this.setState({ linkInProgress: undefined });\n }\n\n handleChartColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column, true);\n }\n\n handleFilterColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n log.debug('handleFilterColumnSelect', this.isOverlayShown());\n const {\n links,\n localDashboardId,\n setActiveTool,\n setDashboardIsolatedLinkerPanelId,\n } = this.props;\n\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const panelLinks = links.filter(\n link => link.start?.panelId === panelId || link.end?.panelId === panelId\n );\n\n if (!this.isOverlayShown() && panelId != null) {\n // Initial click on the filter source button with linker inactive\n // Show linker in isolated mode for panel\n setActiveTool(ToolType.LINKER);\n setDashboardIsolatedLinkerPanelId(localDashboardId, panelId);\n\n if (panelLinks.length === 0) {\n // Source not linked - start new link in isolated linker mode\n // Need to pass panelId for overrideIsolatedLinkerPanelId\n // as redux prop update at this point not yet propagated\n this.columnSelected(panel, column, true, panelId);\n }\n return;\n }\n\n // Filter source clicked with linker active\n this.columnSelected(panel, column, true);\n }\n\n handleColumnsChanged(panel: PanelComponent, columns: LinkColumn[]): void {\n log.debug('handleColumnsChanged', panel, columns);\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n log.error('Invalid panelId', panel);\n return;\n }\n // Delete links that start or end on non-existent column in the updated panel\n const linksToDelete = links.filter(\n ({ start, end }) =>\n (start.panelId === panelId &&\n LinkerUtils.findColumn(columns, start) == null) ||\n (end != null &&\n end.panelId === panelId &&\n LinkerUtils.findColumn(columns, end) == null)\n );\n this.deleteLinks(linksToDelete);\n }\n\n handleGridColumnSelect(panel: PanelComponent, column: LinkColumn): void {\n this.columnSelected(panel, column);\n }\n\n /**\n * Track a column selection and build the link from it.\n * @param panel The panel component that is the source for the column selection\n * @param column The column that was selected\n * @param isAlwaysEndPoint True if the selection is always the end point, even if it's the first column selected. Defaults to false.\n * @param overrideIsolatedLinkerPanelId isolatedLinkerPanelId to use when method is called before prop changes propagate\n */\n columnSelected(\n panel: PanelComponent,\n column: LinkColumn,\n isAlwaysEndPoint = false,\n overrideIsolatedLinkerPanelId?: string\n ): void {\n if (overrideIsolatedLinkerPanelId == null && !this.isOverlayShown()) {\n return;\n }\n const { isolatedLinkerPanelId } = this.props;\n const { linkInProgress } = this.state;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return;\n }\n const panelComponent = LayoutUtils.getComponentNameFromPanel(panel);\n const { name: columnName, type: columnType } = column;\n if (linkInProgress == null || linkInProgress.start == null) {\n const newLink: Link = {\n id: shortid.generate(),\n start: {\n panelId,\n panelComponent,\n columnName,\n columnType,\n },\n // Link starts with type Invalid as linking a source to itself is not allowed\n type: 'invalid',\n isReversed: isAlwaysEndPoint,\n };\n\n log.debug('starting link', newLink);\n\n this.setState({ linkInProgress: newLink });\n } else {\n const { start, id, isReversed } = linkInProgress;\n const end = {\n panelId,\n panelComponent,\n columnName,\n columnType,\n };\n\n const type = LinkerUtils.getLinkType(\n isReversed ? end : start,\n isReversed ? start : end,\n overrideIsolatedLinkerPanelId ?? isolatedLinkerPanelId\n );\n\n switch (type) {\n case 'invalid':\n log.debug('Ignore invalid link connection', linkInProgress, end);\n return;\n case 'filterSource': {\n // filterSource links have a limit of 1 link per target\n // New link validation passed, delete existing links before adding the new one\n const { links } = this.props;\n const existingLinkPanelId = isReversed ? start.panelId : end.panelId;\n // In cases with multiple targets per panel (i.e. chart filters)\n // links would have to be filtered by panelId and columnName and columnType\n const linksToDelete = links.filter(\n ({ end: panelLinkEnd }) =>\n panelLinkEnd?.panelId === existingLinkPanelId\n );\n this.deleteLinks(linksToDelete);\n break;\n }\n case 'tableLink':\n // No-op\n break;\n }\n\n // Create a completed link from link in progress\n const newLink = {\n start: isReversed ? end : start,\n end: isReversed ? start : end,\n id,\n type,\n };\n log.info('creating link', newLink);\n\n this.setState({ linkInProgress: undefined }, () => {\n // Adding link after updating state\n // otherwise both new link and linkInProgress could be rendered at the same time\n // resulting in \"multiple children with same key\" error\n this.addLinks([newLink]);\n });\n }\n }\n\n unsetFilterValueForLink(link: Link): void {\n const { panelManager } = this.props;\n if (link.end) {\n const { end } = link;\n const { panelId, columnName, columnType } = end;\n const endPanel = panelManager.getOpenedPanelById(panelId);\n if (!endPanel) {\n log.debug(\n 'endPanel no longer exists, ignoring unsetFilterValue',\n panelId\n );\n } else if (isLinkablePanel(endPanel)) {\n endPanel.unsetFilterValue(columnName, columnType);\n } else {\n log.debug('endPanel.unsetFilterValue not implemented', endPanel);\n }\n }\n }\n\n /**\n * Set filters for a given panel ID\n * @param panelId ID of panel to set filters on\n * @param filterMap Map of column name to column type, text, and value\n */\n setPanelFilterMap(panelId: string, filterMap: LinkFilterMap): void {\n log.debug('Set filter data for panel:', panelId, filterMap);\n const { panelManager } = this.props;\n const panel = panelManager.getOpenedPanelById(panelId);\n if (!panel) {\n log.debug('panel no longer exists, ignoring setFilterMap', panelId);\n } else if (isLinkablePanel(panel)) {\n panel.setFilterMap(filterMap);\n } else {\n log.debug('panel.setFilterMap not implemented', panelId, panel);\n }\n }\n\n addLinks(links: Link[]): void {\n const { addDashboardLinks, localDashboardId } = this.props;\n addDashboardLinks(localDashboardId, links);\n }\n\n deleteLinks(links: Link[], clearAll = false): void {\n const { localDashboardId } = this.props;\n links.forEach(link => this.unsetFilterValueForLink(link));\n if (clearAll) {\n const { setDashboardLinks } = this.props;\n setDashboardLinks(localDashboardId, []);\n } else if (links.length > 0) {\n const { deleteDashboardLinks } = this.props;\n deleteDashboardLinks(\n localDashboardId,\n links.map(({ id }) => id)\n );\n }\n }\n\n handleAllLinksDeleted(): void {\n const { links, isolatedLinkerPanelId } = this.props;\n if (isolatedLinkerPanelId == null) {\n this.deleteLinks(links, true);\n } else {\n const isolatedLinks = links.filter(\n link =>\n link?.start?.panelId === isolatedLinkerPanelId ||\n link?.end?.panelId === isolatedLinkerPanelId\n );\n this.deleteLinks(isolatedLinks);\n }\n this.setState({ linkInProgress: undefined });\n }\n\n handleLinkDeleted(linkId: string): void {\n const { links } = this.props;\n const link = links.find(l => l.id === linkId);\n if (link) {\n this.deleteLinks([link]);\n } else {\n log.error('Unable to find link to delete', linkId);\n }\n }\n\n handleUpdateValues(panel: PanelComponent, dataMap: LinkDataMap): void {\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const { links, timeZone } = this.props;\n // Map of panel ID to filterMap\n const panelFilterMap = new Map();\n // Instead of setting filters one by one for each link,\n // combine them so they could be set in a single call per target panel\n for (let i = 0; i < links.length; i += 1) {\n const { start, end } = links[i];\n if (start.panelId === panelId && end != null) {\n const { panelId: endPanelId, columnName, columnType } = end;\n // Map of column name to column type and filter value\n const filterMap = panelFilterMap.has(endPanelId)\n ? panelFilterMap.get(endPanelId)\n : new Map();\n const { value } = dataMap[start.columnName];\n let text = `${value}`;\n if (TableUtils.isDateType(columnType)) {\n const dateFilterFormatter = new DateTimeColumnFormatter({\n timeZone,\n showTimeZone: false,\n showTSeparator: true,\n defaultDateTimeFormatString: DateUtils.FULL_DATE_FORMAT,\n });\n text = dateFilterFormatter.format(value);\n }\n filterMap.set(columnName, {\n columnType,\n text,\n value,\n });\n panelFilterMap.set(endPanelId, filterMap);\n }\n }\n\n // Apply combined filters to all target panels\n panelFilterMap.forEach((filterMap, endPanelId) => {\n this.setPanelFilterMap(endPanelId, filterMap);\n });\n }\n\n handlePanelCloned(panel: PanelComponent, cloneConfig: { id: string }): void {\n const { links } = this.props;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n const cloneId = cloneConfig.id;\n if (panelId != null) {\n const linksToAdd = LinkerUtils.cloneLinksForPanel(\n links,\n panelId,\n cloneId\n );\n this.addLinks(linksToAdd);\n }\n }\n\n handlePanelClosed(panelId: string): void {\n // Delete links on PanelEvent.CLOSED instead of UNMOUNT\n // because the panels can get unmounted on errors and we want to keep the links if that happens\n log.debug(`Panel ${panelId} closed, deleting links.`);\n this.deleteLinksForPanelId(panelId);\n }\n\n handleLayoutStateChanged(): void {\n this.forceUpdate();\n }\n\n handleStateChange(): void {\n this.forceUpdate();\n }\n\n handleExited(): void {\n // Has to be done after linker exit animation to avoid flashing non-isolated links\n const { localDashboardId, setDashboardIsolatedLinkerPanelId } = this.props;\n setDashboardIsolatedLinkerPanelId(localDashboardId, undefined);\n }\n\n /**\n * Delete all links for a provided panel ID. Needs to be done whenever a panel is closed or unmounted.\n * @param panelId The panel ID to delete links for\n */\n deleteLinksForPanelId(panelId: string): void {\n const { links } = this.props;\n for (let i = 0; i < links.length; i += 1) {\n const link = links[i];\n const { start, end, id } = link;\n if (start.panelId === panelId || end?.panelId === panelId) {\n this.handleLinkDeleted(id);\n }\n }\n }\n\n getCachedLinks = memoize((links, linkInProgress, isolateForPanelId) => {\n const combinedLinks = [...links];\n\n if (linkInProgress && linkInProgress.start) {\n combinedLinks.push(linkInProgress);\n }\n\n if (isolateForPanelId != null) {\n return combinedLinks.filter(\n link =>\n link?.start?.panelId === isolateForPanelId ||\n link?.end?.panelId === isolateForPanelId ||\n link?.end == null\n );\n }\n // Show all links in regular linker mode -- both isolated and not\n return combinedLinks;\n });\n\n isOverlayShown(): boolean {\n const { activeTool } = this.props;\n return activeTool === ToolType.LINKER;\n }\n\n updateSelectionValidators(): void {\n const {\n activeTool,\n setDashboardColumnSelectionValidator,\n localDashboardId,\n } = this.props;\n switch (activeTool) {\n case ToolType.LINKER:\n setDashboardColumnSelectionValidator(\n localDashboardId,\n this.isColumnSelectionValid\n );\n break;\n default:\n setDashboardColumnSelectionValidator(localDashboardId, undefined);\n break;\n }\n }\n\n updateLinkInProgressType(\n linkInProgress: Link,\n type: LinkType = 'invalid'\n ): void {\n this.setState({\n linkInProgress: {\n ...linkInProgress,\n type,\n },\n });\n }\n\n isColumnSelectionValid(\n panel: PanelComponent,\n tableColumn?: LinkColumn\n ): boolean {\n const { linkInProgress } = this.state;\n const { isolatedLinkerPanelId } = this.props;\n\n // Link not started yet - no need to update type\n if (linkInProgress?.start == null) {\n return true;\n }\n\n if (tableColumn == null) {\n // Link started, end point is not a valid target\n this.updateLinkInProgressType(linkInProgress);\n return false;\n }\n\n const { isReversed, start } = linkInProgress;\n const panelId = LayoutUtils.getIdFromPanel(panel);\n if (panelId == null) {\n return false;\n }\n\n const end = {\n panelId,\n panelComponent: LayoutUtils.getComponentNameFromPanel(panel),\n columnName: tableColumn.name,\n columnType: tableColumn.type,\n };\n\n const type = isReversed\n ? LinkerUtils.getLinkType(end, start, isolatedLinkerPanelId)\n : LinkerUtils.getLinkType(start, end, isolatedLinkerPanelId);\n\n this.updateLinkInProgressType(linkInProgress, type);\n\n return type !== 'invalid';\n }\n\n render(): JSX.Element {\n const { links, isolatedLinkerPanelId, panelManager } = this.props;\n const { linkInProgress } = this.state;\n\n const isLinkOverlayShown = this.isOverlayShown();\n const disabled = linkInProgress != null && linkInProgress.start != null;\n const linkerOverlayMessage =\n isolatedLinkerPanelId === null\n ? 'Click a column source, then click a column target to create a filter link. Remove a filter link by clicking again to erase. Click done when finished.'\n : 'Create a link between the source column button and a table column by clicking on one, then the other. Remove the link by clicking it directly. Click done when finished.';\n return (\n <>\n <CSSTransition\n in={isLinkOverlayShown}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n onExited={this.handleExited}\n >\n <LinkerOverlayContent\n disabled={disabled}\n panelManager={panelManager}\n links={this.getCachedLinks(\n links,\n linkInProgress,\n isolatedLinkerPanelId\n )}\n messageText={linkerOverlayMessage}\n onLinkDeleted={this.handleLinkDeleted}\n onAllLinksDeleted={this.handleAllLinksDeleted}\n onDone={this.handleDone}\n onCancel={this.handleCancel}\n />\n </CSSTransition>\n </>\n );\n }\n}\n\nexport default connector(Linker);\n"],"file":"Linker.js"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkerLink.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerLink.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,mBAAmB,CAAC;AAc3B,oBAAY,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,CAAC;AAEF,qBAAa,UAAW,SAAQ,aAAa,CAAC,eAAe,CAAC;IAC5D,MAAM,CAAC,YAAY;;mBAEN,IAAI;MAGf;IAEF;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;gBAMlD,KAAK,EAAE,eAAe;IAMlC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI;IAQpD,MAAM,IAAI,GAAG,CAAC,OAAO;CAiEtB;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
-
|
|
3
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4
|
-
|
|
5
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
6
|
-
|
|
7
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
8
|
-
|
|
9
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
10
|
-
|
|
11
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
12
|
-
|
|
13
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
14
|
-
|
|
15
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
16
|
-
|
|
17
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
18
|
-
|
|
19
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
20
|
-
|
|
21
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
22
|
-
|
|
23
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
24
2
|
|
|
25
3
|
import React, { PureComponent } from 'react';
|
|
@@ -31,121 +9,109 @@ var DROOP_EXPONENT = 1.5;
|
|
|
31
9
|
var TRIANGLE_HEIGHT = 12;
|
|
32
10
|
var TRIANGLE_BASE = 12;
|
|
33
11
|
var TRIANGLE_TIP = 2;
|
|
34
|
-
var TRIANGLE_HYPOTENUSE = Math.sqrt(
|
|
12
|
+
var TRIANGLE_HYPOTENUSE = Math.sqrt((TRIANGLE_BASE * 0.5) ** 2 + TRIANGLE_HEIGHT ** 2);
|
|
35
13
|
var TRIANGLE_THETA = Math.asin(TRIANGLE_BASE * 0.5 / TRIANGLE_HEIGHT);
|
|
36
14
|
var CLIP_RADIUS = 15;
|
|
37
|
-
export
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
_this = _super.call(this, props);
|
|
48
|
-
_this.handleClick = _this.handleClick.bind(_assertThisInitialized(_this));
|
|
49
|
-
return _this;
|
|
15
|
+
export class LinkerLink extends PureComponent {
|
|
16
|
+
/**
|
|
17
|
+
* Make an SVG path for a circle at the specified coordinates.
|
|
18
|
+
* @param x The x coordinate for the centre of the circle
|
|
19
|
+
* @param y The y coordinate for the centre of the circle
|
|
20
|
+
* @param r Radius of the circle
|
|
21
|
+
* @returns The SVG string path
|
|
22
|
+
*/
|
|
23
|
+
static makeCirclePath(x, y, r) {
|
|
24
|
+
return "M ".concat(x, " ").concat(y, " m -").concat(r, ",0 a ").concat(r, ",").concat(r, " 0 1,0 ").concat(r * 2, ",0 a ").concat(r, ",").concat(r, " 0 1,0 -").concat(r * 2, ",0 z");
|
|
50
25
|
}
|
|
51
26
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
event.preventDefault();
|
|
57
|
-
var _this$props = this.props,
|
|
58
|
-
id = _this$props.id,
|
|
59
|
-
onClick = _this$props.onClick;
|
|
60
|
-
onClick(id);
|
|
61
|
-
}
|
|
62
|
-
}, {
|
|
63
|
-
key: "render",
|
|
64
|
-
value: function render() {
|
|
65
|
-
var _this$props2 = this.props,
|
|
66
|
-
className = _this$props2.className,
|
|
67
|
-
x1 = _this$props2.x1,
|
|
68
|
-
y1 = _this$props2.y1,
|
|
69
|
-
x2 = _this$props2.x2,
|
|
70
|
-
y2 = _this$props2.y2,
|
|
71
|
-
id = _this$props2.id; // Path between the two points
|
|
72
|
-
|
|
73
|
-
var len = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
|
|
74
|
-
var theta = Math.atan2(y2 - y1, x2 - x1);
|
|
75
|
-
var xMult = Math.sin(theta);
|
|
76
|
-
var yMult = Math.cos(theta) + 2;
|
|
77
|
-
var maxX = window.innerWidth;
|
|
78
|
-
var maxY = window.innerHeight;
|
|
79
|
-
var minX = 0;
|
|
80
|
-
var minY = 0;
|
|
81
|
-
var qx = Math.max(minX, Math.min(x1 + (x2 - x1) / 2 + xMult * Math.pow(len * DROOP, DROOP_EXPONENT), maxX));
|
|
82
|
-
var qy = Math.max(minY, Math.min(y1 + (y2 - y1) / 2 + yMult * Math.pow(len * DROOP, DROOP_EXPONENT), maxY));
|
|
83
|
-
var path = "M ".concat(x1, " ").concat(y1, " Q ").concat(qx, " ").concat(qy, " ").concat(x2, " ").concat(y2); // path for a 100%, 100% rect, then two paths for circles at point
|
|
27
|
+
constructor(props) {
|
|
28
|
+
super(props);
|
|
29
|
+
this.handleClick = this.handleClick.bind(this);
|
|
30
|
+
}
|
|
84
31
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
32
|
+
handleClick(event) {
|
|
33
|
+
event.stopPropagation();
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
var {
|
|
36
|
+
id,
|
|
37
|
+
onClick
|
|
38
|
+
} = this.props;
|
|
39
|
+
onClick(id);
|
|
40
|
+
}
|
|
88
41
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
42
|
+
render() {
|
|
43
|
+
var {
|
|
44
|
+
className,
|
|
45
|
+
x1,
|
|
46
|
+
y1,
|
|
47
|
+
x2,
|
|
48
|
+
y2,
|
|
49
|
+
id
|
|
50
|
+
} = this.props; // Path between the two points
|
|
51
|
+
|
|
52
|
+
var len = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);
|
|
53
|
+
var theta = Math.atan2(y2 - y1, x2 - x1);
|
|
54
|
+
var xMult = Math.sin(theta);
|
|
55
|
+
var yMult = Math.cos(theta) + 2;
|
|
56
|
+
var maxX = window.innerWidth;
|
|
57
|
+
var maxY = window.innerHeight;
|
|
58
|
+
var minX = 0;
|
|
59
|
+
var minY = 0;
|
|
60
|
+
var qx = Math.max(minX, Math.min(x1 + (x2 - x1) / 2 + xMult * (len * DROOP) ** DROOP_EXPONENT, maxX));
|
|
61
|
+
var qy = Math.max(minY, Math.min(y1 + (y2 - y1) / 2 + yMult * (len * DROOP) ** DROOP_EXPONENT, maxY));
|
|
62
|
+
var path = "M ".concat(x1, " ").concat(y1, " Q ").concat(qx, " ").concat(qy, " ").concat(x2, " ").concat(y2); // path for a 100%, 100% rect, then two paths for circles at point
|
|
63
|
+
|
|
64
|
+
var selectClipPath = "M ".concat(minX, " ").concat(minY, " L ").concat(minX, " ").concat(maxY, " L ").concat(maxX, " ").concat(maxY, " L ").concat(maxX, " ").concat(minY, " z\n ").concat(LinkerLink.makeCirclePath(x1, y1, CLIP_RADIUS), "\n ").concat(LinkerLink.makeCirclePath(x2, y2, CLIP_RADIUS));
|
|
65
|
+
var clipPathId = "link-select-clip-".concat(id); // Calculate location of the end triangle
|
|
66
|
+
// We draw it instead of using markers to allow for transitions in the style
|
|
67
|
+
|
|
68
|
+
var endTheta = Math.atan2(y2 - qy, x2 - qx);
|
|
69
|
+
var t2theta = endTheta - TRIANGLE_THETA + Math.PI;
|
|
70
|
+
var t3theta = endTheta + TRIANGLE_THETA + Math.PI;
|
|
71
|
+
var tx1 = x2 + Math.cos(endTheta) * TRIANGLE_TIP;
|
|
72
|
+
var ty1 = y2 + Math.sin(endTheta) * TRIANGLE_TIP;
|
|
73
|
+
var tx2 = tx1 + Math.cos(t2theta) * TRIANGLE_HYPOTENUSE;
|
|
74
|
+
var ty2 = ty1 + Math.sin(t2theta) * TRIANGLE_HYPOTENUSE;
|
|
75
|
+
var tx3 = tx1 + Math.cos(t3theta) * TRIANGLE_HYPOTENUSE;
|
|
76
|
+
var ty3 = ty1 + Math.sin(t3theta) * TRIANGLE_HYPOTENUSE;
|
|
77
|
+
var points = "".concat(tx1, ",").concat(ty1, " ").concat(tx2, ",").concat(ty2, " ").concat(tx3, ",").concat(ty3);
|
|
78
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
79
|
+
className: className
|
|
80
|
+
}, /*#__PURE__*/React.createElement("clipPath", {
|
|
81
|
+
id: clipPathId
|
|
82
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
83
|
+
d: selectClipPath,
|
|
84
|
+
clipRule: "evenodd"
|
|
85
|
+
})), /*#__PURE__*/React.createElement("path", {
|
|
86
|
+
className: "link-select",
|
|
87
|
+
d: path,
|
|
88
|
+
onClick: this.handleClick,
|
|
89
|
+
clipPath: "url(#".concat(clipPathId, ")")
|
|
90
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
91
|
+
className: "link-background",
|
|
92
|
+
d: path
|
|
93
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
94
|
+
className: "link-foreground",
|
|
95
|
+
d: path
|
|
96
|
+
}), /*#__PURE__*/React.createElement("circle", {
|
|
97
|
+
className: "link-dot",
|
|
98
|
+
cx: x1,
|
|
99
|
+
cy: y1,
|
|
100
|
+
r: "5"
|
|
101
|
+
}), /*#__PURE__*/React.createElement("polygon", {
|
|
102
|
+
className: "link-triangle",
|
|
103
|
+
points: points
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
141
106
|
|
|
142
|
-
|
|
143
|
-
}(PureComponent);
|
|
107
|
+
}
|
|
144
108
|
|
|
145
109
|
_defineProperty(LinkerLink, "defaultProps", {
|
|
146
110
|
className: '',
|
|
147
|
-
|
|
111
|
+
|
|
112
|
+
onClick() {// no-op
|
|
148
113
|
}
|
|
114
|
+
|
|
149
115
|
});
|
|
150
116
|
|
|
151
117
|
export default LinkerLink;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/linker/LinkerLink.tsx"],"names":["React","PureComponent","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","LinkerLink","props","handleClick","bind","event","stopPropagation","preventDefault","id","onClick","className","x1","y1","x2","y2","len","theta","atan2","xMult","sin","yMult","cos","maxX","window","innerWidth","maxY","innerHeight","minX","minY","qx","max","min","qy","path","selectClipPath","
|
|
1
|
+
{"version":3,"sources":["../../src/linker/LinkerLink.tsx"],"names":["React","PureComponent","DROOP","DROOP_EXPONENT","TRIANGLE_HEIGHT","TRIANGLE_BASE","TRIANGLE_TIP","TRIANGLE_HYPOTENUSE","Math","sqrt","TRIANGLE_THETA","asin","CLIP_RADIUS","LinkerLink","makeCirclePath","x","y","r","constructor","props","handleClick","bind","event","stopPropagation","preventDefault","id","onClick","render","className","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","PI","t3theta","tx1","ty1","tx2","ty2","tx3","ty3","points"],"mappings":"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","sourcesContent":["import React, { MouseEvent, PureComponent } from 'react';\n\nimport './LinkerLink.scss';\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;\n\nexport type LinkerLinkProps = {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n id: string;\n className: string;\n onClick: (id: string) => void;\n};\n\nexport class LinkerLink extends PureComponent<LinkerLinkProps> {\n static defaultProps = {\n className: '',\n onClick(): 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 constructor(props: LinkerLinkProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(event: MouseEvent<SVGPathElement>): void {\n event.stopPropagation();\n event.preventDefault();\n\n const { id, onClick } = this.props;\n onClick(id);\n }\n\n render(): JSX.Element {\n const { className, x1, y1, x2, y2, id } = this.props;\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 return (\n <svg className={className}>\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 clipPath={`url(#${clipPathId})`}\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 );\n }\n}\n\nexport default LinkerLink;\n"],"file":"LinkerLink.js"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinkerOverlayContent.d.ts","sourceRoot":"","sources":["../../src/linker/LinkerOverlayContent.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAe,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAEL,IAAI,EACJ,gBAAgB,EAChB,SAAS,EACV,MAAM,eAAe,CAAC;AAEvB,OAAO,6BAA6B,CAAC;AAIrC,oBAAY,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,oBAAY,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,SAAS,CACjD,yBAAyB,EACzB,yBAAyB,CAC1B;IACC,MAAM,CAAC,YAAY;;MAEjB;gBAEU,KAAK,EAAE,yBAAyB;IAY5C,iBAAiB,IAAI,IAAI;IAKzB,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAItD,oBAAoB,IAAI,IAAI;IAI5B,6DAA6D;IAC7D,qBAAqB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB;IA+B7D,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC,mBAAmB,IAAI,IAAI;IAK3B,MAAM,IAAI,GAAG,CAAC,OAAO;CAoFtB;AAED,eAAe,oBAAoB,CAAC"}
|