11import 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' ;
33import { useStore } from '@nanostores/react' ;
44import { $workflowCategories } from 'app/store/nanostores/workflowCategories' ;
55import { 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
119136const 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 ) ;
0 commit comments