@node-core/ui-components 1.0.1-ab0ba1dcb1d91392c44e91b1e74e9f565e460543 → 1.0.1-b8e314e799e27da854d47f211c1fed36810b969a

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.
Files changed (331) hide show
  1. package/Common/AlertBox/index.js +5 -0
  2. package/Common/AlertBox/index.module.css +2 -0
  3. package/Common/AvatarGroup/Avatar/index.js +11 -0
  4. package/Common/AvatarGroup/Avatar/index.module.css +2 -0
  5. package/Common/AvatarGroup/Overlay/index.js +6 -0
  6. package/Common/AvatarGroup/Overlay/index.module.css +2 -0
  7. package/Common/AvatarGroup/index.js +21 -0
  8. package/Common/AvatarGroup/index.module.css +2 -0
  9. package/Common/Badge/index.js +5 -0
  10. package/Common/Badge/index.module.css +2 -0
  11. package/Common/BadgeGroup/index.js +6 -0
  12. package/Common/BadgeGroup/index.module.css +2 -0
  13. package/Common/Banner/index.js +4 -0
  14. package/Common/Banner/index.module.css +2 -0
  15. package/Common/BaseActiveLink/index.js +14 -0
  16. package/Common/BaseButton/index.js +10 -0
  17. package/Common/BaseButton/index.module.css +2 -0
  18. package/Common/BaseCodeBox/index.js +50 -0
  19. package/Common/BaseCodeBox/index.module.css +2 -0
  20. package/Common/BaseCrossLink/index.js +12 -0
  21. package/Common/BaseCrossLink/index.module.css +2 -0
  22. package/Common/BaseLinkTabs/index.js +5 -0
  23. package/Common/BaseLinkTabs/index.module.css +2 -0
  24. package/Common/BasePagination/Ellipsis/index.js +4 -0
  25. package/Common/BasePagination/Ellipsis/index.module.css +2 -0
  26. package/Common/BasePagination/PaginationListItem/index.js +6 -0
  27. package/Common/BasePagination/PaginationListItem/index.module.css +2 -0
  28. package/Common/BasePagination/PrevNextArrow.js +7 -0
  29. package/Common/BasePagination/index.js +10 -0
  30. package/Common/BasePagination/index.module.css +2 -0
  31. package/Common/BasePagination/useGetPageElements.js +77 -0
  32. package/Common/Blockquote/index.js +4 -0
  33. package/Common/Blockquote/index.module.css +2 -0
  34. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.js +9 -0
  35. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +2 -0
  36. package/Common/Breadcrumbs/BreadcrumbItem/index.js +6 -0
  37. package/Common/Breadcrumbs/BreadcrumbItem/index.module.css +2 -0
  38. package/Common/Breadcrumbs/BreadcrumbLink/index.js +5 -0
  39. package/Common/Breadcrumbs/BreadcrumbLink/index.module.css +2 -0
  40. package/Common/Breadcrumbs/BreadcrumbRoot/index.js +4 -0
  41. package/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +2 -0
  42. package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.js +4 -0
  43. package/Common/Breadcrumbs/index.js +22 -0
  44. package/Common/ChangeHistory/index.js +9 -0
  45. package/Common/ChangeHistory/index.module.css +2 -0
  46. package/Common/CodeTabs/index.js +5 -0
  47. package/Common/CodeTabs/index.module.css +2 -0
  48. package/Common/DataTag/index.js +18 -0
  49. package/Common/DataTag/index.module.css +2 -0
  50. package/Common/GlowingBackdrop/index.js +5 -0
  51. package/Common/GlowingBackdrop/index.module.css +2 -0
  52. package/Common/LanguageDropDown/index.js +11 -0
  53. package/Common/LanguageDropDown/index.module.css +2 -0
  54. package/Common/Modal/index.js +10 -0
  55. package/Common/Modal/index.module.css +2 -0
  56. package/Common/NodejsLogo/index.js +7 -0
  57. package/Common/NodejsLogo/index.module.css +2 -0
  58. package/Common/Notification/index.js +6 -0
  59. package/Common/Notification/index.module.css +2 -0
  60. package/Common/Preview/index.js +7 -0
  61. package/Common/Preview/index.module.css +2 -0
  62. package/Common/Select/NoScriptSelect/index.js +10 -0
  63. package/Common/Select/StatelessSelect/index.js +31 -0
  64. package/Common/Select/index.js +46 -0
  65. package/Common/Select/index.module.css +2 -0
  66. package/Common/Separator/index.js +7 -0
  67. package/Common/Separator/index.module.css +2 -0
  68. package/Common/Skeleton/index.js +18 -0
  69. package/Common/Skeleton/index.module.css +2 -0
  70. package/Common/Tabs/index.js +6 -0
  71. package/Common/Tabs/index.module.css +2 -0
  72. package/Common/ThemeToggle/index.js +7 -0
  73. package/Common/ThemeToggle/index.module.css +2 -0
  74. package/Common/Tooltip/index.js +8 -0
  75. package/Common/Tooltip/index.module.css +2 -0
  76. package/Containers/Article/index.js +4 -0
  77. package/Containers/Article/index.module.css +2 -0
  78. package/Containers/Footer/index.js +21 -0
  79. package/Containers/Footer/index.module.css +2 -0
  80. package/Containers/MetaBar/index.js +12 -0
  81. package/Containers/MetaBar/index.module.css +2 -0
  82. package/Containers/NavBar/NavItem/index.js +7 -0
  83. package/Containers/NavBar/NavItem/index.module.css +2 -0
  84. package/Containers/NavBar/index.js +18 -0
  85. package/Containers/NavBar/index.module.css +2 -0
  86. package/Containers/Sidebar/ProgressionIcon/index.js +3 -0
  87. package/Containers/Sidebar/SidebarGroup/index.js +9 -0
  88. package/Containers/Sidebar/SidebarGroup/index.module.css +2 -0
  89. package/Containers/Sidebar/SidebarItem/index.js +11 -0
  90. package/Containers/Sidebar/SidebarItem/index.module.css +2 -0
  91. package/Containers/Sidebar/index.js +15 -0
  92. package/Containers/Sidebar/index.module.css +2 -0
  93. package/Icons/HexagonGrid.js +3 -0
  94. package/Icons/InstallationMethod/Choco.js +3 -0
  95. package/Icons/InstallationMethod/Devbox.js +3 -0
  96. package/Icons/InstallationMethod/Docker.js +3 -0
  97. package/Icons/InstallationMethod/FNM.js +3 -0
  98. package/Icons/InstallationMethod/Homebrew.js +3 -0
  99. package/Icons/InstallationMethod/N.js +5 -0
  100. package/Icons/InstallationMethod/NVM.js +3 -0
  101. package/Icons/InstallationMethod/Volta.js +3 -0
  102. package/{src/Icons/InstallationMethod/index.ts → Icons/InstallationMethod/index.js} +0 -1
  103. package/Icons/Logos/JsWhite.js +3 -0
  104. package/Icons/Logos/Nodejs.js +12 -0
  105. package/Icons/Logos/index.js +3 -0
  106. package/Icons/OperatingSystem/AIX.js +3 -0
  107. package/Icons/OperatingSystem/Apple.js +3 -0
  108. package/Icons/OperatingSystem/Linux.js +3 -0
  109. package/Icons/OperatingSystem/Microsoft.js +3 -0
  110. package/{src/Icons/OperatingSystem/index.ts → Icons/OperatingSystem/index.js} +0 -1
  111. package/Icons/PackageManager/Npm.js +3 -0
  112. package/Icons/PackageManager/Pnpm.js +3 -0
  113. package/Icons/PackageManager/Yarn.js +3 -0
  114. package/{src/Icons/PackageManager/index.ts → Icons/PackageManager/index.js} +0 -1
  115. package/Icons/Social/Bluesky.js +3 -0
  116. package/Icons/Social/Discord.js +3 -0
  117. package/Icons/Social/GitHub.js +3 -0
  118. package/Icons/Social/LinkedIn.js +3 -0
  119. package/Icons/Social/Mastodon.js +3 -0
  120. package/Icons/Social/Slack.js +3 -0
  121. package/Icons/Social/X.js +3 -0
  122. package/{src/Icons/Social/index.ts → Icons/Social/index.js} +0 -1
  123. package/MDX/CodeTabs.js +29 -0
  124. package/Providers/NotificationProvider/index.js +16 -0
  125. package/Providers/NotificationProvider/index.module.css +2 -0
  126. package/package.json +9 -43
  127. package/stylelint/one-utility-class-per-line.mjs +48 -0
  128. package/{src/stylelint → stylelint}/utils.mjs +19 -25
  129. package/styles/index.css +2 -0
  130. package/types.js +1 -0
  131. package/util/array.js +2 -0
  132. package/.lintstagedrc.json +0 -5
  133. package/.postcssrc.json +0 -6
  134. package/.storybook/constants.ts +0 -28
  135. package/.storybook/main.ts +0 -38
  136. package/.storybook/preview-head.html +0 -20
  137. package/.storybook/preview.tsx +0 -32
  138. package/.stylelintignore +0 -1
  139. package/.stylelintrc.mjs +0 -56
  140. package/__design__/colors.stories.tsx +0 -82
  141. package/__design__/effects.stories.tsx +0 -7
  142. package/__design__/font-family.stories.tsx +0 -76
  143. package/__design__/list.stories.tsx +0 -27
  144. package/__design__/node-logos.stories.tsx +0 -61
  145. package/__design__/platform-logos.stories.tsx +0 -31
  146. package/__design__/social-logos.stories.tsx +0 -33
  147. package/__design__/table.stories.tsx +0 -56
  148. package/__design__/text.stories.tsx +0 -100
  149. package/eslint.config.js +0 -61
  150. package/src/Common/AlertBox/index.module.css +0 -83
  151. package/src/Common/AlertBox/index.stories.tsx +0 -96
  152. package/src/Common/AlertBox/index.tsx +0 -24
  153. package/src/Common/AvatarGroup/Avatar/index.module.css +0 -40
  154. package/src/Common/AvatarGroup/Avatar/index.stories.tsx +0 -22
  155. package/src/Common/AvatarGroup/Avatar/index.tsx +0 -67
  156. package/src/Common/AvatarGroup/Overlay/index.module.css +0 -31
  157. package/src/Common/AvatarGroup/Overlay/index.stories.tsx +0 -33
  158. package/src/Common/AvatarGroup/Overlay/index.tsx +0 -37
  159. package/src/Common/AvatarGroup/__tests__/index.test.jsx +0 -55
  160. package/src/Common/AvatarGroup/index.module.css +0 -21
  161. package/src/Common/AvatarGroup/index.stories.tsx +0 -56
  162. package/src/Common/AvatarGroup/index.tsx +0 -83
  163. package/src/Common/Badge/index.module.css +0 -38
  164. package/src/Common/Badge/index.stories.tsx +0 -38
  165. package/src/Common/Badge/index.tsx +0 -35
  166. package/src/Common/BadgeGroup/index.module.css +0 -77
  167. package/src/Common/BadgeGroup/index.stories.tsx +0 -35
  168. package/src/Common/BadgeGroup/index.tsx +0 -35
  169. package/src/Common/Banner/index.module.css +0 -42
  170. package/src/Common/Banner/index.stories.tsx +0 -29
  171. package/src/Common/Banner/index.tsx +0 -18
  172. package/src/Common/BaseActiveLink/__tests__/index.test.jsx +0 -52
  173. package/src/Common/BaseActiveLink/index.tsx +0 -34
  174. package/src/Common/BaseButton/index.module.css +0 -145
  175. package/src/Common/BaseButton/index.stories.tsx +0 -67
  176. package/src/Common/BaseButton/index.tsx +0 -59
  177. package/src/Common/BaseCodeBox/index.module.css +0 -78
  178. package/src/Common/BaseCodeBox/index.stories.tsx +0 -39
  179. package/src/Common/BaseCodeBox/index.tsx +0 -122
  180. package/src/Common/BaseCrossLink/index.module.css +0 -51
  181. package/src/Common/BaseCrossLink/index.stories.tsx +0 -38
  182. package/src/Common/BaseCrossLink/index.tsx +0 -46
  183. package/src/Common/BaseLinkTabs/index.module.css +0 -43
  184. package/src/Common/BaseLinkTabs/index.stories.tsx +0 -34
  185. package/src/Common/BaseLinkTabs/index.tsx +0 -53
  186. package/src/Common/BasePagination/Ellipsis/index.module.css +0 -10
  187. package/src/Common/BasePagination/Ellipsis/index.stories.tsx +0 -10
  188. package/src/Common/BasePagination/Ellipsis/index.tsx +0 -11
  189. package/src/Common/BasePagination/PaginationListItem/__tests__/index.test.jsx +0 -58
  190. package/src/Common/BasePagination/PaginationListItem/index.module.css +0 -27
  191. package/src/Common/BasePagination/PaginationListItem/index.stories.tsx +0 -40
  192. package/src/Common/BasePagination/PaginationListItem/index.tsx +0 -39
  193. package/src/Common/BasePagination/PrevNextArrow.tsx +0 -15
  194. package/src/Common/BasePagination/__tests__/index.test.jsx +0 -180
  195. package/src/Common/BasePagination/index.module.css +0 -39
  196. package/src/Common/BasePagination/index.stories.tsx +0 -67
  197. package/src/Common/BasePagination/index.tsx +0 -77
  198. package/src/Common/BasePagination/useGetPageElements.tsx +0 -132
  199. package/src/Common/Blockquote/index.module.css +0 -29
  200. package/src/Common/Blockquote/index.stories.tsx +0 -45
  201. package/src/Common/Blockquote/index.tsx +0 -11
  202. package/src/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +0 -5
  203. package/src/Common/Breadcrumbs/BreadcrumbHomeLink/index.tsx +0 -30
  204. package/src/Common/Breadcrumbs/BreadcrumbItem/index.module.css +0 -41
  205. package/src/Common/Breadcrumbs/BreadcrumbItem/index.tsx +0 -42
  206. package/src/Common/Breadcrumbs/BreadcrumbLink/index.module.css +0 -22
  207. package/src/Common/Breadcrumbs/BreadcrumbLink/index.tsx +0 -37
  208. package/src/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +0 -9
  209. package/src/Common/Breadcrumbs/BreadcrumbRoot/index.tsx +0 -20
  210. package/src/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.tsx +0 -9
  211. package/src/Common/Breadcrumbs/index.stories.tsx +0 -94
  212. package/src/Common/Breadcrumbs/index.tsx +0 -81
  213. package/src/Common/ChangeHistory/index.module.css +0 -83
  214. package/src/Common/ChangeHistory/index.stories.tsx +0 -130
  215. package/src/Common/ChangeHistory/index.tsx +0 -67
  216. package/src/Common/CodeTabs/index.module.css +0 -56
  217. package/src/Common/CodeTabs/index.stories.tsx +0 -73
  218. package/src/Common/CodeTabs/index.tsx +0 -16
  219. package/src/Common/DataTag/index.module.css +0 -56
  220. package/src/Common/DataTag/index.stories.tsx +0 -40
  221. package/src/Common/DataTag/index.tsx +0 -39
  222. package/src/Common/GlowingBackdrop/index.module.css +0 -32
  223. package/src/Common/GlowingBackdrop/index.stories.tsx +0 -10
  224. package/src/Common/GlowingBackdrop/index.tsx +0 -13
  225. package/src/Common/LanguageDropDown/index.module.css +0 -53
  226. package/src/Common/LanguageDropDown/index.stories.tsx +0 -19
  227. package/src/Common/LanguageDropDown/index.tsx +0 -56
  228. package/src/Common/Modal/index.module.css +0 -79
  229. package/src/Common/Modal/index.stories.tsx +0 -34
  230. package/src/Common/Modal/index.tsx +0 -50
  231. package/src/Common/NodejsLogo/index.module.css +0 -6
  232. package/src/Common/NodejsLogo/index.stories.tsx +0 -14
  233. package/src/Common/NodejsLogo/index.tsx +0 -26
  234. package/src/Common/Notification/index.module.css +0 -20
  235. package/src/Common/Notification/index.stories.tsx +0 -36
  236. package/src/Common/Notification/index.tsx +0 -34
  237. package/src/Common/Preview/index.module.css +0 -79
  238. package/src/Common/Preview/index.stories.tsx +0 -44
  239. package/src/Common/Preview/index.tsx +0 -25
  240. package/src/Common/Select/__tests__/index.test.jsx +0 -67
  241. package/src/Common/Select/index.module.css +0 -161
  242. package/src/Common/Select/index.stories.tsx +0 -111
  243. package/src/Common/Select/index.tsx +0 -187
  244. package/src/Common/Separator/index.module.css +0 -16
  245. package/src/Common/Separator/index.stories.tsx +0 -32
  246. package/src/Common/Separator/index.tsx +0 -27
  247. package/src/Common/Skeleton/index.module.css +0 -30
  248. package/src/Common/Skeleton/index.tsx +0 -39
  249. package/src/Common/Tabs/__tests__/index.test.jsx +0 -52
  250. package/src/Common/Tabs/index.module.css +0 -54
  251. package/src/Common/Tabs/index.stories.tsx +0 -50
  252. package/src/Common/Tabs/index.tsx +0 -54
  253. package/src/Common/ThemeToggle/__tests__/index.test.jsx +0 -35
  254. package/src/Common/ThemeToggle/index.module.css +0 -15
  255. package/src/Common/ThemeToggle/index.stories.tsx +0 -10
  256. package/src/Common/ThemeToggle/index.tsx +0 -15
  257. package/src/Common/Tooltip/index.module.css +0 -43
  258. package/src/Common/Tooltip/index.stories.tsx +0 -73
  259. package/src/Common/Tooltip/index.tsx +0 -48
  260. package/src/Containers/Article/index.module.css +0 -70
  261. package/src/Containers/Article/index.stories.tsx +0 -39
  262. package/src/Containers/Article/index.tsx +0 -9
  263. package/src/Containers/DocSideBar/index.tsx +0 -0
  264. package/src/Containers/Footer/index.module.css +0 -46
  265. package/src/Containers/Footer/index.stories.tsx +0 -27
  266. package/src/Containers/Footer/index.tsx +0 -95
  267. package/src/Containers/MetaBar/__tests__/index.test.jsx +0 -63
  268. package/src/Containers/MetaBar/index.module.css +0 -91
  269. package/src/Containers/MetaBar/index.stories.tsx +0 -80
  270. package/src/Containers/MetaBar/index.tsx +0 -72
  271. package/src/Containers/NavBar/NavItem/index.module.css +0 -60
  272. package/src/Containers/NavBar/NavItem/index.stories.tsx +0 -38
  273. package/src/Containers/NavBar/NavItem/index.tsx +0 -44
  274. package/src/Containers/NavBar/index.module.css +0 -125
  275. package/src/Containers/NavBar/index.stories.tsx +0 -45
  276. package/src/Containers/NavBar/index.tsx +0 -94
  277. package/src/Containers/Sidebar/ProgressionIcon/index.tsx +0 -16
  278. package/src/Containers/Sidebar/SidebarGroup/index.module.css +0 -64
  279. package/src/Containers/Sidebar/SidebarGroup/index.stories.tsx +0 -36
  280. package/src/Containers/Sidebar/SidebarGroup/index.tsx +0 -49
  281. package/src/Containers/Sidebar/SidebarItem/index.module.css +0 -56
  282. package/src/Containers/Sidebar/SidebarItem/index.stories.tsx +0 -15
  283. package/src/Containers/Sidebar/SidebarItem/index.tsx +0 -43
  284. package/src/Containers/Sidebar/index.module.css +0 -30
  285. package/src/Containers/Sidebar/index.stories.tsx +0 -88
  286. package/src/Containers/Sidebar/index.tsx +0 -70
  287. package/src/Icons/HexagonGrid.stories.tsx +0 -10
  288. package/src/Icons/HexagonGrid.tsx +0 -1434
  289. package/src/Icons/InstallationMethod/Choco.tsx +0 -78
  290. package/src/Icons/InstallationMethod/Devbox.tsx +0 -21
  291. package/src/Icons/InstallationMethod/Docker.tsx +0 -20
  292. package/src/Icons/InstallationMethod/FNM.tsx +0 -132
  293. package/src/Icons/InstallationMethod/Homebrew.tsx +0 -69
  294. package/src/Icons/InstallationMethod/N.tsx +0 -32
  295. package/src/Icons/InstallationMethod/NVM.tsx +0 -63
  296. package/src/Icons/InstallationMethod/Volta.tsx +0 -34
  297. package/src/Icons/Logos/JsGreen.tsx +0 -24
  298. package/src/Icons/Logos/JsWhite.tsx +0 -37
  299. package/src/Icons/Logos/Nodejs.tsx +0 -372
  300. package/src/Icons/Logos/NodejsStackedBlack.tsx +0 -98
  301. package/src/Icons/Logos/NodejsStackedDark.tsx +0 -124
  302. package/src/Icons/Logos/NodejsStackedLight.tsx +0 -123
  303. package/src/Icons/Logos/NodejsStackedWhite.tsx +0 -98
  304. package/src/Icons/Logos/index.ts +0 -17
  305. package/src/Icons/OperatingSystem/AIX.tsx +0 -46
  306. package/src/Icons/OperatingSystem/Apple.tsx +0 -23
  307. package/src/Icons/OperatingSystem/Linux.tsx +0 -969
  308. package/src/Icons/OperatingSystem/Microsoft.tsx +0 -19
  309. package/src/Icons/PackageManager/Npm.tsx +0 -21
  310. package/src/Icons/PackageManager/Pnpm.tsx +0 -22
  311. package/src/Icons/PackageManager/Yarn.tsx +0 -22
  312. package/src/Icons/Social/Bluesky.tsx +0 -19
  313. package/src/Icons/Social/Discord.tsx +0 -20
  314. package/src/Icons/Social/GitHub.tsx +0 -16
  315. package/src/Icons/Social/LinkedIn.tsx +0 -16
  316. package/src/Icons/Social/Mastodon.tsx +0 -36
  317. package/src/Icons/Social/Slack.tsx +0 -31
  318. package/src/Icons/Social/X.tsx +0 -16
  319. package/src/MDX/CodeTabs.tsx +0 -47
  320. package/src/global.d.ts +0 -4
  321. package/src/stylelint/__tests__/index.test.mjs +0 -80
  322. package/src/stylelint/one-utility-class-per-line.mjs +0 -64
  323. package/src/styles/animations.css +0 -47
  324. package/src/styles/base.css +0 -17
  325. package/src/styles/effects.css +0 -12
  326. package/src/styles/index.css +0 -38
  327. package/src/styles/markdown.css +0 -173
  328. package/src/styles/theme.css +0 -175
  329. package/src/types.ts +0 -25
  330. package/tsconfig.json +0 -20
  331. package/turbo.json +0 -31
@@ -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,31 +0,0 @@
1
- @reference "../../../styles/index.css";
2
-
3
- .overlay {
4
- @apply flex
5
- min-w-56
6
- items-center
7
- gap-2
8
- p-3;
9
- }
10
-
11
- .user {
12
- @apply grow;
13
- }
14
-
15
- .name {
16
- @apply font-semibold
17
- text-neutral-900
18
- dark:text-neutral-300;
19
- }
20
-
21
- .nickname {
22
- @apply font-medium
23
- text-neutral-700
24
- dark:text-neutral-500;
25
- }
26
-
27
- .arrow {
28
- @apply w-3
29
- fill-neutral-600
30
- dark:fill-white;
31
- }
@@ -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,21 +0,0 @@
1
- @reference "../../styles/index.css";
2
-
3
- .avatarGroup {
4
- @apply flex
5
- flex-wrap
6
- items-center;
7
- }
8
-
9
- .small {
10
- > span {
11
- @apply -ml-2
12
- first:ml-0;
13
- }
14
- }
15
-
16
- .medium {
17
- > span {
18
- @apply -ml-2.5
19
- first:ml-0;
20
- }
21
- }
@@ -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,83 +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 className={classNames(styles.avatarGroup, styles[size])}>
46
- {renderAvatars.map(avatar => (
47
- <Tooltip
48
- key={avatar.nickname}
49
- asChild
50
- container={container}
51
- content={<AvatarOverlay {...avatar} as={as} />}
52
- >
53
- <Avatar
54
- {...avatar}
55
- size={size}
56
- className={classNames({
57
- 'cursor-pointer': avatar.url,
58
- 'pointer-events-none': !avatar.url,
59
- })}
60
- as={as}
61
- />
62
- </Tooltip>
63
- ))}
64
-
65
- {avatars.length > limit && (
66
- <span
67
- onClick={handleShowMoreClick}
68
- className={classNames(
69
- avatarstyles.avatar,
70
- avatarstyles[size],
71
- 'cursor-pointer'
72
- )}
73
- >
74
- <span className={avatarstyles.item}>
75
- {`${showMore ? '-' : '+'}${avatars.length - limit}`}
76
- </span>
77
- </span>
78
- )}
79
- </div>
80
- );
81
- };
82
-
83
- export default AvatarGroup;
@@ -1,38 +0,0 @@
1
- @reference "../../styles/index.css";
2
-
3
- .badge {
4
- @apply rounded-full
5
- border
6
- text-center
7
- text-white;
8
-
9
- &.small {
10
- @apply px-1.5
11
- py-0.5
12
- text-xs;
13
- }
14
-
15
- &.medium {
16
- @apply px-2.5
17
- py-0.5
18
- text-base;
19
- }
20
-
21
- &.default {
22
- @apply border-green-200
23
- bg-green-600
24
- dark:border-green-800;
25
- }
26
-
27
- &.error {
28
- @apply border-danger-200
29
- bg-danger-600
30
- dark:border-danger-800;
31
- }
32
-
33
- &.warning {
34
- @apply border-warning-200
35
- bg-warning-600
36
- dark:border-warning-600;
37
- }
38
- }
@@ -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;
@@ -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,77 +0,0 @@
1
- @reference "../../styles/index.css";
2
-
3
- .wrapper {
4
- @apply flex
5
- w-fit
6
- items-center
7
- rounded-full
8
- border
9
- py-1
10
- pl-1
11
- pr-2.5
12
- text-sm
13
- font-medium;
14
-
15
- .icon {
16
- @apply size-4;
17
- }
18
-
19
- .badge {
20
- @apply mr-2;
21
- }
22
-
23
- .message {
24
- @apply mr-1;
25
- }
26
-
27
- &.default {
28
- @apply border-green-200
29
- bg-green-100
30
- dark:border-green-700
31
- dark:bg-neutral-900;
32
-
33
- .icon {
34
- @apply text-green-500
35
- dark:text-green-300;
36
- }
37
-
38
- .message {
39
- @apply text-green-700
40
- dark:text-green-300;
41
- }
42
- }
43
-
44
- &.error {
45
- @apply border-danger-200
46
- bg-danger-100
47
- dark:border-danger-700
48
- dark:bg-neutral-900;
49
-
50
- .icon {
51
- @apply text-danger-500
52
- dark:text-danger-300;
53
- }
54
-
55
- .message {
56
- @apply text-danger-700
57
- dark:text-danger-300;
58
- }
59
- }
60
-
61
- &.warning {
62
- @apply border-warning-200
63
- bg-warning-100
64
- dark:border-warning-700
65
- dark:bg-neutral-900;
66
-
67
- .icon {
68
- @apply text-warning-500
69
- dark:text-warning-300;
70
- }
71
-
72
- .message {
73
- @apply text-warning-700
74
- dark:text-warning-300;
75
- }
76
- }
77
- }
@@ -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,42 +0,0 @@
1
- @reference "../../styles/index.css";
2
-
3
- .banner {
4
- @apply flex
5
- w-full
6
- flex-row
7
- items-center
8
- justify-center
9
- gap-2
10
- px-8
11
- py-3
12
- text-sm;
13
-
14
- &,
15
- a {
16
- @apply text-white
17
- dark:text-white;
18
- }
19
-
20
- a {
21
- @apply w-fit
22
- underline
23
- decoration-white/50;
24
- }
25
-
26
- svg {
27
- @apply size-4
28
- text-white/50;
29
- }
30
- }
31
-
32
- .default {
33
- @apply bg-green-600;
34
- }
35
-
36
- .error {
37
- @apply bg-danger-600;
38
- }
39
-
40
- .warning {
41
- @apply bg-warning-600;
42
- }