notionsoft-ui 1.0.35 → 1.0.38
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/package.json +1 -1
- package/src/notion-ui/breadcrumb/Breadcrumb.stories.tsx +86 -0
- package/src/notion-ui/breadcrumb/breadcrumb.tsx +101 -0
- package/src/notion-ui/sidebar/sidebar-item.tsx +1 -1
- /package/src/notion-ui/{cache-svg → cached-svg}/CachedSvg.stories.tsx +0 -0
- /package/src/notion-ui/{cache-svg → cached-svg}/cached-svg.tsx +0 -0
- /package/src/notion-ui/{cache-svg → cached-svg}/index.ts +0 -0
- /package/src/notion-ui/{cache-svg → cached-svg}/utils.ts +0 -0
package/package.json
CHANGED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Breadcrumb.stories.tsx
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
3
|
+
import {
|
|
4
|
+
Breadcrumb,
|
|
5
|
+
BreadcrumbItem,
|
|
6
|
+
BreadcrumbSeparator,
|
|
7
|
+
BreadcrumbHome,
|
|
8
|
+
} from "./breadcrumb";
|
|
9
|
+
|
|
10
|
+
const meta: Meta<typeof Breadcrumb> = {
|
|
11
|
+
title: "Components/Breadcrumb",
|
|
12
|
+
component: Breadcrumb,
|
|
13
|
+
parameters: {
|
|
14
|
+
layout: "centered",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default meta;
|
|
19
|
+
|
|
20
|
+
type Story = StoryObj<typeof Breadcrumb>;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Basic breadcrumb with text items
|
|
24
|
+
*/
|
|
25
|
+
export const Basic: Story = {
|
|
26
|
+
render: () => (
|
|
27
|
+
<Breadcrumb>
|
|
28
|
+
<BreadcrumbItem>dashboard</BreadcrumbItem>
|
|
29
|
+
<BreadcrumbSeparator />
|
|
30
|
+
<BreadcrumbItem>projects</BreadcrumbItem>
|
|
31
|
+
<BreadcrumbSeparator />
|
|
32
|
+
<BreadcrumbItem>storybook</BreadcrumbItem>
|
|
33
|
+
</Breadcrumb>
|
|
34
|
+
),
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Breadcrumb with home icon
|
|
39
|
+
*/
|
|
40
|
+
export const WithHomeIcon: Story = {
|
|
41
|
+
render: () => (
|
|
42
|
+
<Breadcrumb>
|
|
43
|
+
<BreadcrumbHome />
|
|
44
|
+
<BreadcrumbSeparator />
|
|
45
|
+
<BreadcrumbItem>dashboard</BreadcrumbItem>
|
|
46
|
+
<BreadcrumbSeparator />
|
|
47
|
+
<BreadcrumbItem>settings</BreadcrumbItem>
|
|
48
|
+
</Breadcrumb>
|
|
49
|
+
),
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Long breadcrumb path to demonstrate horizontal scrolling
|
|
54
|
+
*/
|
|
55
|
+
export const LongPath: Story = {
|
|
56
|
+
render: () => (
|
|
57
|
+
<Breadcrumb className="max-w-xs">
|
|
58
|
+
<BreadcrumbHome />
|
|
59
|
+
<BreadcrumbSeparator />
|
|
60
|
+
<BreadcrumbItem>dashboard</BreadcrumbItem>
|
|
61
|
+
<BreadcrumbSeparator />
|
|
62
|
+
<BreadcrumbItem>projects</BreadcrumbItem>
|
|
63
|
+
<BreadcrumbSeparator />
|
|
64
|
+
<BreadcrumbItem>frontend</BreadcrumbItem>
|
|
65
|
+
<BreadcrumbSeparator />
|
|
66
|
+
<BreadcrumbItem>components</BreadcrumbItem>
|
|
67
|
+
<BreadcrumbSeparator />
|
|
68
|
+
<BreadcrumbItem>breadcrumb</BreadcrumbItem>
|
|
69
|
+
</Breadcrumb>
|
|
70
|
+
),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Custom styled breadcrumb
|
|
75
|
+
*/
|
|
76
|
+
export const CustomStyled: Story = {
|
|
77
|
+
render: () => (
|
|
78
|
+
<Breadcrumb className="bg-muted border-dashed">
|
|
79
|
+
<BreadcrumbHome className="text-primary" />
|
|
80
|
+
<BreadcrumbSeparator className="text-primary/30" />
|
|
81
|
+
<BreadcrumbItem className="text-primary">home</BreadcrumbItem>
|
|
82
|
+
<BreadcrumbSeparator />
|
|
83
|
+
<BreadcrumbItem className="font-semibold">profile</BreadcrumbItem>
|
|
84
|
+
</Breadcrumb>
|
|
85
|
+
),
|
|
86
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { cn } from "@/utils/cn";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
interface BreadcrumbProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
5
|
+
|
|
6
|
+
const Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(
|
|
7
|
+
(props, ref) => {
|
|
8
|
+
const { className, children, ...rest } = props;
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<div
|
|
12
|
+
ref={ref}
|
|
13
|
+
{...rest}
|
|
14
|
+
className={cn(
|
|
15
|
+
"rounded-sm px-5 items-center border border-primary/15 bg-card w-full sm:w-fit overflow-x-auto flex gap-x-4",
|
|
16
|
+
className
|
|
17
|
+
)}
|
|
18
|
+
>
|
|
19
|
+
{children}
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
interface BreadcrumbSeparatorProps extends React.SVGProps<SVGSVGElement> {}
|
|
26
|
+
|
|
27
|
+
const BreadcrumbSeparator = React.forwardRef<
|
|
28
|
+
SVGSVGElement,
|
|
29
|
+
BreadcrumbSeparatorProps
|
|
30
|
+
>((props, ref) => {
|
|
31
|
+
const { className, children, ...rest } = props;
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<svg
|
|
35
|
+
ref={ref}
|
|
36
|
+
{...rest}
|
|
37
|
+
fill="currentColor"
|
|
38
|
+
viewBox="0 0 24 44"
|
|
39
|
+
preserveAspectRatio="none"
|
|
40
|
+
aria-hidden="true"
|
|
41
|
+
className={cn(
|
|
42
|
+
"text-primary/15 min-h-9 min-w-4 h-9 w-4 rtl:rotate-180",
|
|
43
|
+
className
|
|
44
|
+
)}
|
|
45
|
+
>
|
|
46
|
+
<path d="M.293 0l22 22-22 22h1.414l22-22-22-22H.293z"></path>
|
|
47
|
+
</svg>
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
interface BreadcrumbItemProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
52
|
+
|
|
53
|
+
const BreadcrumbItem = React.forwardRef<HTMLDivElement, BreadcrumbItemProps>(
|
|
54
|
+
(props, ref) => {
|
|
55
|
+
const { className, children, ...rest } = props;
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<div
|
|
59
|
+
ref={ref}
|
|
60
|
+
{...rest}
|
|
61
|
+
className={cn(
|
|
62
|
+
"text-primary/70 rtl:pt-0.5 hover:text-primary text-nowrap capitalize cursor-pointer transition-colors duration-200 font-medium rtl:text-4 ltr:text-xs",
|
|
63
|
+
className
|
|
64
|
+
)}
|
|
65
|
+
>
|
|
66
|
+
{children}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
interface BreadcrumbHomeProps extends React.SVGProps<SVGSVGElement> {}
|
|
73
|
+
|
|
74
|
+
const BreadcrumbHome = React.forwardRef<SVGSVGElement, BreadcrumbHomeProps>(
|
|
75
|
+
(props, ref) => {
|
|
76
|
+
const { className, children, ...rest } = props;
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<svg
|
|
80
|
+
ref={ref}
|
|
81
|
+
{...rest}
|
|
82
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
83
|
+
viewBox="0 0 20 20"
|
|
84
|
+
// aria-hidden="true"
|
|
85
|
+
// data-slot="icon"
|
|
86
|
+
className={cn(
|
|
87
|
+
"text-primary/60 fill-primary/60 hover:scale-105 min-w-4 min-h-4 size-4 hover:fill-primary/90 transition-[fill] duration-300 cursor-pointer",
|
|
88
|
+
className
|
|
89
|
+
)}
|
|
90
|
+
>
|
|
91
|
+
<path
|
|
92
|
+
fillRule="evenodd"
|
|
93
|
+
d="M9.293 2.293a1 1 0 0 1 1.414 0l7 7A1 1 0 0 1 17 11h-1v6a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-6H3a1 1 0 0 1-.707-1.707l7-7Z"
|
|
94
|
+
clipRule="evenodd"
|
|
95
|
+
></path>
|
|
96
|
+
</svg>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
export { Breadcrumb, BreadcrumbSeparator, BreadcrumbItem, BreadcrumbHome };
|
|
@@ -3,7 +3,7 @@ import { ChevronRight } from "lucide-react";
|
|
|
3
3
|
import { useLocation } from "react-router";
|
|
4
4
|
import CachedSvg, {
|
|
5
5
|
CachedSvgProps,
|
|
6
|
-
} from "@/components/notion-ui/
|
|
6
|
+
} from "@/components/notion-ui/cached-svg/cached-svg";
|
|
7
7
|
import AnimatedItem from "@/components/notion-ui/animated-item";
|
|
8
8
|
import { cn } from "@/utils/cn";
|
|
9
9
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|