@node-core/ui-components 1.0.1-df203d0fe21ee5d80d258c60dc821e8ac0601ce4 → 1.0.1-e1f87bde264af01e260a8efa4fab1749a2c6bc29
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.js +5 -0
- package/Common/AlertBox/index.module.css +47 -46
- package/Common/AvatarGroup/Avatar/index.js +11 -0
- package/Common/AvatarGroup/Avatar/index.module.css +50 -30
- package/Common/AvatarGroup/Overlay/index.js +6 -0
- package/Common/AvatarGroup/Overlay/index.module.css +28 -21
- package/Common/AvatarGroup/index.js +21 -0
- package/Common/AvatarGroup/index.module.css +12 -15
- package/Common/Badge/index.js +7 -0
- package/Common/Badge/index.module.css +34 -26
- package/Common/BadgeGroup/index.js +6 -0
- package/Common/BadgeGroup/index.module.css +75 -51
- package/Common/Banner/index.js +4 -0
- package/Common/Banner/index.module.css +30 -27
- package/Common/BaseActiveLink/index.js +14 -0
- package/Common/BaseButton/index.js +10 -0
- package/Common/BaseButton/index.module.css +332 -102
- package/Common/BaseCodeBox/index.js +50 -0
- package/Common/BaseCodeBox/index.module.css +76 -64
- package/Common/BaseCrossLink/index.js +12 -0
- package/Common/BaseCrossLink/index.module.css +57 -39
- package/Common/BaseLinkTabs/index.js +5 -0
- package/Common/BaseLinkTabs/index.module.css +67 -33
- package/Common/BasePagination/Ellipsis/index.js +4 -0
- package/Common/BasePagination/Ellipsis/index.module.css +14 -8
- package/Common/BasePagination/PaginationListItem/index.js +6 -0
- package/Common/BasePagination/PaginationListItem/index.module.css +36 -21
- package/Common/BasePagination/PrevNextArrow.js +7 -0
- package/Common/BasePagination/index.js +10 -0
- package/Common/BasePagination/index.module.css +27 -26
- package/Common/BasePagination/useGetPageElements.js +77 -0
- package/Common/Blockquote/index.js +4 -0
- package/Common/Blockquote/index.module.css +44 -23
- package/Common/Breadcrumbs/BreadcrumbHomeLink/index.js +9 -0
- package/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +3 -3
- package/Common/Breadcrumbs/BreadcrumbItem/index.js +6 -0
- package/Common/Breadcrumbs/BreadcrumbItem/index.module.css +38 -27
- package/Common/Breadcrumbs/BreadcrumbLink/index.js +5 -0
- package/Common/Breadcrumbs/BreadcrumbLink/index.module.css +26 -16
- package/Common/Breadcrumbs/BreadcrumbRoot/index.js +4 -0
- package/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +8 -7
- package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.js +4 -0
- package/Common/Breadcrumbs/index.js +22 -0
- package/Common/ChangeHistory/index.js +9 -0
- package/Common/ChangeHistory/index.module.css +198 -0
- package/Common/CodeTabs/index.js +5 -0
- package/Common/CodeTabs/index.module.css +47 -36
- package/Common/DataTag/index.js +18 -0
- package/Common/DataTag/index.module.css +54 -0
- package/Common/GlowingBackdrop/index.js +5 -0
- package/Common/GlowingBackdrop/index.module.css +126 -28
- package/Common/LanguageDropDown/index.js +11 -0
- package/Common/LanguageDropDown/index.module.css +140 -42
- package/Common/Modal/index.js +10 -0
- package/Common/Modal/index.module.css +217 -62
- package/Common/NodejsLogo/index.js +7 -0
- package/Common/NodejsLogo/index.module.css +3 -4
- package/Common/Notification/index.js +6 -0
- package/Common/Notification/index.module.css +101 -17
- package/Common/Preview/index.js +7 -0
- package/Common/Preview/index.module.css +269 -65
- package/Common/Select/index.js +46 -0
- package/Common/Select/index.module.css +294 -127
- package/Common/Separator/index.js +7 -0
- package/Common/Separator/index.module.css +7 -10
- package/Common/Skeleton/index.js +18 -0
- package/Common/Skeleton/index.module.css +118 -21
- package/Common/Tabs/index.js +6 -0
- package/Common/Tabs/index.module.css +58 -40
- package/Common/ThemeToggle/index.js +7 -0
- package/Common/ThemeToggle/index.module.css +18 -11
- package/Common/Tooltip/index.js +8 -0
- package/Common/Tooltip/index.module.css +119 -29
- package/Containers/Article/index.js +4 -0
- package/Containers/Article/index.module.css +127 -58
- package/Containers/DocSideBar/index.js +1 -0
- package/Containers/Footer/index.js +22 -0
- package/Containers/Footer/index.module.css +51 -36
- package/Containers/MetaBar/index.js +12 -0
- package/Containers/MetaBar/index.module.css +101 -69
- package/Containers/NavBar/NavItem/index.js +7 -0
- package/Containers/NavBar/NavItem/index.module.css +50 -36
- package/Containers/NavBar/index.js +18 -0
- package/Containers/NavBar/index.module.css +176 -96
- package/Containers/Sidebar/ProgressionIcon/index.js +3 -0
- package/Containers/Sidebar/SidebarGroup/index.js +9 -0
- package/Containers/Sidebar/SidebarGroup/index.module.css +188 -22
- package/Containers/Sidebar/SidebarItem/index.js +11 -0
- package/Containers/Sidebar/SidebarItem/index.module.css +60 -28
- package/Containers/Sidebar/index.js +15 -0
- package/Containers/Sidebar/index.module.css +44 -27
- package/Icons/HexagonGrid.js +3 -0
- package/Icons/InstallationMethod/Choco.js +3 -0
- package/Icons/InstallationMethod/Devbox.js +3 -0
- package/Icons/InstallationMethod/Docker.js +3 -0
- package/Icons/InstallationMethod/FNM.js +3 -0
- package/Icons/InstallationMethod/Homebrew.js +3 -0
- package/Icons/InstallationMethod/N.js +5 -0
- package/Icons/InstallationMethod/NVM.js +3 -0
- package/Icons/InstallationMethod/Volta.js +3 -0
- package/Icons/InstallationMethod/{index.ts → index.js} +0 -1
- package/Icons/Logos/JsWhite.js +3 -0
- package/Icons/Logos/Nodejs.js +12 -0
- package/Icons/Logos/index.js +3 -0
- package/Icons/OperatingSystem/AIX.js +3 -0
- package/Icons/OperatingSystem/Apple.js +3 -0
- package/Icons/OperatingSystem/Linux.js +3 -0
- package/Icons/OperatingSystem/Microsoft.js +3 -0
- package/Icons/OperatingSystem/{index.ts → index.js} +0 -1
- package/Icons/PackageManager/Npm.js +3 -0
- package/Icons/PackageManager/Pnpm.js +3 -0
- package/Icons/PackageManager/Yarn.js +3 -0
- package/Icons/PackageManager/{index.ts → index.js} +0 -1
- package/Icons/Social/Bluesky.js +3 -0
- package/Icons/Social/Discord.js +3 -0
- package/Icons/Social/GitHub.js +3 -0
- package/Icons/Social/LinkedIn.js +3 -0
- package/Icons/Social/Mastodon.js +3 -0
- package/Icons/Social/Slack.js +3 -0
- package/Icons/Social/X.js +3 -0
- package/Icons/Social/{index.ts → index.js} +0 -1
- package/MDX/CodeTabs.js +16 -0
- package/package.json +19 -69
- package/stylelint/one-utility-class-per-line.mjs +34 -50
- package/stylelint/utils.mjs +19 -25
- package/styles/index.css +1124 -26
- package/types.js +1 -0
- package/Common/AlertBox/index.stories.tsx +0 -73
- package/Common/AlertBox/index.tsx +0 -24
- package/Common/AvatarGroup/Avatar/index.stories.tsx +0 -22
- package/Common/AvatarGroup/Avatar/index.tsx +0 -67
- package/Common/AvatarGroup/Overlay/index.stories.tsx +0 -33
- package/Common/AvatarGroup/Overlay/index.tsx +0 -37
- package/Common/AvatarGroup/__tests__/index.test.jsx +0 -55
- package/Common/AvatarGroup/index.stories.tsx +0 -56
- package/Common/AvatarGroup/index.tsx +0 -87
- package/Common/Badge/index.stories.tsx +0 -38
- package/Common/Badge/index.tsx +0 -35
- package/Common/BadgeGroup/index.stories.tsx +0 -35
- package/Common/BadgeGroup/index.tsx +0 -35
- package/Common/Banner/index.stories.tsx +0 -29
- package/Common/Banner/index.tsx +0 -18
- package/Common/BaseActiveLink/__tests__/index.test.jsx +0 -52
- package/Common/BaseActiveLink/index.tsx +0 -34
- package/Common/BaseButton/index.stories.tsx +0 -67
- package/Common/BaseButton/index.tsx +0 -59
- package/Common/BaseCodeBox/index.stories.tsx +0 -39
- package/Common/BaseCodeBox/index.tsx +0 -133
- package/Common/BaseCrossLink/index.stories.tsx +0 -38
- package/Common/BaseCrossLink/index.tsx +0 -46
- package/Common/BaseLinkTabs/index.stories.tsx +0 -34
- package/Common/BaseLinkTabs/index.tsx +0 -53
- package/Common/BasePagination/Ellipsis/index.stories.tsx +0 -10
- package/Common/BasePagination/Ellipsis/index.tsx +0 -11
- package/Common/BasePagination/PaginationListItem/__tests__/index.test.jsx +0 -58
- package/Common/BasePagination/PaginationListItem/index.stories.tsx +0 -40
- package/Common/BasePagination/PaginationListItem/index.tsx +0 -39
- package/Common/BasePagination/PrevNextArrow.tsx +0 -15
- package/Common/BasePagination/__tests__/index.test.jsx +0 -180
- package/Common/BasePagination/index.stories.tsx +0 -67
- package/Common/BasePagination/index.tsx +0 -77
- package/Common/BasePagination/useGetPageElements.tsx +0 -132
- package/Common/Blockquote/index.stories.tsx +0 -45
- package/Common/Blockquote/index.tsx +0 -11
- package/Common/Breadcrumbs/BreadcrumbHomeLink/index.tsx +0 -30
- package/Common/Breadcrumbs/BreadcrumbItem/index.tsx +0 -42
- package/Common/Breadcrumbs/BreadcrumbLink/index.tsx +0 -37
- package/Common/Breadcrumbs/BreadcrumbRoot/index.tsx +0 -20
- package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.tsx +0 -9
- package/Common/Breadcrumbs/index.stories.tsx +0 -94
- package/Common/Breadcrumbs/index.tsx +0 -81
- package/Common/CodeTabs/index.stories.tsx +0 -74
- package/Common/CodeTabs/index.tsx +0 -16
- package/Common/GlowingBackdrop/index.stories.tsx +0 -10
- package/Common/GlowingBackdrop/index.tsx +0 -13
- package/Common/LanguageDropDown/index.stories.tsx +0 -19
- package/Common/LanguageDropDown/index.tsx +0 -56
- package/Common/Modal/index.stories.tsx +0 -32
- package/Common/Modal/index.tsx +0 -48
- package/Common/NodejsLogo/index.stories.tsx +0 -14
- package/Common/NodejsLogo/index.tsx +0 -26
- package/Common/Notification/index.stories.tsx +0 -36
- package/Common/Notification/index.tsx +0 -34
- package/Common/Preview/index.stories.tsx +0 -44
- package/Common/Preview/index.tsx +0 -25
- package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.module.css +0 -47
- package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.tsx +0 -35
- package/Common/ProgressionSidebar/ProgressionSidebarIcon/index.tsx +0 -16
- 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/Common/Select/__tests__/index.test.jsx +0 -67
- package/Common/Select/index.stories.tsx +0 -111
- package/Common/Select/index.tsx +0 -187
- package/Common/Separator/index.stories.tsx +0 -32
- package/Common/Separator/index.tsx +0 -27
- package/Common/Skeleton/index.tsx +0 -39
- package/Common/Tabs/__tests__/index.test.jsx +0 -52
- package/Common/Tabs/index.stories.tsx +0 -50
- package/Common/Tabs/index.tsx +0 -54
- package/Common/ThemeToggle/__tests__/index.test.jsx +0 -35
- package/Common/ThemeToggle/index.stories.tsx +0 -10
- package/Common/ThemeToggle/index.tsx +0 -15
- package/Common/Tooltip/index.stories.tsx +0 -73
- package/Common/Tooltip/index.tsx +0 -48
- package/Containers/Article/index.stories.tsx +0 -39
- package/Containers/Article/index.tsx +0 -9
- package/Containers/Footer/index.stories.tsx +0 -27
- package/Containers/Footer/index.tsx +0 -95
- package/Containers/MetaBar/__tests__/index.test.jsx +0 -63
- package/Containers/MetaBar/index.stories.tsx +0 -80
- package/Containers/MetaBar/index.tsx +0 -72
- package/Containers/NavBar/NavItem/index.stories.tsx +0 -38
- package/Containers/NavBar/NavItem/index.tsx +0 -44
- package/Containers/NavBar/index.stories.tsx +0 -45
- package/Containers/NavBar/index.tsx +0 -94
- package/Containers/Sidebar/SidebarGroup/index.stories.tsx +0 -36
- package/Containers/Sidebar/SidebarGroup/index.tsx +0 -30
- package/Containers/Sidebar/SidebarItem/index.stories.tsx +0 -15
- package/Containers/Sidebar/SidebarItem/index.tsx +0 -26
- package/Containers/Sidebar/index.stories.tsx +0 -84
- package/Containers/Sidebar/index.tsx +0 -58
- package/Icons/HexagonGrid.stories.tsx +0 -10
- package/Icons/HexagonGrid.tsx +0 -1434
- package/Icons/InstallationMethod/Choco.tsx +0 -78
- package/Icons/InstallationMethod/Devbox.tsx +0 -21
- package/Icons/InstallationMethod/Docker.tsx +0 -20
- package/Icons/InstallationMethod/FNM.tsx +0 -132
- package/Icons/InstallationMethod/Homebrew.tsx +0 -69
- package/Icons/InstallationMethod/N.tsx +0 -32
- package/Icons/InstallationMethod/NVM.tsx +0 -63
- package/Icons/InstallationMethod/Volta.tsx +0 -34
- package/Icons/Logos/JsGreen.tsx +0 -24
- package/Icons/Logos/JsWhite.tsx +0 -37
- package/Icons/Logos/Nodejs.tsx +0 -188
- package/Icons/Logos/NodejsStackedBlack.tsx +0 -98
- package/Icons/Logos/NodejsStackedDark.tsx +0 -124
- package/Icons/Logos/NodejsStackedLight.tsx +0 -123
- package/Icons/Logos/NodejsStackedWhite.tsx +0 -98
- package/Icons/Logos/index.ts +0 -17
- package/Icons/OperatingSystem/AIX.tsx +0 -46
- package/Icons/OperatingSystem/Apple.tsx +0 -23
- package/Icons/OperatingSystem/Linux.tsx +0 -969
- package/Icons/OperatingSystem/Microsoft.tsx +0 -19
- package/Icons/PackageManager/Npm.tsx +0 -21
- package/Icons/PackageManager/Pnpm.tsx +0 -22
- package/Icons/PackageManager/Yarn.tsx +0 -22
- package/Icons/Social/Bluesky.tsx +0 -19
- package/Icons/Social/Discord.tsx +0 -20
- package/Icons/Social/GitHub.tsx +0 -16
- package/Icons/Social/LinkedIn.tsx +0 -16
- package/Icons/Social/Mastodon.tsx +0 -36
- package/Icons/Social/Slack.tsx +0 -31
- package/Icons/Social/X.tsx +0 -16
- package/stylelint/__tests__/index.test.mjs +0 -80
- package/styles/animations.css +0 -47
- package/styles/base.css +0 -17
- package/styles/effects.css +0 -12
- package/styles/markdown.css +0 -173
- package/styles/theme.css +0 -175
- package/types.ts +0 -25
package/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { ExclamationCircleIcon } from '@heroicons/react/24/solid';
|
|
2
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
3
|
-
|
|
4
|
-
import AlertBox from '#ui/Common/AlertBox';
|
|
5
|
-
|
|
6
|
-
type Story = StoryObj<typeof AlertBox>;
|
|
7
|
-
type Meta = MetaObj<typeof AlertBox>;
|
|
8
|
-
|
|
9
|
-
export const Info: Story = {
|
|
10
|
-
args: {
|
|
11
|
-
level: 'info',
|
|
12
|
-
title: '3',
|
|
13
|
-
children:
|
|
14
|
-
'Legacy. Although this feature is unlikely to be removed and is still covered by semantic versioning guarantees, it is no longer actively maintained, and other alternatives are available.',
|
|
15
|
-
size: 'default',
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export const Success: Story = {
|
|
20
|
-
args: {
|
|
21
|
-
level: 'success',
|
|
22
|
-
title: '2',
|
|
23
|
-
children:
|
|
24
|
-
'Stable. Compatibility with the npm ecosystem is a high priority.',
|
|
25
|
-
size: 'default',
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const Warning: Story = {
|
|
30
|
-
args: {
|
|
31
|
-
level: 'warning',
|
|
32
|
-
title: '1',
|
|
33
|
-
children:
|
|
34
|
-
'Experimental. The feature is not subject to semantic versioning rules. Non-backward compatible changes or removal may occur in any future release. Use of the feature is not recommended in production environments. Experimental features are subdivided into stages:',
|
|
35
|
-
size: 'default',
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export const Danger: Story = {
|
|
40
|
-
args: {
|
|
41
|
-
level: 'danger',
|
|
42
|
-
title: '0',
|
|
43
|
-
children:
|
|
44
|
-
'Deprecated. The feature may emit warnings. Backward compatibility is not guaranteed.',
|
|
45
|
-
size: 'default',
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export const WithIcon: Story = {
|
|
50
|
-
args: {
|
|
51
|
-
level: 'info',
|
|
52
|
-
title: '3',
|
|
53
|
-
children: (
|
|
54
|
-
<p>
|
|
55
|
-
Lorem ipsum dolor sit amet <ExclamationCircleIcon /> consectetur
|
|
56
|
-
adipisicing elit. Inventore, quasi doloremque. Totam, earum velit, sunt
|
|
57
|
-
voluptates fugiat beatae praesentium quis magni explicabo repudiandae
|
|
58
|
-
nam aut molestias ex ad sequi eum!
|
|
59
|
-
</p>
|
|
60
|
-
),
|
|
61
|
-
size: 'default',
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export default {
|
|
66
|
-
component: AlertBox,
|
|
67
|
-
argTypes: {
|
|
68
|
-
size: {
|
|
69
|
-
options: ['default', 'small'],
|
|
70
|
-
control: { type: 'radio' },
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
} as Meta;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import classNames from 'classnames';
|
|
2
|
-
import type { FC, PropsWithChildren } from 'react';
|
|
3
|
-
|
|
4
|
-
import styles from './index.module.css';
|
|
5
|
-
|
|
6
|
-
type AlertBoxProps = PropsWithChildren<{
|
|
7
|
-
level: 'info' | 'success' | 'warning' | 'danger';
|
|
8
|
-
title: string;
|
|
9
|
-
size?: 'default' | 'small';
|
|
10
|
-
}>;
|
|
11
|
-
|
|
12
|
-
const AlertBox: FC<AlertBoxProps> = ({
|
|
13
|
-
level,
|
|
14
|
-
title,
|
|
15
|
-
children,
|
|
16
|
-
size = 'default',
|
|
17
|
-
}) => (
|
|
18
|
-
<div className={classNames(styles.alertBox, styles[level], styles[size])}>
|
|
19
|
-
<span className={styles.title}>{title}</span>
|
|
20
|
-
<span>{children}</span>
|
|
21
|
-
</div>
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
export default AlertBox;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import Avatar from '#ui/Common/AvatarGroup/Avatar';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof Avatar>;
|
|
6
|
-
type Meta = MetaObj<typeof Avatar>;
|
|
7
|
-
|
|
8
|
-
export const Default: Story = {
|
|
9
|
-
args: {
|
|
10
|
-
image: 'https://avatars.githubusercontent.com/ghost',
|
|
11
|
-
nickname: 'ghost',
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const NoSquare: Story = {
|
|
16
|
-
args: {
|
|
17
|
-
image: '/static/images/logo-hexagon-card.png',
|
|
18
|
-
nickname: 'SD',
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default { component: Avatar } as Meta;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import * as RadixAvatar from '@radix-ui/react-avatar';
|
|
2
|
-
import classNames from 'classnames';
|
|
3
|
-
import type { HTMLAttributes } from 'react';
|
|
4
|
-
import { forwardRef } from 'react';
|
|
5
|
-
|
|
6
|
-
import type { LinkLike } from '#ui/types';
|
|
7
|
-
|
|
8
|
-
import styles from './index.module.css';
|
|
9
|
-
|
|
10
|
-
export type AvatarProps = {
|
|
11
|
-
image?: string;
|
|
12
|
-
name?: string;
|
|
13
|
-
nickname: string;
|
|
14
|
-
fallback?: string;
|
|
15
|
-
size?: 'small' | 'medium';
|
|
16
|
-
url?: string;
|
|
17
|
-
as?: LinkLike | 'div';
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const Avatar = forwardRef<
|
|
21
|
-
HTMLSpanElement,
|
|
22
|
-
HTMLAttributes<HTMLSpanElement> & AvatarProps
|
|
23
|
-
>(
|
|
24
|
-
(
|
|
25
|
-
{
|
|
26
|
-
image,
|
|
27
|
-
nickname,
|
|
28
|
-
name,
|
|
29
|
-
fallback,
|
|
30
|
-
url,
|
|
31
|
-
size = 'small',
|
|
32
|
-
as: Component = 'a',
|
|
33
|
-
...props
|
|
34
|
-
},
|
|
35
|
-
ref
|
|
36
|
-
) => {
|
|
37
|
-
if (!url) Component = 'div';
|
|
38
|
-
return (
|
|
39
|
-
<RadixAvatar.Root
|
|
40
|
-
{...props}
|
|
41
|
-
ref={ref}
|
|
42
|
-
className={classNames(styles.avatar, styles[size], props.className)}
|
|
43
|
-
>
|
|
44
|
-
<Component
|
|
45
|
-
href={url || undefined}
|
|
46
|
-
target={url ? '_blank' : undefined}
|
|
47
|
-
className={styles.wrapper}
|
|
48
|
-
>
|
|
49
|
-
<RadixAvatar.Image
|
|
50
|
-
loading="lazy"
|
|
51
|
-
decoding="async"
|
|
52
|
-
src={image}
|
|
53
|
-
alt={name || nickname}
|
|
54
|
-
className={styles.item}
|
|
55
|
-
/>
|
|
56
|
-
<RadixAvatar.Fallback
|
|
57
|
-
className={classNames(styles.item, styles[size])}
|
|
58
|
-
>
|
|
59
|
-
{fallback}
|
|
60
|
-
</RadixAvatar.Fallback>
|
|
61
|
-
</Component>
|
|
62
|
-
</RadixAvatar.Root>
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
export default Avatar;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import AvatarOverlay from '#ui/Common/AvatarGroup/Overlay';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof AvatarOverlay>;
|
|
6
|
-
type Meta = MetaObj<typeof AvatarOverlay>;
|
|
7
|
-
|
|
8
|
-
const author = {
|
|
9
|
-
image: 'https://avatars.githubusercontent.com/ghost',
|
|
10
|
-
name: 'Ghost User',
|
|
11
|
-
nickname: 'ghost',
|
|
12
|
-
fallback: 'GU',
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const Default: Story = {
|
|
16
|
-
args: author,
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export const FallBack: Story = {
|
|
20
|
-
args: {
|
|
21
|
-
nickname: author.nickname,
|
|
22
|
-
fallback: author.fallback,
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const WithoutName: Story = {
|
|
27
|
-
args: {
|
|
28
|
-
...author,
|
|
29
|
-
name: undefined,
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export default { component: AvatarOverlay } as Meta;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ArrowUpRightIcon } from '@heroicons/react/24/solid';
|
|
2
|
-
import type { ComponentProps, FC } from 'react';
|
|
3
|
-
|
|
4
|
-
import Avatar from '#ui/Common/AvatarGroup/Avatar';
|
|
5
|
-
|
|
6
|
-
import styles from './index.module.css';
|
|
7
|
-
|
|
8
|
-
export type AvatarOverlayProps = ComponentProps<typeof Avatar> & {
|
|
9
|
-
url?: string;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
const AvatarOverlay: FC<AvatarOverlayProps> = ({
|
|
13
|
-
image,
|
|
14
|
-
name,
|
|
15
|
-
nickname,
|
|
16
|
-
fallback,
|
|
17
|
-
url,
|
|
18
|
-
as: Component = 'a',
|
|
19
|
-
}) => (
|
|
20
|
-
<Component className={styles.overlay} href={url} target="_blank">
|
|
21
|
-
<Avatar
|
|
22
|
-
image={image}
|
|
23
|
-
name={name}
|
|
24
|
-
nickname={nickname}
|
|
25
|
-
fallback={fallback}
|
|
26
|
-
size="medium"
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
<div className={styles.user}>
|
|
30
|
-
{name && <div className={styles.name}>{name}</div>}
|
|
31
|
-
{nickname && <div className={styles.nickname}>{nickname}</div>}
|
|
32
|
-
</div>
|
|
33
|
-
<ArrowUpRightIcon className={styles.arrow} />
|
|
34
|
-
</Component>
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
export default AvatarOverlay;
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { describe, it } from 'node:test';
|
|
2
|
-
import assert from 'node:assert/strict';
|
|
3
|
-
|
|
4
|
-
import { render, fireEvent } from '@testing-library/react';
|
|
5
|
-
|
|
6
|
-
import AvatarGroup from '../index';
|
|
7
|
-
|
|
8
|
-
const names = [
|
|
9
|
-
'ovflowd',
|
|
10
|
-
'bmuenzenmeyer',
|
|
11
|
-
'AugustinMauroy',
|
|
12
|
-
'HinataKah0',
|
|
13
|
-
'Harkunwar',
|
|
14
|
-
'rodion-arr',
|
|
15
|
-
'avivkeller',
|
|
16
|
-
'mikeesto',
|
|
17
|
-
'bnb',
|
|
18
|
-
'benhalverson',
|
|
19
|
-
'aymen94',
|
|
20
|
-
'shanpriyan',
|
|
21
|
-
'Wai-Dung',
|
|
22
|
-
'manishprivet',
|
|
23
|
-
'araujogui',
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
const avatars = names.map(name => ({
|
|
27
|
-
image: `https://avatars.githubusercontent.com/${name}`,
|
|
28
|
-
nickname: name,
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
const limit = 2;
|
|
32
|
-
const remaining = names.length - limit;
|
|
33
|
-
|
|
34
|
-
describe('AvatarGroup', () => {
|
|
35
|
-
it('renders the AvatarGroup component properly', () => {
|
|
36
|
-
const { getByText } = render(
|
|
37
|
-
<AvatarGroup avatars={avatars} limit={limit} />
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
const showMoreButton = getByText(`+${remaining}`);
|
|
41
|
-
assert.ok(showMoreButton.ownerDocument);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('displays the rest of the avatars when "show more" button is clicked', () => {
|
|
45
|
-
const { getByText } = render(
|
|
46
|
-
<AvatarGroup avatars={avatars} limit={limit} />
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const showMoreButton = getByText(`+${remaining}`);
|
|
50
|
-
fireEvent.click(showMoreButton);
|
|
51
|
-
|
|
52
|
-
const hideMoreButton = getByText(`-${remaining}`);
|
|
53
|
-
assert.ok(hideMoreButton.ownerDocument);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import AvatarGroup from '#ui/Common/AvatarGroup';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof AvatarGroup>;
|
|
6
|
-
type Meta = MetaObj<typeof AvatarGroup>;
|
|
7
|
-
|
|
8
|
-
const names = [
|
|
9
|
-
'ovflowd',
|
|
10
|
-
'bmuenzenmeyer',
|
|
11
|
-
'AugustinMauroy',
|
|
12
|
-
'HinataKah0',
|
|
13
|
-
'Harkunwar',
|
|
14
|
-
'rodion-arr',
|
|
15
|
-
'mikeesto',
|
|
16
|
-
'bnb',
|
|
17
|
-
'benhalverson',
|
|
18
|
-
'aymen94',
|
|
19
|
-
'shanpriyan',
|
|
20
|
-
'Wai-Dung',
|
|
21
|
-
'manishprivet',
|
|
22
|
-
'araujogui',
|
|
23
|
-
'avivkeller',
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
const defaultProps = {
|
|
27
|
-
avatars: names.map(name => ({
|
|
28
|
-
image: `https://avatars.githubusercontent.com/${name}`,
|
|
29
|
-
nickname: name,
|
|
30
|
-
fallback: 'FB',
|
|
31
|
-
})),
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const Default: Story = {
|
|
35
|
-
args: { ...defaultProps },
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const WithCustomLimit: Story = {
|
|
39
|
-
args: {
|
|
40
|
-
...defaultProps,
|
|
41
|
-
limit: 5,
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export const InSmallContainer: Story = {
|
|
46
|
-
decorators: [
|
|
47
|
-
Story => (
|
|
48
|
-
<div className="w-[150px]">
|
|
49
|
-
<Story />
|
|
50
|
-
</div>
|
|
51
|
-
),
|
|
52
|
-
],
|
|
53
|
-
args: { ...defaultProps, limit: 5 },
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export default { component: AvatarGroup } as Meta;
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import classNames from 'classnames';
|
|
4
|
-
import type { FC } from 'react';
|
|
5
|
-
import { useState, useMemo } from 'react';
|
|
6
|
-
|
|
7
|
-
import type { AvatarProps } from '#ui/Common/AvatarGroup/Avatar';
|
|
8
|
-
import Avatar from '#ui/Common/AvatarGroup/Avatar';
|
|
9
|
-
import avatarstyles from '#ui/Common/AvatarGroup/Avatar/index.module.css';
|
|
10
|
-
import AvatarOverlay from '#ui/Common/AvatarGroup/Overlay';
|
|
11
|
-
import Tooltip from '#ui/Common/Tooltip';
|
|
12
|
-
import type { LinkLike } from '#ui/types';
|
|
13
|
-
|
|
14
|
-
import styles from './index.module.css';
|
|
15
|
-
|
|
16
|
-
type AvatarGroupProps = {
|
|
17
|
-
avatars: Array<AvatarProps>;
|
|
18
|
-
limit?: number;
|
|
19
|
-
isExpandable?: boolean;
|
|
20
|
-
size?: AvatarProps['size'];
|
|
21
|
-
container?: HTMLElement;
|
|
22
|
-
as?: LinkLike;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const AvatarGroup: FC<AvatarGroupProps> = ({
|
|
26
|
-
avatars,
|
|
27
|
-
limit = 10,
|
|
28
|
-
isExpandable = true,
|
|
29
|
-
size = 'small',
|
|
30
|
-
container,
|
|
31
|
-
as,
|
|
32
|
-
}) => {
|
|
33
|
-
const [showMore, setShowMore] = useState(false);
|
|
34
|
-
|
|
35
|
-
const renderAvatars = useMemo(
|
|
36
|
-
() => avatars.slice(0, showMore ? avatars.length : limit),
|
|
37
|
-
[avatars, limit, showMore]
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
const handleShowMoreClick = isExpandable
|
|
41
|
-
? () => setShowMore(prev => !prev)
|
|
42
|
-
: undefined;
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<div
|
|
46
|
-
className={classNames(styles.avatarGroup, styles[size], {
|
|
47
|
-
[styles.expandable]: avatars.length > limit,
|
|
48
|
-
})}
|
|
49
|
-
>
|
|
50
|
-
{renderAvatars.map(avatar => (
|
|
51
|
-
<Tooltip
|
|
52
|
-
key={avatar.nickname}
|
|
53
|
-
asChild
|
|
54
|
-
container={container}
|
|
55
|
-
content={<AvatarOverlay {...avatar} as={as} />}
|
|
56
|
-
>
|
|
57
|
-
<Avatar
|
|
58
|
-
{...avatar}
|
|
59
|
-
size={size}
|
|
60
|
-
className={classNames({
|
|
61
|
-
'cursor-pointer': avatar.url,
|
|
62
|
-
'pointer-events-none': !avatar.url,
|
|
63
|
-
})}
|
|
64
|
-
as={as}
|
|
65
|
-
/>
|
|
66
|
-
</Tooltip>
|
|
67
|
-
))}
|
|
68
|
-
|
|
69
|
-
{avatars.length > limit && (
|
|
70
|
-
<span
|
|
71
|
-
onClick={handleShowMoreClick}
|
|
72
|
-
className={classNames(
|
|
73
|
-
avatarstyles.avatar,
|
|
74
|
-
avatarstyles[size],
|
|
75
|
-
'cursor-pointer'
|
|
76
|
-
)}
|
|
77
|
-
>
|
|
78
|
-
<span className={avatarstyles.item}>
|
|
79
|
-
{`${showMore ? '-' : '+'}${avatars.length - limit}`}
|
|
80
|
-
</span>
|
|
81
|
-
</span>
|
|
82
|
-
)}
|
|
83
|
-
</div>
|
|
84
|
-
);
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export default AvatarGroup;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import Badge from '#ui/Common/Badge';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof Badge>;
|
|
6
|
-
type Meta = MetaObj<typeof Badge>;
|
|
7
|
-
|
|
8
|
-
export const Default: Story = {
|
|
9
|
-
args: {
|
|
10
|
-
kind: 'default',
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export const Error: Story = {
|
|
15
|
-
args: {
|
|
16
|
-
kind: 'error',
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const Warning: Story = {
|
|
21
|
-
args: {
|
|
22
|
-
kind: 'warning',
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const Small: Story = {
|
|
27
|
-
args: {
|
|
28
|
-
size: 'small',
|
|
29
|
-
},
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const Medium: Story = {
|
|
33
|
-
args: {
|
|
34
|
-
size: 'medium',
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export default { component: Badge, args: { children: 'Badge' } } as Meta;
|
package/Common/Badge/index.tsx
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import classNames from 'classnames';
|
|
2
|
-
import type { FC, HTMLAttributes, PropsWithChildren } from 'react';
|
|
3
|
-
|
|
4
|
-
import styles from './index.module.css';
|
|
5
|
-
|
|
6
|
-
type BadgeKind = 'default' | 'warning' | 'error';
|
|
7
|
-
|
|
8
|
-
type BadgeProps = HTMLAttributes<HTMLSpanElement> & {
|
|
9
|
-
size?: 'small' | 'medium';
|
|
10
|
-
kind?: BadgeKind;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const Badge: FC<PropsWithChildren<BadgeProps>> = ({
|
|
14
|
-
kind = 'default',
|
|
15
|
-
size = 'medium',
|
|
16
|
-
className,
|
|
17
|
-
children,
|
|
18
|
-
...props
|
|
19
|
-
}) => {
|
|
20
|
-
return (
|
|
21
|
-
<span
|
|
22
|
-
className={classNames(
|
|
23
|
-
styles.badge,
|
|
24
|
-
styles[kind],
|
|
25
|
-
styles[size],
|
|
26
|
-
className
|
|
27
|
-
)}
|
|
28
|
-
{...props}
|
|
29
|
-
>
|
|
30
|
-
{children}
|
|
31
|
-
</span>
|
|
32
|
-
);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export default Badge;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import BadgeGroup from '#ui/Common/BadgeGroup';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof BadgeGroup>;
|
|
6
|
-
type Meta = MetaObj<typeof BadgeGroup>;
|
|
7
|
-
|
|
8
|
-
export const Default: Story = {
|
|
9
|
-
args: {
|
|
10
|
-
href: '/',
|
|
11
|
-
children: 'OpenJS Foundation Certification 2023',
|
|
12
|
-
kind: 'default',
|
|
13
|
-
badgeText: 'New',
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export const Error: Story = {
|
|
18
|
-
args: {
|
|
19
|
-
href: '/',
|
|
20
|
-
children: 'OpenJS Foundation Certification 2023',
|
|
21
|
-
kind: 'error',
|
|
22
|
-
badgeText: 'New',
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const Warning: Story = {
|
|
27
|
-
args: {
|
|
28
|
-
href: '/',
|
|
29
|
-
children: 'OpenJS Foundation Certification 2023',
|
|
30
|
-
kind: 'warning',
|
|
31
|
-
badgeText: 'New',
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export default { component: BadgeGroup } as Meta;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import ArrowRightIcon from '@heroicons/react/24/solid/ArrowRightIcon';
|
|
2
|
-
import type { ComponentProps, FC, PropsWithChildren } from 'react';
|
|
3
|
-
|
|
4
|
-
import Badge from '#ui/Common/Badge';
|
|
5
|
-
import type { LinkLike } from '#ui/types';
|
|
6
|
-
|
|
7
|
-
import styles from './index.module.css';
|
|
8
|
-
|
|
9
|
-
type BadgeGroupKind = 'default' | 'warning' | 'error';
|
|
10
|
-
|
|
11
|
-
type BadgeGroupProps = {
|
|
12
|
-
kind?: BadgeGroupKind;
|
|
13
|
-
badgeText?: string;
|
|
14
|
-
as: LinkLike;
|
|
15
|
-
} & ComponentProps<LinkLike>;
|
|
16
|
-
|
|
17
|
-
const BadgeGroup: FC<PropsWithChildren<BadgeGroupProps>> = ({
|
|
18
|
-
kind = 'default',
|
|
19
|
-
badgeText,
|
|
20
|
-
children,
|
|
21
|
-
as: Component = 'a',
|
|
22
|
-
...args
|
|
23
|
-
}) => (
|
|
24
|
-
<Component className={`${styles.wrapper} ${styles[kind]}`} {...args}>
|
|
25
|
-
{badgeText && (
|
|
26
|
-
<Badge kind={kind} className={styles.badge}>
|
|
27
|
-
{badgeText}
|
|
28
|
-
</Badge>
|
|
29
|
-
)}
|
|
30
|
-
<span className={styles.message}>{children}</span>
|
|
31
|
-
{args.href && <ArrowRightIcon className={styles.icon} />}
|
|
32
|
-
</Component>
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
export default BadgeGroup;
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { Meta as MetaObj, StoryObj } from '@storybook/react';
|
|
2
|
-
|
|
3
|
-
import Banner from '#ui/Common/Banner';
|
|
4
|
-
|
|
5
|
-
type Story = StoryObj<typeof Banner>;
|
|
6
|
-
type Meta = MetaObj<typeof Banner>;
|
|
7
|
-
|
|
8
|
-
export const Default: Story = {
|
|
9
|
-
args: {
|
|
10
|
-
children: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
11
|
-
type: 'default',
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const Error: Story = {
|
|
16
|
-
args: {
|
|
17
|
-
children: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
18
|
-
type: 'error',
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const Warning: Story = {
|
|
23
|
-
args: {
|
|
24
|
-
children: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
|
|
25
|
-
type: 'warning',
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export default { component: Banner } as Meta;
|
package/Common/Banner/index.tsx
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { FC, PropsWithChildren } from 'react';
|
|
2
|
-
|
|
3
|
-
import styles from './index.module.css';
|
|
4
|
-
|
|
5
|
-
export type BannerProps = {
|
|
6
|
-
type?: 'default' | 'warning' | 'error';
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
const Banner: FC<PropsWithChildren<BannerProps>> = ({
|
|
10
|
-
type = 'default',
|
|
11
|
-
children,
|
|
12
|
-
}) => (
|
|
13
|
-
<div className={`${styles.banner} ${styles[type] || styles.default}`}>
|
|
14
|
-
{children}
|
|
15
|
-
</div>
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
export default Banner;
|