@dalexto/lexsys-registry 0.0.6 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +211 -3
- package/dist/items/breadcrumb.d.ts +7 -0
- package/dist/items/data-table.d.ts +7 -0
- package/dist/items/date-picker.d.ts +7 -0
- package/dist/items/filter-toolbar.d.ts +7 -0
- package/dist/items/index.d.ts +8 -0
- package/dist/items/page-header.d.ts +7 -0
- package/dist/items/pagination.d.ts +7 -0
- package/dist/items/settings-page-layout.d.ts +7 -0
- package/dist/items/stats-card.d.ts +7 -0
- package/package.json +1 -1
- package/templates/blocks/CommandPalette/CommandPalette.tsx +12 -8
- package/templates/blocks/CommandPalette/CommandPalette.types.ts +2 -2
- package/templates/blocks/DataTable/DataTable.tsx +236 -0
- package/templates/blocks/DataTable/DataTable.types.ts +74 -0
- package/templates/blocks/DataTable/DataTable.variants.ts +23 -0
- package/templates/blocks/FilterToolbar/FilterToolbar.tsx +126 -0
- package/templates/blocks/FilterToolbar/FilterToolbar.types.ts +31 -0
- package/templates/blocks/FilterToolbar/FilterToolbar.variants.ts +24 -0
- package/templates/blocks/PageHeader/PageHeader.tsx +215 -0
- package/templates/blocks/PageHeader/PageHeader.types.ts +66 -0
- package/templates/blocks/PageHeader/PageHeader.variants.ts +48 -0
- package/templates/blocks/StatsCard/StatsCard.tsx +132 -0
- package/templates/blocks/StatsCard/StatsCard.types.ts +43 -0
- package/templates/blocks/StatsCard/StatsCard.variants.ts +28 -0
- package/templates/primitives/Breadcrumb/Breadcrumb.tsx +142 -0
- package/templates/primitives/Breadcrumb/Breadcrumb.types.ts +62 -0
- package/templates/primitives/Breadcrumb/Breadcrumb.variants.ts +37 -0
- package/templates/primitives/DatePicker/DatePicker.tsx +263 -0
- package/templates/primitives/DatePicker/DatePicker.types.ts +52 -0
- package/templates/primitives/DatePicker/DatePicker.variants.ts +76 -0
- package/templates/primitives/Pagination/Pagination.tsx +160 -0
- package/templates/primitives/Pagination/Pagination.types.ts +54 -0
- package/templates/primitives/Pagination/Pagination.variants.ts +47 -0
- package/templates/primitives/Toolbar/Toolbar.variants.ts +15 -15
- package/templates/styles/theme.css +1 -1
- package/templates/styles/tokens.css +334 -1
- package/templates/templates/SettingsPageLayout/SettingsPageLayout.tsx +198 -0
- package/templates/templates/SettingsPageLayout/SettingsPageLayout.types.ts +55 -0
- package/templates/templates/SettingsPageLayout/SettingsPageLayout.variants.ts +42 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataTable.types.ts
|
|
3
|
+
*
|
|
4
|
+
* Public types for the DataTable block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { HTMLAttributes, ReactNode, Ref } from "react"
|
|
8
|
+
import type {
|
|
9
|
+
PaginationContentProps,
|
|
10
|
+
PaginationEllipsisProps,
|
|
11
|
+
PaginationItemProps,
|
|
12
|
+
PaginationLinkProps,
|
|
13
|
+
PaginationNextProps,
|
|
14
|
+
PaginationPreviousProps,
|
|
15
|
+
PaginationProps,
|
|
16
|
+
} from "@/components/primitives/Pagination"
|
|
17
|
+
import type {
|
|
18
|
+
TableBodyProps,
|
|
19
|
+
TableCaptionProps,
|
|
20
|
+
TableCellProps,
|
|
21
|
+
TableFooterProps,
|
|
22
|
+
TableHeadProps,
|
|
23
|
+
TableHeaderProps,
|
|
24
|
+
TableProps,
|
|
25
|
+
TableRowProps,
|
|
26
|
+
} from "@/components/primitives/Table"
|
|
27
|
+
|
|
28
|
+
export interface DataTableProps extends HTMLAttributes<HTMLDivElement> {
|
|
29
|
+
ref?: Ref<HTMLDivElement>
|
|
30
|
+
className?: string
|
|
31
|
+
children?: ReactNode
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type DataTableTableProps = TableProps
|
|
35
|
+
|
|
36
|
+
export type DataTableHeaderProps = TableHeaderProps
|
|
37
|
+
|
|
38
|
+
export type DataTableBodyProps = TableBodyProps
|
|
39
|
+
|
|
40
|
+
export type DataTableFooterProps = TableFooterProps
|
|
41
|
+
|
|
42
|
+
export type DataTableRowProps = TableRowProps
|
|
43
|
+
|
|
44
|
+
export type DataTableHeadProps = TableHeadProps
|
|
45
|
+
|
|
46
|
+
export type DataTableCellProps = TableCellProps
|
|
47
|
+
|
|
48
|
+
export type DataTableCaptionProps = TableCaptionProps
|
|
49
|
+
|
|
50
|
+
export interface DataTableToolbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
51
|
+
ref?: Ref<HTMLDivElement>
|
|
52
|
+
className?: string
|
|
53
|
+
children?: ReactNode
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface DataTablePaginationBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
57
|
+
ref?: Ref<HTMLDivElement>
|
|
58
|
+
className?: string
|
|
59
|
+
children?: ReactNode
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export type DataTablePaginationProps = PaginationProps
|
|
63
|
+
|
|
64
|
+
export type DataTablePaginationContentProps = PaginationContentProps
|
|
65
|
+
|
|
66
|
+
export type DataTablePaginationItemProps = PaginationItemProps
|
|
67
|
+
|
|
68
|
+
export type DataTablePaginationLinkProps = PaginationLinkProps
|
|
69
|
+
|
|
70
|
+
export type DataTablePaginationPreviousProps = PaginationPreviousProps
|
|
71
|
+
|
|
72
|
+
export type DataTablePaginationNextProps = PaginationNextProps
|
|
73
|
+
|
|
74
|
+
export type DataTablePaginationEllipsisProps = PaginationEllipsisProps
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataTable.variants.ts
|
|
3
|
+
*
|
|
4
|
+
* Variant classes for the DataTable block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const dataTableClasses = (): string => {
|
|
8
|
+
return ["lex-data-table", "flex w-full flex-col gap-(--lex-space-4)"].join(
|
|
9
|
+
" ",
|
|
10
|
+
)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const dataTableFooterClasses = (): string => {
|
|
14
|
+
return [
|
|
15
|
+
"lex-data-table__footer",
|
|
16
|
+
"flex flex-col gap-(--lex-space-3)",
|
|
17
|
+
"sm:flex-row sm:items-center sm:justify-between",
|
|
18
|
+
].join(" ")
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const dataTablePaginationClasses = (): string => {
|
|
22
|
+
return "lex-data-table__pagination"
|
|
23
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilterToolbar.tsx
|
|
3
|
+
*
|
|
4
|
+
* Reference FilterToolbar block — compound Toolbar filter row.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Button } from "@/components/primitives/Button"
|
|
8
|
+
import { Input } from "@/components/primitives/Input"
|
|
9
|
+
import {
|
|
10
|
+
Select,
|
|
11
|
+
SelectTrigger,
|
|
12
|
+
SelectValue,
|
|
13
|
+
} from "@/components/primitives/Select"
|
|
14
|
+
import { Toolbar, ToolbarGroup } from "@/components/primitives/Toolbar"
|
|
15
|
+
import type {
|
|
16
|
+
FilterToolbarButtonProps,
|
|
17
|
+
FilterToolbarGroupProps,
|
|
18
|
+
FilterToolbarProps,
|
|
19
|
+
FilterToolbarSearchProps,
|
|
20
|
+
FilterToolbarSelectProps,
|
|
21
|
+
FilterToolbarSelectTriggerProps,
|
|
22
|
+
FilterToolbarSelectValueProps,
|
|
23
|
+
} from "./FilterToolbar.types"
|
|
24
|
+
import {
|
|
25
|
+
filterToolbarClasses,
|
|
26
|
+
filterToolbarSearchClasses,
|
|
27
|
+
filterToolbarSelectTriggerClasses,
|
|
28
|
+
} from "./FilterToolbar.variants"
|
|
29
|
+
import { cn } from "@/lib/utils"
|
|
30
|
+
|
|
31
|
+
const FilterToolbar = ({
|
|
32
|
+
ref,
|
|
33
|
+
className,
|
|
34
|
+
orientation = "horizontal",
|
|
35
|
+
...props
|
|
36
|
+
}: FilterToolbarProps) => {
|
|
37
|
+
return (
|
|
38
|
+
<Toolbar
|
|
39
|
+
ref={ref}
|
|
40
|
+
orientation={orientation}
|
|
41
|
+
className={cn(filterToolbarClasses(), className)}
|
|
42
|
+
{...props}
|
|
43
|
+
/>
|
|
44
|
+
)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
FilterToolbar.displayName = "FilterToolbar"
|
|
48
|
+
|
|
49
|
+
const FilterToolbarGroup = ({
|
|
50
|
+
ref,
|
|
51
|
+
className,
|
|
52
|
+
...props
|
|
53
|
+
}: FilterToolbarGroupProps) => {
|
|
54
|
+
return <ToolbarGroup ref={ref} className={className} {...props} />
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
FilterToolbarGroup.displayName = "FilterToolbarGroup"
|
|
58
|
+
|
|
59
|
+
const FilterToolbarSearch = ({
|
|
60
|
+
ref,
|
|
61
|
+
className,
|
|
62
|
+
...props
|
|
63
|
+
}: FilterToolbarSearchProps) => {
|
|
64
|
+
return (
|
|
65
|
+
<Input
|
|
66
|
+
ref={ref}
|
|
67
|
+
className={cn(filterToolbarSearchClasses(), className)}
|
|
68
|
+
{...props}
|
|
69
|
+
/>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
FilterToolbarSearch.displayName = "FilterToolbarSearch"
|
|
74
|
+
|
|
75
|
+
const FilterToolbarButton = ({
|
|
76
|
+
ref,
|
|
77
|
+
className,
|
|
78
|
+
...props
|
|
79
|
+
}: FilterToolbarButtonProps) => {
|
|
80
|
+
return <Button ref={ref} className={className} {...props} />
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
FilterToolbarButton.displayName = "FilterToolbarButton"
|
|
84
|
+
|
|
85
|
+
const FilterToolbarSelect = <Value = string,>(
|
|
86
|
+
props: FilterToolbarSelectProps<Value>,
|
|
87
|
+
) => {
|
|
88
|
+
return <Select {...props} />
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
FilterToolbarSelect.displayName = "FilterToolbarSelect"
|
|
92
|
+
|
|
93
|
+
const FilterToolbarSelectTrigger = ({
|
|
94
|
+
ref,
|
|
95
|
+
className,
|
|
96
|
+
...props
|
|
97
|
+
}: FilterToolbarSelectTriggerProps) => {
|
|
98
|
+
return (
|
|
99
|
+
<SelectTrigger
|
|
100
|
+
ref={ref}
|
|
101
|
+
className={cn(filterToolbarSelectTriggerClasses(), className)}
|
|
102
|
+
{...props}
|
|
103
|
+
/>
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
FilterToolbarSelectTrigger.displayName = "FilterToolbarSelectTrigger"
|
|
108
|
+
|
|
109
|
+
const FilterToolbarSelectValue = ({
|
|
110
|
+
className,
|
|
111
|
+
...props
|
|
112
|
+
}: FilterToolbarSelectValueProps) => {
|
|
113
|
+
return <SelectValue className={className} {...props} />
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
FilterToolbarSelectValue.displayName = "FilterToolbarSelectValue"
|
|
117
|
+
|
|
118
|
+
export {
|
|
119
|
+
FilterToolbar,
|
|
120
|
+
FilterToolbarGroup,
|
|
121
|
+
FilterToolbarSearch,
|
|
122
|
+
FilterToolbarButton,
|
|
123
|
+
FilterToolbarSelect,
|
|
124
|
+
FilterToolbarSelectTrigger,
|
|
125
|
+
FilterToolbarSelectValue,
|
|
126
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilterToolbar.types.ts
|
|
3
|
+
*
|
|
4
|
+
* Public types for the FilterToolbar block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { ButtonProps } from "@/components/primitives/Button"
|
|
8
|
+
import type { InputProps } from "@/components/primitives/Input"
|
|
9
|
+
import type {
|
|
10
|
+
SelectProps,
|
|
11
|
+
SelectTriggerProps,
|
|
12
|
+
SelectValueProps,
|
|
13
|
+
} from "@/components/primitives/Select"
|
|
14
|
+
import type {
|
|
15
|
+
ToolbarGroupProps,
|
|
16
|
+
ToolbarProps,
|
|
17
|
+
} from "@/components/primitives/Toolbar"
|
|
18
|
+
|
|
19
|
+
export type FilterToolbarProps = ToolbarProps
|
|
20
|
+
|
|
21
|
+
export type FilterToolbarGroupProps = ToolbarGroupProps
|
|
22
|
+
|
|
23
|
+
export type FilterToolbarSearchProps = InputProps
|
|
24
|
+
|
|
25
|
+
export type FilterToolbarButtonProps = ButtonProps
|
|
26
|
+
|
|
27
|
+
export type FilterToolbarSelectProps<Value = string> = SelectProps<Value>
|
|
28
|
+
|
|
29
|
+
export type FilterToolbarSelectTriggerProps = SelectTriggerProps
|
|
30
|
+
|
|
31
|
+
export type FilterToolbarSelectValueProps = SelectValueProps
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilterToolbar.variants.ts
|
|
3
|
+
*
|
|
4
|
+
* Variant classes for the FilterToolbar block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const filterToolbarClasses = (): string => {
|
|
8
|
+
return [
|
|
9
|
+
"lex-filter-toolbar",
|
|
10
|
+
"flex flex-wrap items-center gap-(--lex-space-2)",
|
|
11
|
+
"rounded-(--lex-radius-control)",
|
|
12
|
+
"border border-(--lex-border-default)",
|
|
13
|
+
"bg-(--lex-color-background-subtle)",
|
|
14
|
+
"p-(--lex-space-2)",
|
|
15
|
+
].join(" ")
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const filterToolbarSearchClasses = (): string => {
|
|
19
|
+
return "lex-filter-toolbar__search min-w-(--lex-size-filter-toolbar-search-min-width,12rem) flex-1"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const filterToolbarSelectTriggerClasses = (): string => {
|
|
23
|
+
return "lex-filter-toolbar__select min-w-(--lex-size-filter-toolbar-select-min-width,8rem)"
|
|
24
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageHeader.tsx
|
|
3
|
+
*
|
|
4
|
+
* Reference PageHeader block — compound page title surface with breadcrumb and actions.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Button } from "@/components/primitives/Button"
|
|
8
|
+
import {
|
|
9
|
+
Breadcrumb,
|
|
10
|
+
BreadcrumbItem,
|
|
11
|
+
BreadcrumbLink,
|
|
12
|
+
BreadcrumbList,
|
|
13
|
+
BreadcrumbPage,
|
|
14
|
+
BreadcrumbSeparator,
|
|
15
|
+
} from "@/components/primitives/Breadcrumb"
|
|
16
|
+
import type {
|
|
17
|
+
PageHeaderActionProps,
|
|
18
|
+
PageHeaderActionsProps,
|
|
19
|
+
PageHeaderBreadcrumbItemProps,
|
|
20
|
+
PageHeaderBreadcrumbLinkProps,
|
|
21
|
+
PageHeaderBreadcrumbListProps,
|
|
22
|
+
PageHeaderBreadcrumbPageProps,
|
|
23
|
+
PageHeaderBreadcrumbProps,
|
|
24
|
+
PageHeaderBreadcrumbSeparatorProps,
|
|
25
|
+
PageHeaderDescriptionProps,
|
|
26
|
+
PageHeaderHeadingProps,
|
|
27
|
+
PageHeaderProps,
|
|
28
|
+
PageHeaderTitleProps,
|
|
29
|
+
PageHeaderTopProps,
|
|
30
|
+
} from "./PageHeader.types"
|
|
31
|
+
import {
|
|
32
|
+
pageHeaderActionsClasses,
|
|
33
|
+
pageHeaderBreadcrumbClasses,
|
|
34
|
+
pageHeaderClasses,
|
|
35
|
+
pageHeaderDescriptionClasses,
|
|
36
|
+
pageHeaderHeadingClasses,
|
|
37
|
+
pageHeaderTitleClasses,
|
|
38
|
+
pageHeaderTopClasses,
|
|
39
|
+
} from "./PageHeader.variants"
|
|
40
|
+
import { cn } from "@/lib/utils"
|
|
41
|
+
|
|
42
|
+
const PageHeader = ({ ref, className, ...props }: PageHeaderProps) => {
|
|
43
|
+
return (
|
|
44
|
+
<header
|
|
45
|
+
ref={ref}
|
|
46
|
+
className={cn(pageHeaderClasses(), className)}
|
|
47
|
+
{...props}
|
|
48
|
+
/>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
PageHeader.displayName = "PageHeader"
|
|
53
|
+
|
|
54
|
+
const PageHeaderTop = ({ ref, className, ...props }: PageHeaderTopProps) => {
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
ref={ref}
|
|
58
|
+
className={cn(pageHeaderTopClasses(), className)}
|
|
59
|
+
{...props}
|
|
60
|
+
/>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
PageHeaderTop.displayName = "PageHeaderTop"
|
|
65
|
+
|
|
66
|
+
const PageHeaderBreadcrumb = ({
|
|
67
|
+
ref,
|
|
68
|
+
className,
|
|
69
|
+
...props
|
|
70
|
+
}: PageHeaderBreadcrumbProps) => {
|
|
71
|
+
return (
|
|
72
|
+
<Breadcrumb
|
|
73
|
+
ref={ref}
|
|
74
|
+
className={cn(pageHeaderBreadcrumbClasses(), className)}
|
|
75
|
+
{...props}
|
|
76
|
+
/>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
PageHeaderBreadcrumb.displayName = "PageHeaderBreadcrumb"
|
|
81
|
+
|
|
82
|
+
const PageHeaderBreadcrumbList = ({
|
|
83
|
+
className,
|
|
84
|
+
...props
|
|
85
|
+
}: PageHeaderBreadcrumbListProps) => {
|
|
86
|
+
return <BreadcrumbList className={className} {...props} />
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
PageHeaderBreadcrumbList.displayName = "PageHeaderBreadcrumbList"
|
|
90
|
+
|
|
91
|
+
const PageHeaderBreadcrumbItem = ({
|
|
92
|
+
className,
|
|
93
|
+
...props
|
|
94
|
+
}: PageHeaderBreadcrumbItemProps) => {
|
|
95
|
+
return <BreadcrumbItem className={className} {...props} />
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
PageHeaderBreadcrumbItem.displayName = "PageHeaderBreadcrumbItem"
|
|
99
|
+
|
|
100
|
+
const PageHeaderBreadcrumbLink = ({
|
|
101
|
+
className,
|
|
102
|
+
...props
|
|
103
|
+
}: PageHeaderBreadcrumbLinkProps) => {
|
|
104
|
+
return <BreadcrumbLink className={className} {...props} />
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
PageHeaderBreadcrumbLink.displayName = "PageHeaderBreadcrumbLink"
|
|
108
|
+
|
|
109
|
+
const PageHeaderBreadcrumbPage = ({
|
|
110
|
+
className,
|
|
111
|
+
...props
|
|
112
|
+
}: PageHeaderBreadcrumbPageProps) => {
|
|
113
|
+
return <BreadcrumbPage className={className} {...props} />
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
PageHeaderBreadcrumbPage.displayName = "PageHeaderBreadcrumbPage"
|
|
117
|
+
|
|
118
|
+
const PageHeaderBreadcrumbSeparator = ({
|
|
119
|
+
className,
|
|
120
|
+
...props
|
|
121
|
+
}: PageHeaderBreadcrumbSeparatorProps) => {
|
|
122
|
+
return <BreadcrumbSeparator className={className} {...props} />
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
PageHeaderBreadcrumbSeparator.displayName = "PageHeaderBreadcrumbSeparator"
|
|
126
|
+
|
|
127
|
+
const PageHeaderHeading = ({
|
|
128
|
+
ref,
|
|
129
|
+
className,
|
|
130
|
+
...props
|
|
131
|
+
}: PageHeaderHeadingProps) => {
|
|
132
|
+
return (
|
|
133
|
+
<div
|
|
134
|
+
ref={ref}
|
|
135
|
+
className={cn(pageHeaderHeadingClasses(), className)}
|
|
136
|
+
{...props}
|
|
137
|
+
/>
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
PageHeaderHeading.displayName = "PageHeaderHeading"
|
|
142
|
+
|
|
143
|
+
const PageHeaderTitle = ({
|
|
144
|
+
ref,
|
|
145
|
+
className,
|
|
146
|
+
...props
|
|
147
|
+
}: PageHeaderTitleProps) => {
|
|
148
|
+
return (
|
|
149
|
+
<h1
|
|
150
|
+
ref={ref}
|
|
151
|
+
className={cn(pageHeaderTitleClasses(), className)}
|
|
152
|
+
{...props}
|
|
153
|
+
/>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
PageHeaderTitle.displayName = "PageHeaderTitle"
|
|
158
|
+
|
|
159
|
+
const PageHeaderDescription = ({
|
|
160
|
+
ref,
|
|
161
|
+
className,
|
|
162
|
+
...props
|
|
163
|
+
}: PageHeaderDescriptionProps) => {
|
|
164
|
+
return (
|
|
165
|
+
<p
|
|
166
|
+
ref={ref}
|
|
167
|
+
className={cn(pageHeaderDescriptionClasses(), className)}
|
|
168
|
+
{...props}
|
|
169
|
+
/>
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
PageHeaderDescription.displayName = "PageHeaderDescription"
|
|
174
|
+
|
|
175
|
+
const PageHeaderActions = ({
|
|
176
|
+
ref,
|
|
177
|
+
className,
|
|
178
|
+
...props
|
|
179
|
+
}: PageHeaderActionsProps) => {
|
|
180
|
+
return (
|
|
181
|
+
<div
|
|
182
|
+
ref={ref}
|
|
183
|
+
className={cn(pageHeaderActionsClasses(), className)}
|
|
184
|
+
{...props}
|
|
185
|
+
/>
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
PageHeaderActions.displayName = "PageHeaderActions"
|
|
190
|
+
|
|
191
|
+
const PageHeaderAction = ({
|
|
192
|
+
ref,
|
|
193
|
+
className,
|
|
194
|
+
...props
|
|
195
|
+
}: PageHeaderActionProps) => {
|
|
196
|
+
return <Button ref={ref} className={className} {...props} />
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
PageHeaderAction.displayName = "PageHeaderAction"
|
|
200
|
+
|
|
201
|
+
export {
|
|
202
|
+
PageHeader,
|
|
203
|
+
PageHeaderTop,
|
|
204
|
+
PageHeaderBreadcrumb,
|
|
205
|
+
PageHeaderBreadcrumbList,
|
|
206
|
+
PageHeaderBreadcrumbItem,
|
|
207
|
+
PageHeaderBreadcrumbLink,
|
|
208
|
+
PageHeaderBreadcrumbPage,
|
|
209
|
+
PageHeaderBreadcrumbSeparator,
|
|
210
|
+
PageHeaderHeading,
|
|
211
|
+
PageHeaderTitle,
|
|
212
|
+
PageHeaderDescription,
|
|
213
|
+
PageHeaderActions,
|
|
214
|
+
PageHeaderAction,
|
|
215
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageHeader.types.ts
|
|
3
|
+
*
|
|
4
|
+
* Public types for the PageHeader block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { HTMLAttributes, ReactNode, Ref } from "react"
|
|
8
|
+
import type { ButtonProps } from "@/components/primitives/Button"
|
|
9
|
+
import type {
|
|
10
|
+
BreadcrumbItemProps,
|
|
11
|
+
BreadcrumbLinkProps,
|
|
12
|
+
BreadcrumbListProps,
|
|
13
|
+
BreadcrumbPageProps,
|
|
14
|
+
BreadcrumbProps,
|
|
15
|
+
BreadcrumbSeparatorProps,
|
|
16
|
+
} from "@/components/primitives/Breadcrumb"
|
|
17
|
+
|
|
18
|
+
export interface PageHeaderProps extends HTMLAttributes<HTMLElement> {
|
|
19
|
+
ref?: Ref<HTMLElement>
|
|
20
|
+
className?: string
|
|
21
|
+
children?: ReactNode
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface PageHeaderTopProps extends HTMLAttributes<HTMLDivElement> {
|
|
25
|
+
ref?: Ref<HTMLDivElement>
|
|
26
|
+
className?: string
|
|
27
|
+
children?: ReactNode
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type PageHeaderBreadcrumbProps = BreadcrumbProps
|
|
31
|
+
|
|
32
|
+
export type PageHeaderBreadcrumbListProps = BreadcrumbListProps
|
|
33
|
+
|
|
34
|
+
export type PageHeaderBreadcrumbItemProps = BreadcrumbItemProps
|
|
35
|
+
|
|
36
|
+
export type PageHeaderBreadcrumbLinkProps = BreadcrumbLinkProps
|
|
37
|
+
|
|
38
|
+
export type PageHeaderBreadcrumbPageProps = BreadcrumbPageProps
|
|
39
|
+
|
|
40
|
+
export type PageHeaderBreadcrumbSeparatorProps = BreadcrumbSeparatorProps
|
|
41
|
+
|
|
42
|
+
export interface PageHeaderHeadingProps extends HTMLAttributes<HTMLDivElement> {
|
|
43
|
+
ref?: Ref<HTMLDivElement>
|
|
44
|
+
className?: string
|
|
45
|
+
children?: ReactNode
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface PageHeaderTitleProps extends HTMLAttributes<HTMLHeadingElement> {
|
|
49
|
+
ref?: Ref<HTMLHeadingElement>
|
|
50
|
+
className?: string
|
|
51
|
+
children?: ReactNode
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface PageHeaderDescriptionProps extends HTMLAttributes<HTMLParagraphElement> {
|
|
55
|
+
ref?: Ref<HTMLParagraphElement>
|
|
56
|
+
className?: string
|
|
57
|
+
children?: ReactNode
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface PageHeaderActionsProps extends HTMLAttributes<HTMLDivElement> {
|
|
61
|
+
ref?: Ref<HTMLDivElement>
|
|
62
|
+
className?: string
|
|
63
|
+
children?: ReactNode
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export type PageHeaderActionProps = ButtonProps
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PageHeader.variants.ts
|
|
3
|
+
*
|
|
4
|
+
* Variant classes for the PageHeader block.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const pageHeaderClasses = (): string => {
|
|
8
|
+
return [
|
|
9
|
+
"lex-page-header",
|
|
10
|
+
"flex flex-col gap-(--lex-space-4)",
|
|
11
|
+
"border-b border-(--lex-border-default) pb-(--lex-space-4)",
|
|
12
|
+
].join(" ")
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const pageHeaderTopClasses = (): string => {
|
|
16
|
+
return "lex-page-header__top flex flex-col gap-(--lex-space-3)"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const pageHeaderHeadingClasses = (): string => {
|
|
20
|
+
return "lex-page-header__heading flex flex-col gap-(--lex-space-1)"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const pageHeaderTitleClasses = (): string => {
|
|
24
|
+
return [
|
|
25
|
+
"lex-page-header__title",
|
|
26
|
+
"m-0 text-(length:--lex-typography-heading-lg-font-size)",
|
|
27
|
+
"font-(--lex-typography-heading-lg-font-weight)",
|
|
28
|
+
"leading-(--lex-typography-heading-lg-font-line-height)",
|
|
29
|
+
"text-(--lex-color-text-primary)",
|
|
30
|
+
].join(" ")
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const pageHeaderDescriptionClasses = (): string => {
|
|
34
|
+
return [
|
|
35
|
+
"lex-page-header__description",
|
|
36
|
+
"m-0 text-(length:--lex-typography-body-sm-font-size)",
|
|
37
|
+
"leading-(--lex-typography-body-sm-font-line-height)",
|
|
38
|
+
"text-(--lex-color-text-secondary)",
|
|
39
|
+
].join(" ")
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const pageHeaderActionsClasses = (): string => {
|
|
43
|
+
return "lex-page-header__actions flex flex-wrap items-center gap-(--lex-space-2)"
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export const pageHeaderBreadcrumbClasses = (): string => {
|
|
47
|
+
return "lex-page-header__breadcrumb"
|
|
48
|
+
}
|