Skip to content

Commit 36e2d1f

Browse files
Merge pull request #5 from bearkfear/feature/tooltip
feat: enhance form item stories with tooltips and improve table build…
2 parents a7954fb + e42bb5a commit 36e2d1f

8 files changed

Lines changed: 924 additions & 853 deletions

File tree

packages/formbuilder/lib/model/field.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ export type FormField<
1818
size: number;
1919
placeholder?: string;
2020
helperText?: string;
21+
tooltip?: {
22+
trigger: React.ReactNode;
23+
content: React.ReactNode;
24+
side?: "top" | "right" | "bottom" | "left";
25+
};
2126
className?: string;
2227
style?: React.CSSProperties;
2328
/**

packages/formbuilder/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@4bits/formbuilder",
3-
"version": "1.6.17",
3+
"version": "1.6.18",
44
"private": false,
55
"main": "dist/index.js",
66
"module": "dist/index.mjs",
@@ -40,4 +40,4 @@
4040
"format": "biome format --fix",
4141
"tsc": "tsc --noEmit"
4242
}
43-
}
43+
}

packages/ui/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@4bits/ui",
3-
"version": "1.14.68",
3+
"version": "1.14.69",
44
"private": false,
55
"main": "dist/index.js",
66
"module": "dist/esm/index.js",
@@ -90,4 +90,4 @@
9090
"tsc": "tsc --noEmit",
9191
"ci:fix": "biome check --fix && biome format --fix && tsc --noEmit"
9292
}
93-
}
93+
}

packages/ui/src/components/ui/form/builder/form-anatomy.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { cn } from "../../../../lib/utils";
2121
import { HelperText } from "../helper-text";
2222
import { Label } from "../label";
2323
import { FormControl } from "./form-control";
24+
import { Tooltip } from "../../tooltip";
2425

2526
export function FormAnatomy<
2627
TFieldValues extends FieldValues = FieldValues,
@@ -77,6 +78,18 @@ export function FormAnatomy<
7778
{props.fieldConfig.leftAddon}
7879
{FormItemControl}
7980
{props.fieldConfig.label !== undefined && FormItemLabel}
81+
{props.fieldConfig.tooltip && (
82+
<Tooltip.Provider skipDelayDuration={0} delayDuration={0}>
83+
<Tooltip.Root>
84+
<Tooltip.Trigger>
85+
{props.fieldConfig.tooltip.trigger}
86+
</Tooltip.Trigger>
87+
<Tooltip.Content side={props.fieldConfig.tooltip.side}>
88+
{props.fieldConfig.tooltip.content}
89+
</Tooltip.Content>
90+
</Tooltip.Root>
91+
</Tooltip.Provider>
92+
)}
8093
</div>
8194
{FormItemHelperText}
8295
</div>
@@ -99,6 +112,18 @@ export function FormAnatomy<
99112
<div className="flex space-x-2">
100113
{props.fieldConfig.leftAddon}
101114
{props.fieldConfig.label !== undefined && FormItemLabel}
115+
{props.fieldConfig.tooltip && (
116+
<Tooltip.Provider skipDelayDuration={0} delayDuration={0}>
117+
<Tooltip.Root>
118+
<Tooltip.Trigger>
119+
{props.fieldConfig.tooltip.trigger}
120+
</Tooltip.Trigger>
121+
<Tooltip.Content side={props.fieldConfig.tooltip.side}>
122+
{props.fieldConfig.tooltip.content}
123+
</Tooltip.Content>
124+
</Tooltip.Root>
125+
</Tooltip.Provider>
126+
)}
102127
</div>
103128
{props.fieldConfig.rightAddon}
104129
</div>

packages/ui/src/components/ui/table-builder/header/column-item.tsx

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,48 @@
22

33
import { cn } from "../../../../lib/utils";
44
import { Table } from "../../table";
5+
import { Tooltip } from "../../tooltip";
56
import type { Column, Columns, SortableType } from "../types";
67
import { ButtonSort } from "./button-sort";
78

89
type ColumnDefaultProps<C extends Columns> = SortableType<C> & {
9-
column: Column;
10+
column: Column;
1011
};
1112

1213
export function ColumnItem<C extends Columns>({
13-
column,
14-
sortable,
14+
column,
15+
sortable,
1516
}: ColumnDefaultProps<C>) {
16-
return (
17-
<Table.Head key={column.id} className={column.className}>
18-
<div
19-
className={cn(
20-
"flex space-x-1 items-center",
21-
column.position && `justify-${column.position}`
22-
)}
23-
>
24-
<div className="text-xs">{column.title}</div>
25-
{sortable?.cols.includes(column.id) && (
26-
<ButtonSort
27-
columnId={column.id}
28-
sortBy={sortable.sortBy}
29-
sortDirection={sortable.sortDirection}
30-
onSort={sortable.onSort}
31-
/>
32-
)}
33-
</div>
34-
</Table.Head>
35-
);
17+
return (
18+
<Table.Head key={column.id} className={column.className}>
19+
<div
20+
className={cn(
21+
"flex space-x-1 items-center",
22+
column.position && `justify-${column.position}`,
23+
)}
24+
>
25+
<div className="text-xs">{column.title}</div>
26+
27+
{column.tooltip && (
28+
<Tooltip.Provider skipDelayDuration={0} delayDuration={0}>
29+
<Tooltip.Root>
30+
<Tooltip.Trigger>{column.tooltip.trigger}</Tooltip.Trigger>
31+
<Tooltip.Content side={column.tooltip.side}>
32+
{column.tooltip.content}
33+
</Tooltip.Content>
34+
</Tooltip.Root>
35+
</Tooltip.Provider>
36+
)}
37+
38+
{sortable?.cols.includes(column.id) && (
39+
<ButtonSort
40+
columnId={column.id}
41+
sortBy={sortable.sortBy}
42+
sortDirection={sortable.sortDirection}
43+
onSort={sortable.onSort}
44+
/>
45+
)}
46+
</div>
47+
</Table.Head>
48+
);
3649
}

packages/ui/src/components/ui/table-builder/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ export type Column = {
88
id: string;
99
className?: string;
1010
position?: "start" | "center" | "end";
11+
tooltip?: {
12+
trigger: ReactNode;
13+
content: ReactNode;
14+
side?: "top" | "right" | "bottom" | "left";
15+
};
1116
};
1217

1318
export type Columns = readonly Column[];

0 commit comments

Comments
 (0)