@node-core/ui-components 1.0.1-23f195d7d72e3651ff23da791e2f997015a34433 → 1.0.1-2aa8ae62b828936ceb5251f37f7c539668856ed5
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/Modal/index.module.css +3 -3
- package/Common/Modal/index.stories.tsx +7 -5
- package/Common/Modal/index.tsx +16 -14
- package/Containers/DocSideBar/index.tsx +0 -0
- 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 +12 -12
- 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
package/package.json
CHANGED
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
"files": [
|
|
14
14
|
"Common",
|
|
15
15
|
"Containers",
|
|
16
|
-
"MDX",
|
|
17
16
|
"Icons",
|
|
17
|
+
"MDX",
|
|
18
|
+
"stylelint",
|
|
18
19
|
"styles",
|
|
19
|
-
"types.ts"
|
|
20
|
-
"stylelint"
|
|
20
|
+
"types.ts"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@heroicons/react": "^2.2.0",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"tailwindcss": "~4.0.17"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@storybook/addon-themes": "^9.0.3",
|
|
41
40
|
"@storybook/addon-styling-webpack": "^1.0.1",
|
|
41
|
+
"@storybook/addon-themes": "^9.0.3",
|
|
42
42
|
"@storybook/addon-webpack5-compiler-swc": "^3.0.0",
|
|
43
43
|
"@storybook/react": "^9.0.3",
|
|
44
44
|
"@storybook/react-webpack5": "^9.0.3",
|
|
45
45
|
"@testing-library/user-event": "~14.6.1",
|
|
46
46
|
"@types/node": "22.15.3",
|
|
47
|
-
"@types/react": "^19.1.
|
|
47
|
+
"@types/react": "^19.1.6",
|
|
48
48
|
"cross-env": "^7.0.3",
|
|
49
49
|
"css-loader": "~7.1.2",
|
|
50
50
|
"eslint-plugin-react": "~7.37.4",
|
|
@@ -54,13 +54,13 @@
|
|
|
54
54
|
"react": "^19.1.0",
|
|
55
55
|
"storybook": "^9.0.3",
|
|
56
56
|
"style-loader": "~4.0.0",
|
|
57
|
-
"stylelint": "^16.
|
|
57
|
+
"stylelint": "^16.20.0",
|
|
58
58
|
"stylelint-config-standard": "^38.0.0",
|
|
59
59
|
"stylelint-order": "7.0.0",
|
|
60
60
|
"stylelint-selector-bem-pattern": "4.0.1",
|
|
61
61
|
"tsx": "^4.19.3",
|
|
62
62
|
"typescript": "~5.8.2",
|
|
63
|
-
"typescript-eslint": "~8.
|
|
63
|
+
"typescript-eslint": "~8.33.1"
|
|
64
64
|
},
|
|
65
65
|
"imports": {
|
|
66
66
|
"#ui/*": [
|
|
@@ -74,17 +74,17 @@
|
|
|
74
74
|
"engines": {
|
|
75
75
|
"node": ">=20"
|
|
76
76
|
},
|
|
77
|
-
"version": "1.0.1-
|
|
77
|
+
"version": "1.0.1-2aa8ae62b828936ceb5251f37f7c539668856ed5",
|
|
78
78
|
"scripts": {
|
|
79
|
-
"check-types": "tsc --noEmit",
|
|
80
79
|
"lint": "turbo run lint:js lint:css",
|
|
81
80
|
"lint:css": "stylelint \"**/*.css\" --allow-empty-input --cache --cache-strategy=content --cache-location=.stylelintcache",
|
|
82
|
-
"lint:fix": "
|
|
81
|
+
"lint:fix": "node --run lint -- -- --fix",
|
|
83
82
|
"lint:js": "eslint \"**/*.{js,mjs,ts,tsx}\"",
|
|
83
|
+
"lint:types": "tsc --noEmit",
|
|
84
84
|
"storybook": "cross-env NODE_NO_WARNINGS=1 storybook dev -p 6006 --quiet",
|
|
85
85
|
"storybook:build": "cross-env NODE_NO_WARNINGS=1 storybook build --quiet --webpack-stats-json",
|
|
86
|
-
"test": "
|
|
86
|
+
"test": "node --run test:unit",
|
|
87
87
|
"test:unit": "cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --test-coverage-exclude=**/*.test.* --enable-source-maps --import=global-jsdom/register --import=tsx --import=../../tests/setup.mjs --test **/*.test.*",
|
|
88
|
-
"test:unit:watch": "
|
|
88
|
+
"test:unit:watch": "node --run test:unit -- --watch"
|
|
89
89
|
}
|
|
90
90
|
}
|
package/styles/markdown.css
CHANGED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
@reference "../../../styles/index.css";
|
|
2
|
-
|
|
3
|
-
.group {
|
|
4
|
-
@apply flex
|
|
5
|
-
flex-col
|
|
6
|
-
gap-4
|
|
7
|
-
text-sm
|
|
8
|
-
font-medium
|
|
9
|
-
text-neutral-800
|
|
10
|
-
dark:text-neutral-200;
|
|
11
|
-
|
|
12
|
-
.items {
|
|
13
|
-
@apply relative
|
|
14
|
-
-left-1
|
|
15
|
-
flex
|
|
16
|
-
flex-col
|
|
17
|
-
gap-2
|
|
18
|
-
after:absolute
|
|
19
|
-
after:left-[0.45rem]
|
|
20
|
-
after:top-0
|
|
21
|
-
after:z-10
|
|
22
|
-
after:h-full
|
|
23
|
-
after:w-px
|
|
24
|
-
after:bg-neutral-200
|
|
25
|
-
after:content-['']
|
|
26
|
-
dark:after:bg-neutral-800;
|
|
27
|
-
|
|
28
|
-
a {
|
|
29
|
-
@apply first:before:absolute
|
|
30
|
-
first:before:bottom-[calc(50%+0.25rem)]
|
|
31
|
-
first:before:left-0
|
|
32
|
-
first:before:h-20
|
|
33
|
-
first:before:w-4
|
|
34
|
-
first:before:bg-white
|
|
35
|
-
first:before:content-['']
|
|
36
|
-
last:after:absolute
|
|
37
|
-
last:after:left-0
|
|
38
|
-
last:after:top-[calc(50%+0.25rem)]
|
|
39
|
-
last:after:h-20
|
|
40
|
-
last:after:w-4
|
|
41
|
-
last:after:bg-white
|
|
42
|
-
last:after:content-['']
|
|
43
|
-
first:dark:before:bg-neutral-950
|
|
44
|
-
last:dark:after:bg-neutral-950;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { ComponentProps, FC } from 'react';
|
|
2
|
-
|
|
3
|
-
import ProgressionSidebarItem from '#ui/Common/ProgressionSidebar/ProgressionSidebarItem';
|
|
4
|
-
import type { FormattedMessage, LinkLike } from '#ui/types';
|
|
5
|
-
|
|
6
|
-
import styles from './index.module.css';
|
|
7
|
-
|
|
8
|
-
type ProgressionSidebarGroupProps = {
|
|
9
|
-
groupName: FormattedMessage;
|
|
10
|
-
items: Array<ComponentProps<typeof ProgressionSidebarItem>>;
|
|
11
|
-
pathname?: string;
|
|
12
|
-
as?: LinkLike;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const ProgressionSidebarGroup: FC<ProgressionSidebarGroupProps> = ({
|
|
16
|
-
groupName,
|
|
17
|
-
items,
|
|
18
|
-
...props
|
|
19
|
-
}) => (
|
|
20
|
-
<section className={styles.group}>
|
|
21
|
-
{groupName}
|
|
22
|
-
<div className={styles.items}>
|
|
23
|
-
{items.map(({ label, link }) => (
|
|
24
|
-
<ProgressionSidebarItem
|
|
25
|
-
key={link}
|
|
26
|
-
label={label}
|
|
27
|
-
link={link}
|
|
28
|
-
{...props}
|
|
29
|
-
/>
|
|
30
|
-
))}
|
|
31
|
-
</div>
|
|
32
|
-
</section>
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
export default ProgressionSidebarGroup;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
@reference "../../../styles/index.css";
|
|
2
|
-
|
|
3
|
-
a.item {
|
|
4
|
-
@apply font-regular
|
|
5
|
-
relative
|
|
6
|
-
z-20
|
|
7
|
-
flex
|
|
8
|
-
w-full
|
|
9
|
-
items-center
|
|
10
|
-
gap-1
|
|
11
|
-
overflow-hidden
|
|
12
|
-
text-sm
|
|
13
|
-
text-neutral-800
|
|
14
|
-
dark:text-neutral-200;
|
|
15
|
-
|
|
16
|
-
&:hover {
|
|
17
|
-
@apply text-neutral-900
|
|
18
|
-
motion-safe:transition-colors
|
|
19
|
-
dark:text-white;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
svg {
|
|
23
|
-
@apply shrink-0
|
|
24
|
-
fill-neutral-200
|
|
25
|
-
stroke-white
|
|
26
|
-
stroke-[4]
|
|
27
|
-
dark:fill-neutral-800
|
|
28
|
-
dark:stroke-neutral-950;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
&.active {
|
|
32
|
-
@apply text-neutral-900
|
|
33
|
-
dark:text-white;
|
|
34
|
-
|
|
35
|
-
svg {
|
|
36
|
-
@apply fill-green-500;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { FC } from 'react';
|
|
2
|
-
|
|
3
|
-
import BaseActiveLink from '#ui/Common/BaseActiveLink';
|
|
4
|
-
import ProgressionSidebarIcon from '#ui/Common/ProgressionSidebar/ProgressionSidebarIcon';
|
|
5
|
-
import type { FormattedMessage, LinkLike } from '#ui/types';
|
|
6
|
-
|
|
7
|
-
import styles from './index.module.css';
|
|
8
|
-
|
|
9
|
-
type ProgressionSidebarItemProps = {
|
|
10
|
-
label: FormattedMessage;
|
|
11
|
-
link: string;
|
|
12
|
-
as?: LinkLike;
|
|
13
|
-
pathname?: string;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const ProgressionSidebarItem: FC<ProgressionSidebarItemProps> = ({
|
|
17
|
-
label,
|
|
18
|
-
link,
|
|
19
|
-
...props
|
|
20
|
-
}) => (
|
|
21
|
-
<BaseActiveLink
|
|
22
|
-
className={styles.item}
|
|
23
|
-
activeClassName={styles.active}
|
|
24
|
-
href={link}
|
|
25
|
-
{...props}
|
|
26
|
-
>
|
|
27
|
-
<ProgressionSidebarIcon />
|
|
28
|
-
{label}
|
|
29
|
-
</BaseActiveLink>
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
export default ProgressionSidebarItem;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
@reference "../../styles/index.css";
|
|
2
|
-
|
|
3
|
-
.wrapper {
|
|
4
|
-
@apply flex
|
|
5
|
-
w-full
|
|
6
|
-
flex-col
|
|
7
|
-
gap-8
|
|
8
|
-
overflow-auto
|
|
9
|
-
border-r-0
|
|
10
|
-
border-neutral-200
|
|
11
|
-
bg-white
|
|
12
|
-
px-4
|
|
13
|
-
py-6
|
|
14
|
-
sm:border-r
|
|
15
|
-
md:max-w-xs
|
|
16
|
-
lg:px-6
|
|
17
|
-
dark:border-neutral-900
|
|
18
|
-
dark:bg-neutral-950;
|
|
19
|
-
|
|
20
|
-
> section {
|
|
21
|
-
@apply hidden
|
|
22
|
-
sm:flex;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
> span {
|
|
26
|
-
@apply flex
|
|
27
|
-
w-full
|
|
28
|
-
sm:hidden;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import ProgressionSidebar from '#ui/Common/ProgressionSidebar';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof ProgressionSidebar>;
|
|
6
|
-
type Meta = MetaObj<typeof ProgressionSidebar>;
|
|
7
|
-
|
|
8
|
-
export const Default: Story = {
|
|
9
|
-
args: {
|
|
10
|
-
groups: [
|
|
11
|
-
{
|
|
12
|
-
groupName: 'Getting Started',
|
|
13
|
-
items: [
|
|
14
|
-
{
|
|
15
|
-
label: 'Introduction to Node.js',
|
|
16
|
-
link: '/',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
label: 'How to install Node.js',
|
|
20
|
-
link: '/how-to-install-nodejs',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
label: 'How much JavaScript do you need to know to use Node.js?',
|
|
24
|
-
link: '/how-much-javascript-do-you-need-to-know-to-use-nodejs',
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
label: 'Differences between Node.js and the Browser',
|
|
28
|
-
link: '/differences-between-nodejs-and-the-browser',
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
label: 'The V8 JavaScript Engine',
|
|
32
|
-
link: '/the-v8-javascript-engine',
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
label: 'An introduction to the npm package manager',
|
|
36
|
-
link: '/an-introduction-to-the-npm-package-manager',
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
groupName: 'Asynchronous Work',
|
|
42
|
-
items: [
|
|
43
|
-
{
|
|
44
|
-
label: 'Asynchronous flow control',
|
|
45
|
-
link: '/asynchronous-flow-control',
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
label: 'Overview of Blocking vs Non-Blocking',
|
|
49
|
-
link: '/overview-of-blocking-vs-non-blocking',
|
|
50
|
-
},
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
groupName: 'Manipulating Files',
|
|
55
|
-
items: [
|
|
56
|
-
{
|
|
57
|
-
label: 'Node.js file stats',
|
|
58
|
-
link: '/nodejs-file-stats',
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
label: 'Node.js File Paths',
|
|
62
|
-
link: '/nodejs-file-paths',
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
groupName: 'Single item',
|
|
68
|
-
items: [
|
|
69
|
-
{
|
|
70
|
-
label: 'Item',
|
|
71
|
-
link: '/item',
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
export default { component: ProgressionSidebar } as Meta;
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useRef, type ComponentProps, type FC } from 'react';
|
|
4
|
-
|
|
5
|
-
import ProgressionSidebarGroup from '#ui/Common/ProgressionSidebar/ProgressionSidebarGroup';
|
|
6
|
-
import Select from '#ui/Common/Select';
|
|
7
|
-
import type { LinkLike } from '#ui/types';
|
|
8
|
-
|
|
9
|
-
import styles from './index.module.css';
|
|
10
|
-
|
|
11
|
-
type ProgressionSidebarProps = {
|
|
12
|
-
groups: Array<ComponentProps<typeof ProgressionSidebarGroup>>;
|
|
13
|
-
pathname?: string;
|
|
14
|
-
title: string;
|
|
15
|
-
onSelect: (value: string) => void;
|
|
16
|
-
as?: LinkLike;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const ProgressionSidebar: FC<ProgressionSidebarProps> = ({
|
|
20
|
-
groups,
|
|
21
|
-
pathname,
|
|
22
|
-
title,
|
|
23
|
-
onSelect,
|
|
24
|
-
as,
|
|
25
|
-
}) => {
|
|
26
|
-
const ref = useRef<HTMLElement>(null);
|
|
27
|
-
const selectItems = groups.map(({ items, groupName }) => ({
|
|
28
|
-
label: groupName,
|
|
29
|
-
items: items.map(({ label, link }) => ({ value: link, label })),
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
const currentItem = selectItems
|
|
33
|
-
.map(item => item.items)
|
|
34
|
-
.flat()
|
|
35
|
-
.find(item => pathname === item.value);
|
|
36
|
-
|
|
37
|
-
return (
|
|
38
|
-
<nav className={styles.wrapper} ref={ref}>
|
|
39
|
-
<Select
|
|
40
|
-
label={title}
|
|
41
|
-
onChange={onSelect}
|
|
42
|
-
values={selectItems}
|
|
43
|
-
defaultValue={currentItem?.value}
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
{groups.map(({ groupName, items }) => (
|
|
47
|
-
<ProgressionSidebarGroup
|
|
48
|
-
key={groupName.toString()}
|
|
49
|
-
groupName={groupName}
|
|
50
|
-
items={items}
|
|
51
|
-
as={as}
|
|
52
|
-
pathname={pathname}
|
|
53
|
-
/>
|
|
54
|
-
))}
|
|
55
|
-
</nav>
|
|
56
|
-
);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export default ProgressionSidebar;
|