This is an automated email from the ASF dual-hosted git repository.

stephenlyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 95b43238a0 fix(dashboard): Remove bar at bottom of dashboard edit 
sidebar (#21807)
95b43238a0 is described below

commit 95b43238a04e2b5c27bd6ab45dccfc23fab624a2
Author: Cody Leff <[email protected]>
AuthorDate: Thu Oct 27 08:58:00 2022 -0600

    fix(dashboard): Remove bar at bottom of dashboard edit sidebar (#21807)
---
 superset-frontend/package-lock.json                |  42 ------
 superset-frontend/package.json                     |   2 -
 .../BuilderComponentPane.test.tsx                  |   2 +-
 .../components/BuilderComponentPane/index.tsx      | 158 +++++++++------------
 .../DashboardBuilder/DashboardBuilder.tsx          |   7 +-
 .../src/dashboard/components/SliceAdder.jsx        |  59 +++++---
 .../src/dashboard/components/SliceAdder.test.jsx   |  12 +-
 .../dashboard/stylesheets/builder-sidepane.less    | 132 -----------------
 .../src/dashboard/stylesheets/index.less           |   1 -
 9 files changed, 107 insertions(+), 308 deletions(-)

diff --git a/superset-frontend/package-lock.json 
b/superset-frontend/package-lock.json
index 1782a25150..4174d104aa 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -121,7 +121,6 @@
         "react-select": "^3.1.0",
         "react-sortable-hoc": "^1.11.0",
         "react-split": "^2.0.9",
-        "react-sticky": "^6.0.3",
         "react-syntax-highlighter": "^15.4.5",
         "react-table": "^7.6.3",
         "react-transition-group": "^2.5.3",
@@ -194,7 +193,6 @@
         "@types/react-redux": "^7.1.10",
         "@types/react-router-dom": "^5.1.5",
         "@types/react-select": "^3.0.19",
-        "@types/react-sticky": "^6.0.3",
         "@types/react-table": "^7.0.19",
         "@types/react-ultimate-pagination": "^1.2.0",
         "@types/react-virtualized": "^9.21.10",
@@ -18449,15 +18447,6 @@
         "@types/react-transition-group": "*"
       }
     },
-    "node_modules/@types/react-sticky": {
-      "version": "6.0.3",
-      "resolved": 
"https://registry.npmjs.org/@types/react-sticky/-/react-sticky-6.0.3.tgz";,
-      "integrity": 
"sha512-tW0Y1hTr2Tao4yX58iKl0i7BaqrdObGXAzsyzd8VGVrWVEgbQuV6P6QKVd/kFC7FroXyelftiVNJ09pnfkcjww==",
-      "dev": true,
-      "dependencies": {
-        "@types/react": "*"
-      }
-    },
     "node_modules/@types/react-syntax-highlighter": {
       "version": "11.0.5",
       "resolved": 
"https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz";,
@@ -45551,19 +45540,6 @@
       "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.2.tgz";,
       "integrity": 
"sha512-72C7zcQePzlmWqPOKkB2Ro0sUmnWSx+qEWXjLJKk6Qp4jAkFRz1hJgJb+ay6ZQyz/Aw9r8N/PZiCEKbPVpFoDQ=="
     },
-    "node_modules/react-sticky": {
-      "version": "6.0.3",
-      "resolved": 
"https://registry.npmjs.org/react-sticky/-/react-sticky-6.0.3.tgz";,
-      "integrity": 
"sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ==",
-      "dependencies": {
-        "prop-types": "^15.5.8",
-        "raf": "^3.3.0"
-      },
-      "peerDependencies": {
-        "react": ">=15",
-        "react-dom": ">=15"
-      }
-    },
     "node_modules/react-style-proptype": {
       "version": "3.2.2",
       "resolved": 
"https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.2.2.tgz";,
@@ -71323,15 +71299,6 @@
         "@types/react-transition-group": "*"
       }
     },
-    "@types/react-sticky": {
-      "version": "6.0.3",
-      "resolved": 
"https://registry.npmjs.org/@types/react-sticky/-/react-sticky-6.0.3.tgz";,
-      "integrity": 
"sha512-tW0Y1hTr2Tao4yX58iKl0i7BaqrdObGXAzsyzd8VGVrWVEgbQuV6P6QKVd/kFC7FroXyelftiVNJ09pnfkcjww==",
-      "dev": true,
-      "requires": {
-        "@types/react": "*"
-      }
-    },
     "@types/react-syntax-highlighter": {
       "version": "11.0.5",
       "resolved": 
"https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz";,
@@ -92432,15 +92399,6 @@
         "react-style-proptype": "^3.2.2"
       }
     },
-    "react-sticky": {
-      "version": "6.0.3",
-      "resolved": 
"https://registry.npmjs.org/react-sticky/-/react-sticky-6.0.3.tgz";,
-      "integrity": 
"sha512-LNH4UJlRatOqo29/VHxDZOf6fwbgfgcHO4mkEFvrie5FuaZCSTGtug5R8NGqJ0kSnX8gHw8qZN37FcvnFBJpTQ==",
-      "requires": {
-        "prop-types": "^15.5.8",
-        "raf": "^3.3.0"
-      }
-    },
     "react-style-proptype": {
       "version": "3.2.2",
       "resolved": 
"https://registry.npmjs.org/react-style-proptype/-/react-style-proptype-3.2.2.tgz";,
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index 5d09c502d2..b78caa278f 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -185,7 +185,6 @@
     "react-select": "^3.1.0",
     "react-sortable-hoc": "^1.11.0",
     "react-split": "^2.0.9",
-    "react-sticky": "^6.0.3",
     "react-syntax-highlighter": "^15.4.5",
     "react-table": "^7.6.3",
     "react-transition-group": "^2.5.3",
@@ -258,7 +257,6 @@
     "@types/react-redux": "^7.1.10",
     "@types/react-router-dom": "^5.1.5",
     "@types/react-select": "^3.0.19",
-    "@types/react-sticky": "^6.0.3",
     "@types/react-table": "^7.0.19",
     "@types/react-ultimate-pagination": "^1.2.0",
     "@types/react-virtualized": "^9.21.10",
diff --git 
a/superset-frontend/src/dashboard/components/BuilderComponentPane/BuilderComponentPane.test.tsx
 
b/superset-frontend/src/dashboard/components/BuilderComponentPane/BuilderComponentPane.test.tsx
index a5ff5b1314..be2b429f59 100644
--- 
a/superset-frontend/src/dashboard/components/BuilderComponentPane/BuilderComponentPane.test.tsx
+++ 
b/superset-frontend/src/dashboard/components/BuilderComponentPane/BuilderComponentPane.test.tsx
@@ -24,7 +24,7 @@ import BuilderComponentPane from '.';
 jest.mock('src/dashboard/containers/SliceAdder');
 
 test('BuilderComponentPane has correct tabs in correct order', () => {
-  render(<BuilderComponentPane isStandalone={false} topOffset={115} />);
+  render(<BuilderComponentPane topOffset={115} />);
   const tabs = screen.getAllByRole('tab');
   expect(tabs).toHaveLength(2);
   expect(tabs[0]).toHaveTextContent('Charts');
diff --git 
a/superset-frontend/src/dashboard/components/BuilderComponentPane/index.tsx 
b/superset-frontend/src/dashboard/components/BuilderComponentPane/index.tsx
index 39e7fd4bc4..d9b34cfed2 100644
--- a/superset-frontend/src/dashboard/components/BuilderComponentPane/index.tsx
+++ b/superset-frontend/src/dashboard/components/BuilderComponentPane/index.tsx
@@ -18,12 +18,9 @@
  */
 /* eslint-env browser */
 import React from 'react';
+import { rgba } from 'emotion-rgba';
 import Tabs from 'src/components/Tabs';
-import { StickyContainer, Sticky } from 'react-sticky';
-import { ParentSize } from '@vx/responsive';
-
-import { t, styled } from '@superset-ui/core';
-
+import { t, css, SupersetTheme } from '@superset-ui/core';
 import SliceAdder from 'src/dashboard/containers/SliceAdder';
 import dashboardComponents from 
'src/visualizations/presets/dashboardComponents';
 import NewColumn from '../gridComponents/new/NewColumn';
@@ -34,99 +31,72 @@ import NewTabs from '../gridComponents/new/NewTabs';
 import NewMarkdown from '../gridComponents/new/NewMarkdown';
 import NewDynamicComponent from '../gridComponents/new/NewDynamicComponent';
 
-export interface BCPProps {
-  isStandalone: boolean;
-  topOffset: number;
-}
-
-const SUPERSET_HEADER_HEIGHT = 59;
-const SIDEPANE_ADJUST_OFFSET = 4;
-const TOP_PANEL_OFFSET = 210;
-
-const BuilderComponentPaneTabs = styled(Tabs)`
-  line-height: inherit;
-  margin-top: ${({ theme }) => theme.gridUnit * 2}px;
-`;
-
-const DashboardBuilderSidepane = styled.div<{
-  topOffset: number;
-}>`
-  height: calc(100% - ${TOP_PANEL_OFFSET}px);
-  position: fixed;
-  right: 0;
-  top: 0;
-`;
+const BUILDER_PANE_WIDTH = 374;
 
-const BuilderComponentPane: React.FC<BCPProps> = ({
-  isStandalone,
-  topOffset = 0,
-}) => (
-  <DashboardBuilderSidepane
-    topOffset={topOffset}
-    className="dashboard-builder-sidepane"
+const BuilderComponentPane = ({ topOffset = 0 }) => (
+  <div
     data-test="dashboard-builder-sidepane"
+    css={css`
+      position: sticky;
+      right: 0;
+      top: ${topOffset}px;
+      height: calc(100vh - ${topOffset}px);
+      width: ${BUILDER_PANE_WIDTH}px;
+    `}
   >
-    <ParentSize>
-      {({ height }) => (
-        <StickyContainer>
-          <Sticky topOffset={-topOffset} bottomOffset={Infinity}>
-            {({ style, isSticky }: { style: any; isSticky: boolean }) => {
-              const { pageYOffset } = window;
-              const hasHeader =
-                pageYOffset < SUPERSET_HEADER_HEIGHT && !isStandalone;
-              const withHeaderTopOffset =
-                topOffset +
-                (SUPERSET_HEADER_HEIGHT - pageYOffset - 
SIDEPANE_ADJUST_OFFSET);
+    <div
+      css={(theme: SupersetTheme) => css`
+        position: absolute;
+        height: 100%;
+        width: ${BUILDER_PANE_WIDTH}px;
+        box-shadow: -4px 0 4px 0 ${rgba(theme.colors.grayscale.dark2, 0.1)};
+        background-color: ${theme.colors.grayscale.light5};
+      `}
+    >
+      <Tabs
+        data-test="dashboard-builder-component-pane-tabs-navigation"
+        id="tabs"
+        css={(theme: SupersetTheme) => css`
+          line-height: inherit;
+          margin-top: ${theme.gridUnit * 2}px;
+          height: 100%;
 
-              return (
-                <div
-                  className="viewport"
-                  style={{
-                    ...style,
-                    top: hasHeader ? withHeaderTopOffset : topOffset,
-                  }}
-                >
-                  <BuilderComponentPaneTabs
-                    id="tabs"
-                    className="tabs-components"
-                    
data-test="dashboard-builder-component-pane-tabs-navigation"
-                  >
-                    <Tabs.TabPane
-                      key={1}
-                      tab={t('Charts')}
-                      className="tab-charts"
-                    >
-                      <SliceAdder
-                        height={
-                          height + (isSticky ? SUPERSET_HEADER_HEIGHT : 0)
-                        }
-                      />
-                    </Tabs.TabPane>
-                    <Tabs.TabPane key={2} tab={t('Layout elements')}>
-                      <NewTabs />
-                      <NewRow />
-                      <NewColumn />
-                      <NewHeader />
-                      <NewMarkdown />
-                      <NewDivider />
-                      {dashboardComponents
-                        .getAll()
-                        .map(({ key: componentKey, metadata }) => (
-                          <NewDynamicComponent
-                            metadata={metadata}
-                            componentKey={componentKey}
-                          />
-                        ))}
-                    </Tabs.TabPane>
-                  </BuilderComponentPaneTabs>
-                </div>
-              );
-            }}
-          </Sticky>
-        </StickyContainer>
-      )}
-    </ParentSize>
-  </DashboardBuilderSidepane>
+          & .ant-tabs-content-holder {
+            height: 100%;
+            & .ant-tabs-content {
+              height: 100%;
+            }
+          }
+        `}
+      >
+        <Tabs.TabPane
+          key={1}
+          tab={t('Charts')}
+          css={css`
+            height: 100%;
+          `}
+        >
+          <SliceAdder />
+        </Tabs.TabPane>
+        <Tabs.TabPane key={2} tab={t('Layout elements')}>
+          <NewTabs />
+          <NewRow />
+          <NewColumn />
+          <NewHeader />
+          <NewMarkdown />
+          <NewDivider />
+          {dashboardComponents
+            .getAll()
+            .map(({ key: componentKey, metadata }) => (
+              <NewDynamicComponent
+                metadata={metadata}
+                componentKey={componentKey}
+              />
+            ))}
+        </Tabs.TabPane>
+      </Tabs>
+    </div>
+  </div>
 );
 
 export default BuilderComponentPane;
diff --git 
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
 
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
index c99d1d866c..cd0cfdb3fc 100644
--- 
a/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
+++ 
b/superset-frontend/src/dashboard/components/DashboardBuilder/DashboardBuilder.tsx
@@ -487,12 +487,7 @@ const DashboardBuilder: FC<DashboardBuilderProps> = () => {
             ) : (
               <Loading />
             )}
-            {editMode && (
-              <BuilderComponentPane
-                isStandalone={!!standaloneMode}
-                topOffset={barTopOffset}
-              />
-            )}
+            {editMode && <BuilderComponentPane topOffset={barTopOffset} />}
           </StyledDashboardContent>
         </div>
       </StyledContent>
diff --git a/superset-frontend/src/dashboard/components/SliceAdder.jsx 
b/superset-frontend/src/dashboard/components/SliceAdder.jsx
index 8a6368f388..7f8792dcaf 100644
--- a/superset-frontend/src/dashboard/components/SliceAdder.jsx
+++ b/superset-frontend/src/dashboard/components/SliceAdder.jsx
@@ -19,7 +19,7 @@
 /* eslint-env browser */
 import React from 'react';
 import PropTypes from 'prop-types';
-import { List } from 'react-virtualized';
+import { List, AutoSizer } from 'react-virtualized';
 import { createFilter } from 'react-search-input';
 import {
   t,
@@ -57,7 +57,6 @@ const propTypes = {
   userId: PropTypes.string.isRequired,
   selectedSliceIds: PropTypes.arrayOf(PropTypes.number),
   editMode: PropTypes.bool,
-  height: PropTypes.number,
   filterboxMigrationState: FILTER_BOX_MIGRATION_STATES,
   dashboardId: PropTypes.number,
 };
@@ -66,7 +65,6 @@ const defaultProps = {
   selectedSliceIds: [],
   editMode: false,
   errorMessage: '',
-  height: window.innerHeight,
   filterboxMigrationState: FILTER_BOX_MIGRATION_STATES.NOOP,
 };
 
@@ -80,9 +78,6 @@ const KEYS_TO_SORT = {
 
 const DEFAULT_SORT_KEY = 'changed_on';
 
-const MARGIN_BOTTOM = 16;
-const SIDEPANE_HEADER_HEIGHT = 30;
-const SLICE_ADDER_CONTROL_HEIGHT = 64;
 const DEFAULT_CELL_HEIGHT = 128;
 
 const Controls = styled.div`
@@ -119,6 +114,11 @@ const NewChartButton = styled(Button)`
   `}
 `;
 
+export const ChartList = styled.div`
+  flex-grow: 1;
+  min-height: 0;
+`;
+
 class SliceAdder extends React.Component {
   static sortByComparator(attr) {
     const desc = attr === 'changed_on' ? -1 : 1;
@@ -282,13 +282,14 @@ class SliceAdder extends React.Component {
   }
 
   render() {
-    const slicesListHeight =
-      this.props.height -
-      SIDEPANE_HEADER_HEIGHT -
-      SLICE_ADDER_CONTROL_HEIGHT -
-      MARGIN_BOTTOM;
     return (
-      <div className="slice-adder-container">
+      <div
+        css={css`
+          height: 100%;
+          display: flex;
+          flex-direction: column;
+        `}
+      >
         <NewChartButtonContainer>
           <NewChartButton
             buttonStyle="link"
@@ -326,19 +327,31 @@ class SliceAdder extends React.Component {
         </Controls>
         {this.props.isLoading && <Loading />}
         {!this.props.isLoading && this.state.filteredSlices.length > 0 && (
-          <List
-            width={376}
-            height={slicesListHeight}
-            rowCount={this.state.filteredSlices.length}
-            rowHeight={DEFAULT_CELL_HEIGHT}
-            rowRenderer={this.rowRenderer}
-            searchTerm={this.state.searchTerm}
-            sortBy={this.state.sortBy}
-            selectedSliceIds={this.props.selectedSliceIds}
-          />
+          <ChartList>
+            <AutoSizer>
+              {({ height, width }) => (
+                <List
+                  width={width}
+                  height={height}
+                  rowCount={this.state.filteredSlices.length}
+                  rowHeight={DEFAULT_CELL_HEIGHT}
+                  rowRenderer={this.rowRenderer}
+                  searchTerm={this.state.searchTerm}
+                  sortBy={this.state.sortBy}
+                  selectedSliceIds={this.props.selectedSliceIds}
+                />
+              )}
+            </AutoSizer>
+          </ChartList>
         )}
         {this.props.errorMessage && (
-          <div className="error-message">{this.props.errorMessage}</div>
+          <div
+            css={css`
+              padding: 16px;
+            `}
+          >
+            {this.props.errorMessage}
+          </div>
         )}
         {/* Drag preview is just a single fixed-position element */}
         <AddSliceDragPreview slices={this.state.filteredSlices} />
diff --git a/superset-frontend/src/dashboard/components/SliceAdder.test.jsx 
b/superset-frontend/src/dashboard/components/SliceAdder.test.jsx
index 7bfd971cb7..72327d63c7 100644
--- a/superset-frontend/src/dashboard/components/SliceAdder.test.jsx
+++ b/superset-frontend/src/dashboard/components/SliceAdder.test.jsx
@@ -20,10 +20,9 @@ import React from 'react';
 import { shallow } from 'enzyme';
 import sinon from 'sinon';
 
-import { List } from 'react-virtualized';
-
-import SliceAdder from 'src/dashboard/components/SliceAdder';
+import SliceAdder, { ChartList } from 'src/dashboard/components/SliceAdder';
 import { sliceEntitiesForDashboard as mockSliceEntities } from 
'spec/fixtures/mockSliceEntities';
+import { styledShallow } from 'spec/helpers/theming';
 
 describe('SliceAdder', () => {
   const mockEvent = {
@@ -39,7 +38,6 @@ describe('SliceAdder', () => {
     fetchSortedSlices: () => {},
     selectedSliceIds: [127, 128],
     userId: '1',
-    height: 100,
   };
   const errorProps = {
     ...props,
@@ -72,10 +70,10 @@ describe('SliceAdder', () => {
     });
   });
 
-  it('render List', () => {
-    const wrapper = shallow(<SliceAdder {...props} />);
+  it('render chart list', () => {
+    const wrapper = styledShallow(<SliceAdder {...props} />);
     wrapper.setState({ filteredSlices: Object.values(props.slices) });
-    expect(wrapper.find(List)).toExist();
+    expect(wrapper.find(ChartList)).toExist();
   });
 
   it('render error', () => {
diff --git a/superset-frontend/src/dashboard/stylesheets/builder-sidepane.less 
b/superset-frontend/src/dashboard/stylesheets/builder-sidepane.less
deleted file mode 100644
index ad26877771..0000000000
--- a/superset-frontend/src/dashboard/stylesheets/builder-sidepane.less
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-@import '../../assets/stylesheets/less/variables.less';
-
-.dashboard-builder-sidepane {
-  .dashboard-builder-sidepane-header {
-    font-size: @font-size-l;
-    font-weight: @font-weight-bold;
-    border-top: 1px solid @gray-light;
-    border-bottom: 1px solid @gray-light;
-    padding: 16px;
-    display: flex;
-    align-items: center;
-  }
-
-  .trigger {
-    font-size: @font-size-l;
-    color: @almost-black;
-    opacity: 1;
-    margin-left: auto;
-    cursor: pointer;
-  }
-
-  .slices-layer .trigger {
-    margin-left: 0;
-    margin-right: 20px;
-  }
-
-  .viewport {
-    position: absolute;
-    transform: none !important;
-    overflow: hidden;
-    width: @builder-pane-width;
-    height: 100%;
-    box-shadow: -4px 0 4px 0 fade(@darkest, @opacity-light);
-    background-color: @lightest;
-  }
-
-  .slider-container {
-    position: absolute;
-    background: @lightest;
-    width: @builder-pane-width * 2;
-    height: 100vh;
-    display: flex;
-    transition: all @timing-normal ease;
-
-    &.slide-in {
-      left: -@builder-pane-width;
-    }
-
-    &.slide-out {
-      left: 0;
-    }
-
-    .slide-content {
-      width: @builder-pane-width;
-    }
-  }
-
-  .component-layer .new-component.static,
-  .slices-layer .dashboard-builder-sidepane-header {
-    cursor: pointer;
-  }
-
-  .component-layer {
-    .new-component.static {
-      cursor: pointer;
-    }
-  }
-
-  .new-component-label {
-    flex-grow: 1;
-  }
-
-  .slice-adder-container {
-    position: relative;
-    background-color: white;
-    min-height: 200px; /* for loader positioning */
-
-    .error-message {
-      padding: 16px;
-    }
-
-    .controls {
-      display: flex;
-      padding: 16px;
-
-      /* the input is wrapped in a div */
-      .search-input {
-        flex-grow: 1;
-        margin-right: 16px;
-      }
-
-      .dropdown.btn-group button,
-      input {
-        font-size: @font-size-m;
-        padding: 7px 12px;
-        height: 32px;
-        border: 1px solid @gray-light;
-      }
-
-      input {
-        width: 100%;
-
-        &:focus {
-          outline: none;
-          border-color: @gray;
-        }
-      }
-    }
-
-    .ReactVirtualized__Grid.ReactVirtualized__List:focus {
-      outline: none;
-    }
-  }
-}
diff --git a/superset-frontend/src/dashboard/stylesheets/index.less 
b/superset-frontend/src/dashboard/stylesheets/index.less
index ba46688dfe..0b11c2bec8 100644
--- a/superset-frontend/src/dashboard/stylesheets/index.less
+++ b/superset-frontend/src/dashboard/stylesheets/index.less
@@ -19,7 +19,6 @@
 @import '../../assets/stylesheets/less/variables.less';
 
 @import './builder.less';
-@import './builder-sidepane.less';
 @import './dashboard.less';
 @import './dnd.less';
 @import './filter-scope-selector.less';

Reply via email to