@node-core/ui-components 1.0.1-345c7d19144bec7138956e6ae7f5b20cfa2e2450 → 1.0.1-4ebead0c76b580d1bf722ebcd0f644e82dc06c0d
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/Common/AlertBox/index.module.css +7 -0
- package/Common/AlertBox/index.stories.tsx +23 -0
- package/Common/AvatarGroup/index.module.css +4 -8
- package/Common/AvatarGroup/index.tsx +1 -5
- package/Common/BaseButton/index.module.css +4 -1
- package/Common/ChangeHistory/index.module.css +83 -0
- package/Common/ChangeHistory/index.stories.tsx +130 -0
- package/Common/ChangeHistory/index.tsx +67 -0
- package/Common/DataTag/index.module.css +56 -0
- package/Common/DataTag/index.stories.tsx +40 -0
- package/Common/DataTag/index.tsx +39 -0
- package/Common/Modal/index.module.css +3 -3
- package/Common/Modal/index.stories.tsx +7 -5
- package/Common/Modal/index.tsx +16 -14
- package/{Common/ProgressionSidebar/ProgressionSidebarIcon → Containers/Sidebar/ProgressionIcon}/index.tsx +2 -2
- package/Containers/Sidebar/SidebarGroup/index.module.css +54 -16
- package/Containers/Sidebar/SidebarGroup/index.tsx +21 -2
- package/Containers/Sidebar/SidebarItem/index.module.css +39 -18
- package/Containers/Sidebar/SidebarItem/index.tsx +25 -8
- package/Containers/Sidebar/index.module.css +5 -6
- package/Containers/Sidebar/index.stories.tsx +78 -74
- package/Containers/Sidebar/index.tsx +17 -5
- package/Icons/Logos/Nodejs.tsx +201 -17
- package/package.json +28 -31
- package/styles/markdown.css +1 -1
- package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.module.css +0 -47
- package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.tsx +0 -35
- package/Common/ProgressionSidebar/ProgressionSidebarItem/index.module.css +0 -39
- package/Common/ProgressionSidebar/ProgressionSidebarItem/index.tsx +0 -32
- package/Common/ProgressionSidebar/index.module.css +0 -30
- package/Common/ProgressionSidebar/index.stories.tsx +0 -79
- package/Common/ProgressionSidebar/index.tsx +0 -59
|
@@ -5,22 +5,60 @@
|
|
|
5
5
|
w-full
|
|
6
6
|
flex-col
|
|
7
7
|
gap-2;
|
|
8
|
-
}
|
|
9
8
|
|
|
10
|
-
.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
&:not(.progression) {
|
|
10
|
+
.groupName {
|
|
11
|
+
@apply px-2
|
|
12
|
+
py-1
|
|
13
|
+
text-xs
|
|
14
|
+
font-semibold
|
|
15
|
+
text-neutral-800
|
|
16
|
+
dark:text-neutral-600;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
&.progression {
|
|
21
|
+
@apply flex
|
|
22
|
+
flex-col
|
|
23
|
+
gap-4
|
|
24
|
+
text-sm
|
|
25
|
+
font-medium
|
|
26
|
+
text-neutral-800
|
|
27
|
+
dark:text-neutral-200;
|
|
28
|
+
|
|
29
|
+
.itemList {
|
|
30
|
+
@apply relative
|
|
31
|
+
-left-1
|
|
32
|
+
flex
|
|
33
|
+
flex-col
|
|
34
|
+
after:absolute
|
|
35
|
+
after:left-[0.45rem]
|
|
36
|
+
after:top-0
|
|
37
|
+
after:z-10
|
|
38
|
+
after:h-full
|
|
39
|
+
after:w-px
|
|
40
|
+
after:bg-neutral-200
|
|
41
|
+
after:content-['']
|
|
42
|
+
dark:after:bg-neutral-800;
|
|
43
|
+
|
|
44
|
+
a {
|
|
45
|
+
@apply first:before:absolute
|
|
46
|
+
first:before:bottom-[calc(50%+0.25rem)]
|
|
47
|
+
first:before:left-0
|
|
48
|
+
first:before:h-20
|
|
49
|
+
first:before:w-4
|
|
50
|
+
first:before:bg-white
|
|
51
|
+
first:before:content-['']
|
|
52
|
+
last:after:absolute
|
|
53
|
+
last:after:left-0
|
|
54
|
+
last:after:top-[calc(50%+0.25rem)]
|
|
55
|
+
last:after:h-20
|
|
56
|
+
last:after:w-4
|
|
57
|
+
last:after:bg-white
|
|
58
|
+
last:after:content-['']
|
|
59
|
+
first:dark:before:bg-neutral-950
|
|
60
|
+
last:dark:after:bg-neutral-950;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
26
64
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import classNames from 'classnames';
|
|
1
2
|
import type { ComponentProps, FC } from 'react';
|
|
2
3
|
|
|
3
4
|
import SidebarItem from '#ui/Containers/Sidebar/SidebarItem';
|
|
@@ -10,18 +11,36 @@ type SidebarGroupProps = {
|
|
|
10
11
|
items: Array<Omit<ComponentProps<typeof SidebarItem>, 'as' | 'pathname'>>;
|
|
11
12
|
as?: LinkLike;
|
|
12
13
|
pathname?: string;
|
|
14
|
+
className: string;
|
|
15
|
+
showProgressionIcons?: boolean;
|
|
13
16
|
};
|
|
14
17
|
|
|
15
18
|
const SidebarGroup: FC<SidebarGroupProps> = ({
|
|
16
19
|
groupName,
|
|
17
20
|
items,
|
|
21
|
+
showProgressionIcons,
|
|
22
|
+
className,
|
|
18
23
|
...props
|
|
19
24
|
}) => (
|
|
20
|
-
<section
|
|
25
|
+
<section
|
|
26
|
+
className={classNames(
|
|
27
|
+
{
|
|
28
|
+
[styles.group]: true,
|
|
29
|
+
[styles.progression]: showProgressionIcons,
|
|
30
|
+
},
|
|
31
|
+
className
|
|
32
|
+
)}
|
|
33
|
+
>
|
|
21
34
|
<label className={styles.groupName}>{groupName}</label>
|
|
22
35
|
<ul className={styles.itemList}>
|
|
23
36
|
{items.map(({ label, link }) => (
|
|
24
|
-
<SidebarItem
|
|
37
|
+
<SidebarItem
|
|
38
|
+
key={link}
|
|
39
|
+
label={label}
|
|
40
|
+
link={link}
|
|
41
|
+
showProgressionIcons={showProgressionIcons}
|
|
42
|
+
{...props}
|
|
43
|
+
/>
|
|
25
44
|
))}
|
|
26
45
|
</ul>
|
|
27
46
|
</section>
|
|
@@ -1,35 +1,56 @@
|
|
|
1
|
-
@reference
|
|
1
|
+
@reference '../../../styles/index.css';
|
|
2
2
|
|
|
3
|
-
.
|
|
4
|
-
@apply
|
|
3
|
+
.item {
|
|
4
|
+
@apply font-regular
|
|
5
|
+
relative
|
|
6
|
+
z-20
|
|
7
|
+
flex
|
|
5
8
|
w-full
|
|
6
|
-
|
|
9
|
+
items-center
|
|
10
|
+
overflow-hidden
|
|
11
|
+
text-sm
|
|
7
12
|
text-neutral-800
|
|
8
13
|
dark:text-neutral-200;
|
|
9
14
|
|
|
10
|
-
a {
|
|
11
|
-
@apply inline-flex
|
|
12
|
-
items-center
|
|
13
|
-
gap-2
|
|
14
|
-
p-2;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
15
|
.label {
|
|
18
16
|
@apply font-regular
|
|
19
|
-
|
|
17
|
+
p-2
|
|
20
18
|
text-sm;
|
|
21
19
|
}
|
|
22
20
|
|
|
21
|
+
.progressionIcon {
|
|
22
|
+
@apply shrink-0
|
|
23
|
+
fill-neutral-200
|
|
24
|
+
stroke-white
|
|
25
|
+
stroke-[4]
|
|
26
|
+
dark:fill-neutral-800
|
|
27
|
+
dark:stroke-neutral-950;
|
|
28
|
+
}
|
|
29
|
+
|
|
23
30
|
.icon {
|
|
24
31
|
@apply size-3
|
|
25
32
|
text-neutral-500
|
|
26
33
|
dark:text-neutral-200;
|
|
27
34
|
}
|
|
28
|
-
}
|
|
29
35
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
&.progression {
|
|
37
|
+
.label {
|
|
38
|
+
@apply p-1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&.active {
|
|
43
|
+
@apply text-neutral-900
|
|
44
|
+
dark:text-white;
|
|
45
|
+
|
|
46
|
+
.progressionIcon {
|
|
47
|
+
@apply fill-green-500;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
&:not(.progression) .label {
|
|
51
|
+
@apply rounded-sm
|
|
52
|
+
bg-green-600
|
|
53
|
+
text-white;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
35
56
|
}
|
|
@@ -1,26 +1,43 @@
|
|
|
1
1
|
import { ArrowUpRightIcon } from '@heroicons/react/24/solid';
|
|
2
|
+
import classNames from 'classnames';
|
|
2
3
|
import type { FC } from 'react';
|
|
3
4
|
|
|
4
|
-
import
|
|
5
|
+
import BaseActiveLink from '#ui/Common/BaseActiveLink';
|
|
5
6
|
import type { FormattedMessage, LinkLike } from '#ui/types';
|
|
6
7
|
|
|
7
8
|
import styles from './index.module.css';
|
|
9
|
+
import ProgressionIcon from '../ProgressionIcon';
|
|
8
10
|
|
|
9
11
|
type SidebarItemProps = {
|
|
10
12
|
label: FormattedMessage;
|
|
11
13
|
link: string;
|
|
12
14
|
as?: LinkLike;
|
|
13
15
|
pathname?: string;
|
|
16
|
+
showProgressionIcons?: boolean;
|
|
14
17
|
};
|
|
15
18
|
|
|
16
|
-
const SidebarItem: FC<SidebarItemProps> = ({
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
const SidebarItem: FC<SidebarItemProps> = ({
|
|
20
|
+
label,
|
|
21
|
+
link,
|
|
22
|
+
showProgressionIcons = false,
|
|
23
|
+
...props
|
|
24
|
+
}) => (
|
|
25
|
+
<BaseActiveLink
|
|
26
|
+
className={classNames({
|
|
27
|
+
[styles.item]: true,
|
|
28
|
+
[styles.progression]: showProgressionIcons,
|
|
29
|
+
})}
|
|
30
|
+
href={link}
|
|
31
|
+
activeClassName={styles.active}
|
|
32
|
+
{...props}
|
|
33
|
+
>
|
|
34
|
+
{showProgressionIcons && (
|
|
35
|
+
<ProgressionIcon className={styles.progressionIcon} />
|
|
36
|
+
)}
|
|
37
|
+
<span className={styles.label}>{label}</span>
|
|
20
38
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
</li>
|
|
39
|
+
{/^https?:/.test(link) && <ArrowUpRightIcon className={styles.icon} />}
|
|
40
|
+
</BaseActiveLink>
|
|
24
41
|
);
|
|
25
42
|
|
|
26
43
|
export default SidebarItem;
|
|
@@ -4,26 +4,25 @@
|
|
|
4
4
|
@apply flex
|
|
5
5
|
w-full
|
|
6
6
|
flex-col
|
|
7
|
-
items-start
|
|
8
7
|
gap-8
|
|
9
8
|
overflow-auto
|
|
10
|
-
|
|
11
|
-
border-
|
|
9
|
+
border-r-0
|
|
10
|
+
border-neutral-200
|
|
12
11
|
bg-white
|
|
13
12
|
px-4
|
|
14
13
|
py-6
|
|
15
14
|
sm:border-r
|
|
16
15
|
md:max-w-xs
|
|
17
16
|
lg:px-6
|
|
18
|
-
dark:border-
|
|
17
|
+
dark:border-neutral-900
|
|
19
18
|
dark:bg-neutral-950;
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
.navigation {
|
|
22
21
|
@apply hidden
|
|
23
22
|
sm:flex;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
.mobileSelect {
|
|
27
26
|
@apply flex
|
|
28
27
|
w-full
|
|
29
28
|
sm:hidden;
|
|
@@ -5,80 +5,84 @@ import Sidebar from '#ui/Containers/Sidebar';
|
|
|
5
5
|
type Story = StoryObj<typeof Sidebar>;
|
|
6
6
|
type Meta = MetaObj<typeof Sidebar>;
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
8
|
+
const args = {
|
|
9
|
+
groups: [
|
|
10
|
+
{
|
|
11
|
+
groupName: 'About Node.js',
|
|
12
|
+
items: [
|
|
13
|
+
{
|
|
14
|
+
link: '/item1',
|
|
15
|
+
label: 'About Node.js',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
link: '/item2',
|
|
19
|
+
label: 'Project Governance',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
link: '/item3',
|
|
23
|
+
label: 'Releases',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
link: '/item4',
|
|
27
|
+
label: 'Branding',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
link: '/item5',
|
|
31
|
+
label: 'Privacy Policy',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
link: '/item6',
|
|
35
|
+
label: 'Security Reporting',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
groupName: 'Get Involved',
|
|
41
|
+
items: [
|
|
42
|
+
{
|
|
43
|
+
link: '/item7',
|
|
44
|
+
label: 'Get Involved',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
link: '/item8',
|
|
48
|
+
label: 'Collab Summit',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
link: '/item9',
|
|
52
|
+
label: 'Contribute',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
link: '/item10',
|
|
56
|
+
label: 'Code of Conduct',
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
groupName: 'Download',
|
|
62
|
+
items: [
|
|
63
|
+
{
|
|
64
|
+
link: '/item11',
|
|
65
|
+
label: 'Download',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
link: '/item12',
|
|
69
|
+
label: 'Package Manager',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
link: '/item13',
|
|
73
|
+
label: 'Node.js Releases',
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
title: 'Sidebar',
|
|
79
|
+
onSelect: console.log,
|
|
80
|
+
pathname: '/item1',
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export const Default: Story = { args };
|
|
84
|
+
export const Progression: Story = {
|
|
85
|
+
args: { ...args, showProgressionIcons: true },
|
|
82
86
|
};
|
|
83
87
|
|
|
84
88
|
export default { component: Sidebar } as Meta;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentProps, FC } from 'react';
|
|
1
|
+
import type { ComponentProps, FC, PropsWithChildren } from 'react';
|
|
2
2
|
|
|
3
3
|
import Select from '#ui/Common/Select';
|
|
4
4
|
import SidebarGroup from '#ui/Containers/Sidebar/SidebarGroup';
|
|
@@ -7,19 +7,26 @@ import type { LinkLike } from '#ui/types';
|
|
|
7
7
|
import styles from './index.module.css';
|
|
8
8
|
|
|
9
9
|
type SidebarProps = {
|
|
10
|
-
groups: Array<
|
|
10
|
+
groups: Array<
|
|
11
|
+
Pick<ComponentProps<typeof SidebarGroup>, 'items' | 'groupName'>
|
|
12
|
+
>;
|
|
11
13
|
pathname?: string;
|
|
12
14
|
title: string;
|
|
13
15
|
onSelect: (value: string) => void;
|
|
14
16
|
as?: LinkLike;
|
|
17
|
+
showProgressionIcons?: boolean;
|
|
18
|
+
placeholder?: string;
|
|
15
19
|
};
|
|
16
20
|
|
|
17
|
-
const SideBar: FC<SidebarProps
|
|
21
|
+
const SideBar: FC<PropsWithChildren<SidebarProps>> = ({
|
|
18
22
|
groups,
|
|
19
23
|
pathname,
|
|
20
24
|
title,
|
|
21
25
|
onSelect,
|
|
22
26
|
as,
|
|
27
|
+
showProgressionIcons = false,
|
|
28
|
+
children,
|
|
29
|
+
placeholder,
|
|
23
30
|
}) => {
|
|
24
31
|
const selectItems = groups.map(({ items, groupName }) => ({
|
|
25
32
|
label: groupName,
|
|
@@ -27,18 +34,21 @@ const SideBar: FC<SidebarProps> = ({
|
|
|
27
34
|
}));
|
|
28
35
|
|
|
29
36
|
const currentItem = selectItems
|
|
30
|
-
.
|
|
31
|
-
.flat()
|
|
37
|
+
.flatMap(item => item.items)
|
|
32
38
|
.find(item => pathname === item.value);
|
|
33
39
|
|
|
34
40
|
return (
|
|
35
41
|
<aside className={styles.wrapper}>
|
|
42
|
+
{children}
|
|
43
|
+
|
|
36
44
|
{selectItems.length > 0 && (
|
|
37
45
|
<Select
|
|
38
46
|
label={title}
|
|
39
47
|
values={selectItems}
|
|
40
48
|
defaultValue={currentItem?.value}
|
|
49
|
+
placeholder={placeholder}
|
|
41
50
|
onChange={onSelect}
|
|
51
|
+
className={styles.mobileSelect}
|
|
42
52
|
/>
|
|
43
53
|
)}
|
|
44
54
|
|
|
@@ -49,6 +59,8 @@ const SideBar: FC<SidebarProps> = ({
|
|
|
49
59
|
items={items}
|
|
50
60
|
pathname={pathname}
|
|
51
61
|
as={as}
|
|
62
|
+
showProgressionIcons={showProgressionIcons}
|
|
63
|
+
className={styles.navigation}
|
|
52
64
|
/>
|
|
53
65
|
))}
|
|
54
66
|
</aside>
|