Skip to content

Commit ec6cea6

Browse files
feat(ui): workflow library styling
1 parent bfbcaad commit ec6cea6

File tree

2 files changed

+71
-52
lines changed

2 files changed

+71
-52
lines changed

invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowLibrarySideNav.tsx

Lines changed: 70 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ButtonProps, CheckboxProps } from '@invoke-ai/ui-library';
2-
import { Button, Checkbox, Flex, Text } from '@invoke-ai/ui-library';
2+
import { Box, Button, Checkbox, Collapse, Flex, Spacer, Text } from '@invoke-ai/ui-library';
33
import { useStore } from '@nanostores/react';
44
import { $workflowCategories } from 'app/store/nanostores/workflowCategories';
55
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
@@ -65,66 +65,85 @@ export const WorkflowLibrarySideNav = () => {
6565
}, [categories]);
6666

6767
return (
68-
<Flex flexDir="column" gap={2} h="full">
69-
<CategoryButton isSelected={isYourWorkflowsSelected} onClick={selectYourWorkflows}>
70-
{t('workflows.yourWorkflows')}
71-
</CategoryButton>
72-
{categoryOptions.includes('project') && (
73-
<Flex flexDir="column" gap={2} pl={4}>
74-
<CategoryButton size="sm" onClick={selectPrivateWorkflows} isSelected={isPrivateWorkflowsExclusivelySelected}>
75-
{t('workflows.private')}
76-
</CategoryButton>
77-
<CategoryButton
78-
size="sm"
79-
rightIcon={<PiUsersBold />}
80-
onClick={selectSharedWorkflows}
81-
isSelected={isSharedWorkflowsExclusivelySelected}
68+
<Flex flexDir="column" h="full">
69+
<Box w="full" pb={2}>
70+
<CategoryButton isSelected={isYourWorkflowsSelected} onClick={selectYourWorkflows}>
71+
{t('workflows.yourWorkflows')}
72+
</CategoryButton>
73+
{categoryOptions.includes('project') && (
74+
<Collapse
75+
in={
76+
isYourWorkflowsSelected || isPrivateWorkflowsExclusivelySelected || isSharedWorkflowsExclusivelySelected
77+
}
8278
>
83-
{t('workflows.shared')}
84-
</CategoryButton>
85-
</Flex>
86-
)}
87-
<CategoryButton isSelected={isDefaultWorkflowsExclusivelySelected} onClick={selectDefaultWorkflows}>
88-
{t('workflows.browseWorkflows')}
89-
</CategoryButton>
90-
91-
<Flex flexDir="column" gap={2} pl={4} overflow="hidden">
92-
<Button
93-
isDisabled={!isDefaultWorkflowsExclusivelySelected || selectedTags.length === 0}
94-
onClick={resetTags}
95-
size="sm"
96-
variant="link"
97-
fontWeight="bold"
98-
justifyContent="flex-start"
99-
flexGrow={0}
100-
leftIcon={<PiArrowCounterClockwiseBold />}
101-
h={8}
102-
>
103-
{t('workflows.resetTags')}
104-
</Button>
105-
<Flex flexDir="column" gap={2} overflow="auto">
106-
{WORKFLOW_TAGS.map((tagCategory) => (
107-
<TagCategory
108-
key={tagCategory.category}
109-
tagCategory={tagCategory}
110-
isDisabled={!isDefaultWorkflowsExclusivelySelected}
111-
/>
112-
))}
113-
</Flex>
114-
</Flex>
79+
<Flex flexDir="column" gap={2} pl={4} pt={2}>
80+
<CategoryButton
81+
size="sm"
82+
onClick={selectPrivateWorkflows}
83+
isSelected={isPrivateWorkflowsExclusivelySelected}
84+
>
85+
{t('workflows.private')}
86+
</CategoryButton>
87+
<CategoryButton
88+
size="sm"
89+
rightIcon={<PiUsersBold />}
90+
onClick={selectSharedWorkflows}
91+
isSelected={isSharedWorkflowsExclusivelySelected}
92+
>
93+
{t('workflows.shared')}
94+
<Spacer />
95+
</CategoryButton>
96+
</Flex>
97+
</Collapse>
98+
)}
99+
</Box>
100+
<Box w="full">
101+
<CategoryButton isSelected={isDefaultWorkflowsExclusivelySelected} onClick={selectDefaultWorkflows}>
102+
{t('workflows.browseWorkflows')}
103+
</CategoryButton>
104+
<Collapse in={isDefaultWorkflowsExclusivelySelected}>
105+
<Flex flexDir="column" gap={2} pl={4} py={2} overflow="hidden">
106+
<Button
107+
isDisabled={!isDefaultWorkflowsExclusivelySelected || selectedTags.length === 0}
108+
onClick={resetTags}
109+
size="sm"
110+
variant="link"
111+
fontWeight="bold"
112+
justifyContent="flex-start"
113+
flexGrow={0}
114+
flexShrink={0}
115+
leftIcon={<PiArrowCounterClockwiseBold />}
116+
h={8}
117+
>
118+
{t('workflows.resetTags')}
119+
</Button>
120+
<Flex flexDir="column" gap={2} overflow="auto">
121+
{WORKFLOW_TAGS.map((tagCategory) => (
122+
<TagCategory
123+
key={tagCategory.category}
124+
tagCategory={tagCategory}
125+
isDisabled={!isDefaultWorkflowsExclusivelySelected}
126+
/>
127+
))}
128+
</Flex>
129+
</Flex>
130+
</Collapse>
131+
</Box>
115132
</Flex>
116133
);
117134
};
118135

119136
const CategoryButton = memo(({ isSelected, ...rest }: ButtonProps & { isSelected: boolean }) => {
120137
return (
121138
<Button
122-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
123139
variant="ghost"
124-
fontWeight="bold"
125140
justifyContent="flex-start"
126141
size="md"
142+
flexShrink={0}
143+
w="full"
127144
{...rest}
145+
bg={isSelected ? 'base.700' : undefined}
146+
color={isSelected ? 'base.50' : undefined}
128147
/>
129148
);
130149
});
@@ -143,7 +162,7 @@ const TagCategory = memo(
143162

144163
return (
145164
<Flex flexDir="column" gap={2}>
146-
<Text fontWeight="semibold" color="base.300" opacity={isDisabled ? 0.5 : 1}>
165+
<Text fontWeight="semibold" color="base.300" opacity={isDisabled ? 0.5 : 1} flexShrink={0}>
147166
{tagCategory.category}
148167
</Text>
149168
<Flex flexDir="column" gap={2} pl={4}>
@@ -176,7 +195,7 @@ const TagCheckbox = memo(({ tag, ...rest }: CheckboxProps & { tag: WorkflowTag }
176195
}
177196

178197
return (
179-
<Checkbox isChecked={isSelected} onChange={onChange} {...rest}>
198+
<Checkbox isChecked={isSelected} onChange={onChange} {...rest} flexShrink={0}>
180199
<Text>{`${tag} (${count})`}</Text>
181200
</Checkbox>
182201
);

invokeai/frontend/web/src/features/nodes/components/sidePanel/workflow/WorkflowLibrary/WorkflowList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ const WorkflowListContent = memo(
153153
<Flex flexDir="column" gap={4} flex={1} minH={0}>
154154
<Grid
155155
ref={ref}
156-
templateColumns="repeat(auto-fit, minmax(340px, 3fr))"
156+
templateColumns="repeat(auto-fill, minmax(340px, 1fr))"
157157
gridAutoFlow="dense"
158158
gap={4}
159159
overflow="scroll"

0 commit comments

Comments
 (0)