diff --git a/packages/core/src/renderer/components/+catalog/catalog-menu.tsx b/packages/core/src/renderer/components/+catalog/catalog-menu.tsx index 73121e3b1c..bbbac83ed5 100644 --- a/packages/core/src/renderer/components/+catalog/catalog-menu.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog-menu.tsx @@ -16,14 +16,15 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import filteredCategoriesInjectable from "../../../common/catalog/filtered-categories.injectable"; import { TreeGroup, TreeItem, TreeView } from "../tree-view/tree-view"; import { browseCatalogTab } from "./catalog-browse-tab"; +import { HorizontalLine } from "../horizontal-line/horizontal-line"; export interface CatalogMenuProps { activeTab: string | undefined; onItemClick: (id: string) => void; } -function getCategoryIcon(category: CatalogCategory) { - const { icon } = category.metadata ?? {}; +function CategoryIcon(props: { category: CatalogCategory }) { + const { icon } = props.category.metadata ?? {}; if (typeof icon === "string") { return Icon.isSvg(icon) @@ -42,41 +43,38 @@ const NonInjectedCatalogMenu = observer(({ activeTab, filteredCategories, onItemClick, -}: CatalogMenuProps & Dependencies) => { - console.log(treeStyles); - - return ( -
-
Catalog
- - onItemClick("*")} - selected={activeTab === browseCatalogTab} /> - Categories
} - > - {filteredCategories.get() - .map(category => ( - - {getCategoryIcon(category)} - - - )} - selected={activeTab === category.getId()} - data-testid={`${category.getId()}-tab`} - onClick={() => onItemClick(category.getId())} /> - ))} - - - - ); -}); +}: CatalogMenuProps & Dependencies) => ( +
+
Catalog
+ + onItemClick("*")} + selected={activeTab === browseCatalogTab} + /> + + Categories
} + > + {filteredCategories.get() + .map(category => ( + } + label={} + selected={activeTab === category.getId()} + data-testid={`${category.getId()}-tab`} + onClick={() => onItemClick(category.getId())} + /> + ))} + + + +)); export const CatalogMenu = withInjectables(NonInjectedCatalogMenu, { getProps: (di, props) => ({ diff --git a/packages/core/src/renderer/components/+catalog/catalog-tree.module.scss b/packages/core/src/renderer/components/+catalog/catalog-tree.module.scss index f190d04417..60d595df45 100644 --- a/packages/core/src/renderer/components/+catalog/catalog-tree.module.scss +++ b/packages/core/src/renderer/components/+catalog/catalog-tree.module.scss @@ -23,39 +23,8 @@ .content { min-height: 26px; line-height: 1.3; - padding: 2px var(--padding) 2px 0; - - &:hover { - background-color: var(--sidebarItemHoverBackground); - border-radius: 2px; - } - - &:active { - color: white; - background-color: var(--blue); - } } .group { margin-left: 0px; - - .iconContainer { - margin-left: 28px; - margin-top: 2px; - align-self: flex-start; - } -} - -.selected { - & > *:first-child { - background-color: var(--blue); - color: white; - border-radius: 2px; - } -} - -.iconContainer { - width: 21px; - margin-left: 5px; - margin-right: 0; } diff --git a/packages/core/src/renderer/components/+catalog/catalog.tsx b/packages/core/src/renderer/components/+catalog/catalog.tsx index 42578dcad7..f644e52a2d 100644 --- a/packages/core/src/renderer/components/+catalog/catalog.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog.tsx @@ -177,7 +177,6 @@ class NonInjectedCatalog extends React.Component { } onTabChange = action((tabId: string | null) => { - console.log(tabId); const activeCategory = this.categories.find(category => category.getId() === tabId); this.props.emitEvent({ diff --git a/packages/core/src/renderer/components/horizontal-line/horizontal-line.module.scss b/packages/core/src/renderer/components/horizontal-line/horizontal-line.module.scss index 91dc5106d3..b21c21c62b 100644 --- a/packages/core/src/renderer/components/horizontal-line/horizontal-line.module.scss +++ b/packages/core/src/renderer/components/horizontal-line/horizontal-line.module.scss @@ -20,6 +20,9 @@ $baseline: 8px; +@include horizontalLineSize('xxs', 0.5 * $baseline); +@include horizontalLineSize('xs', 1 * $baseline); @include horizontalLineSize('sm', 2 * $baseline); @include horizontalLineSize('md', 3 * $baseline); +@include horizontalLineSize('lg', 4 * $baseline); @include horizontalLineSize('xl', 5 * $baseline); diff --git a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx index 107a269b35..63fad2d5ea 100644 --- a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx +++ b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx @@ -7,7 +7,7 @@ import styles from "./horizontal-line.module.scss"; import { cssNames } from "../../utils"; interface HorizontalLineProps { - size?: "sm" | "md" | "xl"; + size?: "xxs" | "xs" | "sm" | "md" | "lg" | "xl"; } export const HorizontalLine = ({ size = "xl" }: HorizontalLineProps = { size: "xl" }) => { diff --git a/packages/core/src/renderer/components/tree-view/tree-view.module.scss b/packages/core/src/renderer/components/tree-view/tree-view.module.scss new file mode 100644 index 0000000000..9f54c9ad4d --- /dev/null +++ b/packages/core/src/renderer/components/tree-view/tree-view.module.scss @@ -0,0 +1,63 @@ +.treeItem { + display: flex; + flex-direction: row; + padding: 2px var(--padding) 2px 0; + cursor: pointer; + + &:hover { + background-color: var(--sidebarItemHoverBackground); + } + + &.selected:hover { + background-color: var(--blue); + } +} + +.selected { + background-color: var(--blue); + color: white; + border-radius: 2px; + width: 100%; +} + +.treeGroup { + display: flex; + flex-direction: column; + cursor: pointer; +} + +.contents { + padding-left: 25px; + transition: all 300ms ease; + overflow: hidden; + + &.expanded { + max-height: 100%; + } + + &:not(.expanded) { + max-height: 0; + } +} + +.selected { + color: white; + background-color: var(--blue); +} + +.group { + display: flex; + flex-direction: row; +} + +.iconContainer { + align-self: flex-start; + width: 21px; + margin-left: 5px; + margin-right: 5px; +} + +.treeView { + display: flex; + flex-direction: column; +} diff --git a/packages/core/src/renderer/components/tree-view/tree-view.tsx b/packages/core/src/renderer/components/tree-view/tree-view.tsx index 1063f50588..63bfc34de3 100644 --- a/packages/core/src/renderer/components/tree-view/tree-view.tsx +++ b/packages/core/src/renderer/components/tree-view/tree-view.tsx @@ -3,6 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import styles from "./tree-view.module.scss"; import type { MouseEventHandler } from "react"; import React, { useState } from "react"; import { cssNames } from "../../utils"; @@ -20,7 +21,7 @@ export interface TreeViewProps { export function TreeView(props: TreeViewProps) { return (
    {props.children} @@ -31,10 +32,14 @@ export function TreeView(props: TreeViewProps) { export interface TreeItemClasses { root?: string; label?: string; + selected?: string; + hover?: string; + iconContainer?: string; } export interface TreeItemProps { classes?: TreeItemClasses; + icon?: JSX.Element; label: JSX.Element | string; testId?: string; selected?: boolean; @@ -42,15 +47,31 @@ export interface TreeItemProps { } export function TreeItem(props: TreeItemProps) { + const [hovering, setHovering] = useState(false); + const optionalCssNames: Partial> = {}; + + if (props.classes?.selected) { + optionalCssNames[props.classes.selected] = props.selected ?? false; + } + + if (props.classes?.hover) { + optionalCssNames[props.classes.hover] = hovering; + } + return (
  • setHovering(true)} + onMouseLeave={() => setHovering(false)} > +
    + {props.icon} +
    {props.label}
    @@ -60,7 +81,7 @@ export function TreeItem(props: TreeItemProps) { export interface TreeGroupClasses { root?: string; - header?: string; + group?: string; iconContainer?: string; label?: string; contents?: string; @@ -81,12 +102,15 @@ export function TreeGroup(props: TreeGroupProps) { return (
  • -
    setExpanded(!expanded)}> -
    +
    setExpanded(!expanded)} + > +
    { expanded ? props.collapseIcon ?? @@ -97,13 +121,13 @@ export function TreeGroup(props: TreeGroupProps) { {props.label}
    -
    - { - expanded - ? props.children - : null - } -
    +
      + {props.children} +
  • ); } diff --git a/tsconfig.json b/tsconfig.json index 87d282e152..38419a76b6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,7 +21,6 @@ "skipLibCheck": true, "allowJs": false, "esModuleInterop": true, - "allowSyntheticDefaultImports": true, "importsNotUsedAsValues": "error", "traceResolution": false, "resolveJsonModule": true,