Skip to content

Commit 0984e7d

Browse files
committed
DS migration - StackedList
1 parent 3fcdf8b commit 0984e7d

File tree

19 files changed

+54
-82
lines changed

19 files changed

+54
-82
lines changed

apps/portal/src/content/docs/components/stacked-list.mdx

Lines changed: 18 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ beta: true
66

77
The `StackedList` component provides a way to display entities in a vertically stacked list format. Supports flexible item rendering, integration with links or actions, and customizable layouts for presenting structured data consistently.
88

9-
It is composed of several subcomponents such as `StackedList.Root`, `StackedList.Item`, `StackedList.Field` to offer a structured and customizable interface.
9+
It is composed of several subcomponents such as `StackedList.Root`, `StackedList.Header`, `StackedList.Item`, `StackedList.Field` to offer a structured and customizable interface.
1010

1111
import { DocsPage } from "@/components/docs-page";
1212

@@ -15,6 +15,9 @@ import { DocsPage } from "@/components/docs-page";
1515
contentClassName={"!block ![place-items:normal]"}
1616
code={`
1717
<StackedList.Root>
18+
<StackedList.Header>
19+
<StackedList.Field title="Title" />
20+
</StackedList.Header>
1821
<StackedList.Item
1922
thumbnail={<IconV2 name="connectors" size="xs" />}
2023
actions={<Button>Action</Button>}
@@ -53,6 +56,9 @@ import { StackedList } from '@harnessio/ui/components'
5356

5457
return (
5558
<StackedList.Root>
59+
<StackedList.Header>
60+
<StackedList.Field title="Title" />
61+
</StackedList.Header>
5662
<StackedList.Item
5763
thumbnail={<IconV2 name="connectors" size="xs" />}
5864
actions={<Button>Action</Button>}
@@ -86,6 +92,10 @@ All parts of the `StackedList` component can be imported and composed as require
8692

8793
```typescript jsx
8894
<StackedList.Root>
95+
<StackedList.Header>
96+
<StackedList.Field />
97+
<StackedList.Header>
98+
8999
<StackedList.Item>
90100
<StackedList.Field />
91101
<StackedList.Field />
@@ -148,38 +158,6 @@ If either of these props is provided, the whole item becomes clickable and navig
148158
`}
149159
/>
150160

151-
## Header item
152-
153-
The `StackedList.Item` accepts the `isHeader` prop, which allow you to turn the entire item into Header view.
154-
155-
This implies a background change to visually distinguish it from regular items.
156-
157-
<DocsPage.ComponentExample
158-
client:only
159-
contentClassName={"!block ![place-items:normal]"}
160-
code={`
161-
<StackedList.Root>
162-
<StackedList.Item
163-
isHeader
164-
disableHover
165-
paddingY="xs"
166-
>
167-
<StackedList.Field title="Title" titleColor="foreground-2" />
168-
</StackedList.Item>
169-
<StackedList.Item
170-
to="/"
171-
>
172-
<StackedList.Field title="Item 1" description="Description 1" />
173-
</StackedList.Item>
174-
<StackedList.Item
175-
to="/"
176-
>
177-
<StackedList.Field title="Item 2" />
178-
</StackedList.Item>
179-
</StackedList.Root>
180-
`}
181-
/>
182-
183161
## Disable hover
184162

185163
The `StackedList.Item` accepts the `disableHover` prop, which allows you to turn off hover affect.
@@ -190,11 +168,10 @@ The `StackedList.Item` accepts the `disableHover` prop, which allows you to turn
190168
code={`
191169
<StackedList.Root>
192170
<StackedList.Item
193-
isHeader
194171
disableHover
195172
paddingY="xs"
196173
>
197-
<StackedList.Field title="Title" titleColor="foreground-2" />
174+
<StackedList.Field title="Item 1" />
198175
</StackedList.Item>
199176
</StackedList.Root>
200177
`}
@@ -299,6 +276,12 @@ Contains [`StackedList.Item`](#item) and [`StackedList.Field`](#field) component
299276
]}
300277
/>
301278

279+
### `Header`
280+
281+
Contains [`StackedList.Field`](#field) components.
282+
283+
All props are the same as in [`StackedList.Item`](#item), except for `disableHover` (which is already set to `true`).
284+
302285
### `Item`
303286

304287
Contains [`StackedList.Field`](#field) components.
@@ -357,13 +340,6 @@ Contains [`StackedList.Field`](#field) components.
357340
value: "boolean",
358341
defaultValue: "false",
359342
},
360-
{
361-
name: "isHeader",
362-
description: "Allow you to turn the entire item into Header view.",
363-
required: false,
364-
value: "boolean",
365-
defaultValue: "undefined",
366-
},
367343
{
368344
name: "paddingX",
369345
description: "Change paddingX value.",

packages/ui/src/components/file-control-bars/file-editor-control-bar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export interface FileEditorControlBarProps {
99
export const FileEditorControlBar: FC<FileEditorControlBarProps> = ({ showPreview = true }) => {
1010
return (
1111
<StackedList.Root rounded="top">
12-
<StackedList.Item paddingX="md" paddingY="2xs" disableHover isHeader>
12+
<StackedList.Header paddingY="2xs">
1313
<StackedList.Field
1414
title={
1515
<Tabs.List variant="ghost">
@@ -18,7 +18,7 @@ export const FileEditorControlBar: FC<FileEditorControlBarProps> = ({ showPrevie
1818
</Tabs.List>
1919
}
2020
/>
21-
</StackedList.Item>
21+
</StackedList.Header>
2222
</StackedList.Root>
2323
)
2424
}

packages/ui/src/components/file-control-bars/file-viewer-control-bar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const FileViewerControlBar: FC<FileViewerControlBarProps> = ({
8181

8282
return (
8383
<StackedList.Root {...(view !== 'history' ? { rounded: 'top' } : {})}>
84-
<StackedList.Item className="gap-cn-sm" paddingX="md" paddingY="2xs" disableHover isHeader>
84+
<StackedList.Header paddingY="2xs">
8585
<StackedList.Field
8686
title={
8787
<Tabs.List variant="ghost">
@@ -93,7 +93,7 @@ export const FileViewerControlBar: FC<FileViewerControlBarProps> = ({
9393
}
9494
/>
9595
<StackedList.Field right title={<RightDetails />} />
96-
</StackedList.Item>
96+
</StackedList.Header>
9797
</StackedList.Root>
9898
)
9999
}

packages/ui/src/components/stacked-list.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ export const stackedListItemVariants = cva('cn-stacked-list-item', {
4444
disableHover: {
4545
true: '',
4646
false: 'cn-stacked-list-item-with-hover'
47-
},
48-
isHeader: {
49-
true: 'cn-stacked-list-item-header'
5047
}
5148
},
5249
defaultVariants: {
@@ -73,7 +70,6 @@ const ListItem = ({
7370
to,
7471
linkProps,
7572
disableHover = false,
76-
isHeader,
7773
paddingX = 'md',
7874
paddingY = 'md',
7975
...props
@@ -84,7 +80,7 @@ const ListItem = ({
8480
return (
8581
<Comp
8682
className={cn(
87-
stackedListItemVariants({ paddingX, paddingY, disableHover, isHeader }),
83+
stackedListItemVariants({ paddingX, paddingY, disableHover }),
8884
{ 'cn-stacked-list-item-with-link': withLink },
8985
className
9086
)}
@@ -99,6 +95,13 @@ const ListItem = ({
9995
}
10096
ListItem.displayName = 'StackedListItem'
10197

98+
const ListHeader = ({ className, paddingY = 'xs', ...props }: Omit<ListItemProps, 'disableHover'>) => {
99+
return (
100+
<ListItem className={cn('cn-stacked-list-item-header', className)} paddingY={paddingY} disableHover {...props} />
101+
)
102+
}
103+
ListHeader.displayName = 'StackedListHeader'
104+
102105
/**
103106
* Field
104107
*/
@@ -145,6 +148,7 @@ ListField.displayName = 'StackedListField'
145148

146149
const StackedList = {
147150
Root: List,
151+
Header: ListHeader,
148152
Item: ListItem,
149153
Field: ListField
150154
}

packages/ui/src/views/components/RadioSelect.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,22 +41,22 @@ export const RadioSelect = <T extends string>({
4141
'border-cn-borders-2': value === option.value
4242
})}
4343
>
44-
<StackedList.Item
45-
className={cn('cursor-pointer !rounded px-5 py-3', {
44+
<StackedList.Header
45+
className={cn('cursor-pointer !rounded', {
4646
'bg-gradient-to-b from-white/[0.04] to-white/0': value === option.value,
4747
'cursor-not-allowed': option.disabled
4848
})}
49+
paddingY="sm"
50+
paddingX="lg"
4951
aria-disabled={option.disabled}
50-
isHeader
51-
disableHover
5252
onClick={() => !option.disabled && onValueChange(option.value)}
5353
>
5454
<StackedList.Field
5555
title={option.title}
5656
description={option.description}
5757
className={`${value !== option.value && 'text-cn-foreground-4'}`}
5858
/>
59-
</StackedList.Item>
59+
</StackedList.Header>
6060
</StackedList.Root>
6161
}
6262
/>

packages/ui/src/views/connectors/connector-reference/connector-reference.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ export const ConnectorReference: FC<ConnectorReferenceProps> = ({
6969
<StackedList.Item
7070
className={cn({ 'bg-cn-background-hover': isSelected })}
7171
paddingY="sm"
72-
paddingX="md"
7372
onClick={() => onSelect(entity)}
7473
thumbnail={
7574
connectorLogo ? (

packages/ui/src/views/pipelines/execution-list/execution-list.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ export const ExecutionList = ({
9090
return (
9191
<StackedList.Root>
9292
{executions.map(execution => (
93-
<StackedList.Item key={execution.name} paddingX="md" paddingY="sm" to={execution.id}>
93+
<StackedList.Item key={execution.name} paddingY="sm" to={execution.id}>
9494
<StackedList.Field
9595
title={<Title status={execution.status} title={execution.name || ''} />}
9696
description={

packages/ui/src/views/pipelines/pipeline-list/pipeline-list.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ export const PipelineList = ({
8383
return (
8484
<StackedList.Root>
8585
{pipelines.map(pipeline => (
86-
<StackedList.Item key={pipeline.name} paddingX="md" paddingY="sm" to={toPipelineDetails?.(pipeline) || ''}>
86+
<StackedList.Item key={pipeline.name} paddingY="sm" to={toPipelineDetails?.(pipeline) || ''}>
8787
<StackedList.Field
8888
title={<Title status={pipeline.status} title={pipeline.name || ''} />}
8989
description={

packages/ui/src/views/platform/entity-reference-component.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ export function EntityReference<T extends BaseEntityProps, S = string, F = strin
134134
<StackedList.Item
135135
className={cn({ 'bg-cn-background-hover': isSelected })}
136136
paddingY="sm"
137-
paddingX="md"
138137
onClick={() => onSelect?.(entity)}
139138
thumbnail={showCheckbox ? <Checkbox checked={isSelected} onCheckedChange={() => onSelect?.(entity)} /> : null}
140139
>
@@ -147,7 +146,6 @@ export function EntityReference<T extends BaseEntityProps, S = string, F = strin
147146
return (
148147
<StackedList.Item
149148
paddingY="sm"
150-
paddingX="md"
151149
onClick={() => onSelect?.(parentFolder)}
152150
thumbnail={<IconV2 name="folder" size="xs" className="text-cn-foreground-3" />}
153151
>
@@ -160,7 +158,6 @@ export function EntityReference<T extends BaseEntityProps, S = string, F = strin
160158
return (
161159
<StackedList.Item
162160
paddingY="sm"
163-
paddingX="md"
164161
onClick={() => onSelect?.(folder)}
165162
thumbnail={<IconV2 name="folder" size="xs" className="text-cn-foreground-3" />}
166163
>

packages/ui/src/views/platform/entity-reference-list.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function EntityReferenceList<T extends BaseEntityProps, S = string, F = s
5252
return (
5353
<StackedList.Root>
5454
{/* Breadcrumb header */}
55-
<StackedList.Item className="sticky top-0" paddingY="sm" paddingX="md" isHeader disableHover>
55+
<StackedList.Header className="sticky top-0" paddingY="sm">
5656
<Breadcrumb.Root>
5757
<Breadcrumb.List>
5858
{!!showBreadcrumbEllipsis && (
@@ -82,7 +82,7 @@ export function EntityReferenceList<T extends BaseEntityProps, S = string, F = s
8282
</Breadcrumb.Page>
8383
</Breadcrumb.List>
8484
</Breadcrumb.Root>
85-
</StackedList.Item>
85+
</StackedList.Header>
8686

8787
<ScrollArea className="max-h-[calc(100vh-530px)] overflow-y-auto">
8888
{/* scopes */}

0 commit comments

Comments
 (0)