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

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 +77 -0
  3. package/Common/AvatarGroup/Avatar/index.js +11 -0
  4. package/Common/AvatarGroup/Avatar/index.module.css +60 -0
  5. package/Common/AvatarGroup/Overlay/index.js +6 -0
  6. package/Common/AvatarGroup/Overlay/index.module.css +38 -0
  7. package/Common/AvatarGroup/index.js +21 -0
  8. package/Common/AvatarGroup/index.module.css +22 -0
  9. package/Common/Badge/index.js +7 -0
  10. package/Common/Badge/index.module.css +46 -0
  11. package/Common/BadgeGroup/index.js +6 -0
  12. package/Common/BadgeGroup/index.module.css +101 -0
  13. package/Common/Banner/index.js +4 -0
  14. package/Common/Banner/index.module.css +45 -0
  15. package/Common/BaseActiveLink/index.js +14 -0
  16. package/Common/BaseButton/index.js +10 -0
  17. package/Common/BaseButton/index.module.css +372 -0
  18. package/Common/BaseCodeBox/index.js +50 -0
  19. package/Common/BaseCodeBox/index.module.css +96 -0
  20. package/Common/BaseCrossLink/index.js +12 -0
  21. package/Common/BaseCrossLink/index.module.css +69 -0
  22. package/Common/BaseLinkTabs/index.js +5 -0
  23. package/Common/BaseLinkTabs/index.module.css +77 -0
  24. package/Common/BasePagination/Ellipsis/index.js +4 -0
  25. package/Common/BasePagination/Ellipsis/index.module.css +16 -0
  26. package/Common/BasePagination/PaginationListItem/index.js +6 -0
  27. package/Common/BasePagination/PaginationListItem/index.module.css +42 -0
  28. package/Common/BasePagination/PrevNextArrow.js +7 -0
  29. package/Common/BasePagination/index.js +10 -0
  30. package/Common/BasePagination/index.module.css +40 -0
  31. package/Common/BasePagination/useGetPageElements.js +77 -0
  32. package/Common/Blockquote/index.js +4 -0
  33. package/Common/Blockquote/index.module.css +50 -0
  34. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.js +9 -0
  35. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +5 -0
  36. package/Common/Breadcrumbs/BreadcrumbItem/index.js +6 -0
  37. package/Common/Breadcrumbs/BreadcrumbItem/index.module.css +52 -0
  38. package/Common/Breadcrumbs/BreadcrumbLink/index.js +5 -0
  39. package/Common/Breadcrumbs/BreadcrumbLink/index.module.css +32 -0
  40. package/Common/Breadcrumbs/BreadcrumbRoot/index.js +4 -0
  41. package/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +10 -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 +198 -0
  46. package/Common/CodeTabs/index.js +5 -0
  47. package/Common/CodeTabs/index.module.css +67 -0
  48. package/Common/DataTag/index.js +18 -0
  49. package/Common/DataTag/index.module.css +54 -0
  50. package/Common/GlowingBackdrop/index.js +5 -0
  51. package/Common/GlowingBackdrop/index.module.css +130 -0
  52. package/Common/LanguageDropDown/index.js +11 -0
  53. package/Common/LanguageDropDown/index.module.css +151 -0
  54. package/Common/Modal/index.js +10 -0
  55. package/Common/Modal/index.module.css +234 -0
  56. package/Common/NodejsLogo/index.js +7 -0
  57. package/Common/NodejsLogo/index.module.css +5 -0
  58. package/Common/Notification/index.js +6 -0
  59. package/Common/Notification/index.module.css +104 -0
  60. package/Common/Preview/index.js +7 -0
  61. package/Common/Preview/index.module.css +283 -0
  62. package/Common/Select/index.js +46 -0
  63. package/Common/Select/index.module.css +328 -0
  64. package/Common/Separator/index.js +7 -0
  65. package/Common/Separator/index.module.css +13 -0
  66. package/Common/Skeleton/index.js +18 -0
  67. package/Common/Skeleton/index.module.css +127 -0
  68. package/Common/Tabs/index.js +6 -0
  69. package/Common/Tabs/index.module.css +72 -0
  70. package/Common/ThemeToggle/index.js +7 -0
  71. package/Common/ThemeToggle/index.module.css +22 -0
  72. package/Common/Tooltip/index.js +8 -0
  73. package/Common/Tooltip/index.module.css +133 -0
  74. package/Containers/Article/index.js +4 -0
  75. package/Containers/Article/index.module.css +139 -0
  76. package/Containers/DocSideBar/index.js +1 -0
  77. package/Containers/Footer/index.js +22 -0
  78. package/Containers/Footer/index.module.css +61 -0
  79. package/Containers/MetaBar/index.js +12 -0
  80. package/Containers/MetaBar/index.module.css +123 -0
  81. package/Containers/NavBar/NavItem/index.js +7 -0
  82. package/Containers/NavBar/NavItem/index.module.css +74 -0
  83. package/Containers/NavBar/index.js +18 -0
  84. package/Containers/NavBar/index.module.css +205 -0
  85. package/Containers/Sidebar/ProgressionIcon/index.js +3 -0
  86. package/Containers/Sidebar/SidebarGroup/index.js +9 -0
  87. package/Containers/Sidebar/SidebarGroup/index.module.css +192 -0
  88. package/Containers/Sidebar/SidebarItem/index.js +11 -0
  89. package/Containers/Sidebar/SidebarItem/index.module.css +67 -0
  90. package/Containers/Sidebar/index.js +15 -0
  91. package/Containers/Sidebar/index.module.css +48 -0
  92. package/Icons/HexagonGrid.js +3 -0
  93. package/Icons/InstallationMethod/Choco.js +3 -0
  94. package/Icons/InstallationMethod/Devbox.js +3 -0
  95. package/Icons/InstallationMethod/Docker.js +3 -0
  96. package/Icons/InstallationMethod/FNM.js +3 -0
  97. package/Icons/InstallationMethod/Homebrew.js +3 -0
  98. package/Icons/InstallationMethod/N.js +5 -0
  99. package/Icons/InstallationMethod/NVM.js +3 -0
  100. package/Icons/InstallationMethod/Volta.js +3 -0
  101. package/{src/Icons/InstallationMethod/index.ts → Icons/InstallationMethod/index.js} +0 -1
  102. package/Icons/Logos/JsGreen.js +3 -0
  103. package/Icons/Logos/JsWhite.js +3 -0
  104. package/Icons/Logos/Nodejs.js +6 -0
  105. package/Icons/Logos/NodejsStackedBlack.js +3 -0
  106. package/Icons/Logos/NodejsStackedDark.js +3 -0
  107. package/Icons/Logos/NodejsStackedLight.js +3 -0
  108. package/Icons/Logos/NodejsStackedWhite.js +3 -0
  109. package/{src/Icons/Logos/index.ts → Icons/Logos/index.js} +1 -10
  110. package/Icons/OperatingSystem/AIX.js +3 -0
  111. package/Icons/OperatingSystem/Apple.js +3 -0
  112. package/Icons/OperatingSystem/Linux.js +3 -0
  113. package/Icons/OperatingSystem/Microsoft.js +3 -0
  114. package/{src/Icons/OperatingSystem/index.ts → Icons/OperatingSystem/index.js} +0 -1
  115. package/Icons/PackageManager/Npm.js +3 -0
  116. package/Icons/PackageManager/Pnpm.js +3 -0
  117. package/Icons/PackageManager/Yarn.js +3 -0
  118. package/{src/Icons/PackageManager/index.ts → Icons/PackageManager/index.js} +0 -1
  119. package/Icons/Social/Bluesky.js +3 -0
  120. package/Icons/Social/Discord.js +3 -0
  121. package/Icons/Social/GitHub.js +3 -0
  122. package/Icons/Social/LinkedIn.js +3 -0
  123. package/Icons/Social/Mastodon.js +3 -0
  124. package/Icons/Social/Slack.js +3 -0
  125. package/Icons/Social/X.js +3 -0
  126. package/{src/Icons/Social/index.ts → Icons/Social/index.js} +0 -1
  127. package/MDX/CodeTabs.js +16 -0
  128. package/package.json +6 -45
  129. package/stylelint/one-utility-class-per-line.mjs +48 -0
  130. package/{src/stylelint → stylelint}/utils.mjs +19 -25
  131. package/styles/index.css +1139 -0
  132. package/types.js +1 -0
  133. package/.lintstagedrc.json +0 -5
  134. package/.postcssrc.json +0 -6
  135. package/.storybook/constants.ts +0 -28
  136. package/.storybook/main.ts +0 -38
  137. package/.storybook/preview-head.html +0 -20
  138. package/.storybook/preview.tsx +0 -32
  139. package/.stylelintignore +0 -1
  140. package/.stylelintrc.mjs +0 -56
  141. package/__design__/colors.stories.tsx +0 -82
  142. package/__design__/effects.stories.tsx +0 -7
  143. package/__design__/font-family.stories.tsx +0 -76
  144. package/__design__/list.stories.tsx +0 -27
  145. package/__design__/node-logos.stories.tsx +0 -61
  146. package/__design__/platform-logos.stories.tsx +0 -31
  147. package/__design__/social-logos.stories.tsx +0 -33
  148. package/__design__/table.stories.tsx +0 -56
  149. package/__design__/text.stories.tsx +0 -100
  150. package/eslint.config.js +0 -61
  151. package/src/Common/AlertBox/index.module.css +0 -83
  152. package/src/Common/AlertBox/index.stories.tsx +0 -96
  153. package/src/Common/AlertBox/index.tsx +0 -24
  154. package/src/Common/AvatarGroup/Avatar/index.module.css +0 -40
  155. package/src/Common/AvatarGroup/Avatar/index.stories.tsx +0 -22
  156. package/src/Common/AvatarGroup/Avatar/index.tsx +0 -67
  157. package/src/Common/AvatarGroup/Overlay/index.module.css +0 -31
  158. package/src/Common/AvatarGroup/Overlay/index.stories.tsx +0 -33
  159. package/src/Common/AvatarGroup/Overlay/index.tsx +0 -37
  160. package/src/Common/AvatarGroup/__tests__/index.test.jsx +0 -55
  161. package/src/Common/AvatarGroup/index.module.css +0 -21
  162. package/src/Common/AvatarGroup/index.stories.tsx +0 -56
  163. package/src/Common/AvatarGroup/index.tsx +0 -83
  164. package/src/Common/Badge/index.module.css +0 -38
  165. package/src/Common/Badge/index.stories.tsx +0 -38
  166. package/src/Common/Badge/index.tsx +0 -35
  167. package/src/Common/BadgeGroup/index.module.css +0 -77
  168. package/src/Common/BadgeGroup/index.stories.tsx +0 -35
  169. package/src/Common/BadgeGroup/index.tsx +0 -35
  170. package/src/Common/Banner/index.module.css +0 -42
  171. package/src/Common/Banner/index.stories.tsx +0 -29
  172. package/src/Common/Banner/index.tsx +0 -18
  173. package/src/Common/BaseActiveLink/__tests__/index.test.jsx +0 -52
  174. package/src/Common/BaseActiveLink/index.tsx +0 -34
  175. package/src/Common/BaseButton/index.module.css +0 -145
  176. package/src/Common/BaseButton/index.stories.tsx +0 -67
  177. package/src/Common/BaseButton/index.tsx +0 -59
  178. package/src/Common/BaseCodeBox/index.module.css +0 -78
  179. package/src/Common/BaseCodeBox/index.stories.tsx +0 -39
  180. package/src/Common/BaseCodeBox/index.tsx +0 -122
  181. package/src/Common/BaseCrossLink/index.module.css +0 -51
  182. package/src/Common/BaseCrossLink/index.stories.tsx +0 -38
  183. package/src/Common/BaseCrossLink/index.tsx +0 -46
  184. package/src/Common/BaseLinkTabs/index.module.css +0 -43
  185. package/src/Common/BaseLinkTabs/index.stories.tsx +0 -34
  186. package/src/Common/BaseLinkTabs/index.tsx +0 -53
  187. package/src/Common/BasePagination/Ellipsis/index.module.css +0 -10
  188. package/src/Common/BasePagination/Ellipsis/index.stories.tsx +0 -10
  189. package/src/Common/BasePagination/Ellipsis/index.tsx +0 -11
  190. package/src/Common/BasePagination/PaginationListItem/__tests__/index.test.jsx +0 -58
  191. package/src/Common/BasePagination/PaginationListItem/index.module.css +0 -27
  192. package/src/Common/BasePagination/PaginationListItem/index.stories.tsx +0 -40
  193. package/src/Common/BasePagination/PaginationListItem/index.tsx +0 -39
  194. package/src/Common/BasePagination/PrevNextArrow.tsx +0 -15
  195. package/src/Common/BasePagination/__tests__/index.test.jsx +0 -180
  196. package/src/Common/BasePagination/index.module.css +0 -39
  197. package/src/Common/BasePagination/index.stories.tsx +0 -67
  198. package/src/Common/BasePagination/index.tsx +0 -77
  199. package/src/Common/BasePagination/useGetPageElements.tsx +0 -132
  200. package/src/Common/Blockquote/index.module.css +0 -29
  201. package/src/Common/Blockquote/index.stories.tsx +0 -45
  202. package/src/Common/Blockquote/index.tsx +0 -11
  203. package/src/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +0 -5
  204. package/src/Common/Breadcrumbs/BreadcrumbHomeLink/index.tsx +0 -30
  205. package/src/Common/Breadcrumbs/BreadcrumbItem/index.module.css +0 -41
  206. package/src/Common/Breadcrumbs/BreadcrumbItem/index.tsx +0 -42
  207. package/src/Common/Breadcrumbs/BreadcrumbLink/index.module.css +0 -22
  208. package/src/Common/Breadcrumbs/BreadcrumbLink/index.tsx +0 -37
  209. package/src/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +0 -9
  210. package/src/Common/Breadcrumbs/BreadcrumbRoot/index.tsx +0 -20
  211. package/src/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.tsx +0 -9
  212. package/src/Common/Breadcrumbs/index.stories.tsx +0 -94
  213. package/src/Common/Breadcrumbs/index.tsx +0 -81
  214. package/src/Common/ChangeHistory/index.module.css +0 -83
  215. package/src/Common/ChangeHistory/index.stories.tsx +0 -130
  216. package/src/Common/ChangeHistory/index.tsx +0 -67
  217. package/src/Common/CodeTabs/index.module.css +0 -56
  218. package/src/Common/CodeTabs/index.stories.tsx +0 -73
  219. package/src/Common/CodeTabs/index.tsx +0 -16
  220. package/src/Common/DataTag/index.module.css +0 -56
  221. package/src/Common/DataTag/index.stories.tsx +0 -40
  222. package/src/Common/DataTag/index.tsx +0 -39
  223. package/src/Common/GlowingBackdrop/index.module.css +0 -32
  224. package/src/Common/GlowingBackdrop/index.stories.tsx +0 -10
  225. package/src/Common/GlowingBackdrop/index.tsx +0 -13
  226. package/src/Common/LanguageDropDown/index.module.css +0 -53
  227. package/src/Common/LanguageDropDown/index.stories.tsx +0 -19
  228. package/src/Common/LanguageDropDown/index.tsx +0 -56
  229. package/src/Common/Modal/index.module.css +0 -79
  230. package/src/Common/Modal/index.stories.tsx +0 -34
  231. package/src/Common/Modal/index.tsx +0 -50
  232. package/src/Common/NodejsLogo/index.module.css +0 -6
  233. package/src/Common/NodejsLogo/index.stories.tsx +0 -14
  234. package/src/Common/NodejsLogo/index.tsx +0 -26
  235. package/src/Common/Notification/index.module.css +0 -20
  236. package/src/Common/Notification/index.stories.tsx +0 -36
  237. package/src/Common/Notification/index.tsx +0 -34
  238. package/src/Common/Preview/index.module.css +0 -79
  239. package/src/Common/Preview/index.stories.tsx +0 -44
  240. package/src/Common/Preview/index.tsx +0 -25
  241. package/src/Common/Select/__tests__/index.test.jsx +0 -67
  242. package/src/Common/Select/index.module.css +0 -161
  243. package/src/Common/Select/index.stories.tsx +0 -111
  244. package/src/Common/Select/index.tsx +0 -187
  245. package/src/Common/Separator/index.module.css +0 -16
  246. package/src/Common/Separator/index.stories.tsx +0 -32
  247. package/src/Common/Separator/index.tsx +0 -27
  248. package/src/Common/Skeleton/index.module.css +0 -30
  249. package/src/Common/Skeleton/index.tsx +0 -39
  250. package/src/Common/Tabs/__tests__/index.test.jsx +0 -52
  251. package/src/Common/Tabs/index.module.css +0 -54
  252. package/src/Common/Tabs/index.stories.tsx +0 -50
  253. package/src/Common/Tabs/index.tsx +0 -54
  254. package/src/Common/ThemeToggle/__tests__/index.test.jsx +0 -35
  255. package/src/Common/ThemeToggle/index.module.css +0 -15
  256. package/src/Common/ThemeToggle/index.stories.tsx +0 -10
  257. package/src/Common/ThemeToggle/index.tsx +0 -15
  258. package/src/Common/Tooltip/index.module.css +0 -43
  259. package/src/Common/Tooltip/index.stories.tsx +0 -73
  260. package/src/Common/Tooltip/index.tsx +0 -48
  261. package/src/Containers/Article/index.module.css +0 -70
  262. package/src/Containers/Article/index.stories.tsx +0 -39
  263. package/src/Containers/Article/index.tsx +0 -9
  264. package/src/Containers/DocSideBar/index.tsx +0 -0
  265. package/src/Containers/Footer/index.module.css +0 -46
  266. package/src/Containers/Footer/index.stories.tsx +0 -27
  267. package/src/Containers/Footer/index.tsx +0 -95
  268. package/src/Containers/MetaBar/__tests__/index.test.jsx +0 -63
  269. package/src/Containers/MetaBar/index.module.css +0 -91
  270. package/src/Containers/MetaBar/index.stories.tsx +0 -80
  271. package/src/Containers/MetaBar/index.tsx +0 -72
  272. package/src/Containers/NavBar/NavItem/index.module.css +0 -60
  273. package/src/Containers/NavBar/NavItem/index.stories.tsx +0 -38
  274. package/src/Containers/NavBar/NavItem/index.tsx +0 -44
  275. package/src/Containers/NavBar/index.module.css +0 -125
  276. package/src/Containers/NavBar/index.stories.tsx +0 -45
  277. package/src/Containers/NavBar/index.tsx +0 -94
  278. package/src/Containers/Sidebar/ProgressionIcon/index.tsx +0 -16
  279. package/src/Containers/Sidebar/SidebarGroup/index.module.css +0 -64
  280. package/src/Containers/Sidebar/SidebarGroup/index.stories.tsx +0 -36
  281. package/src/Containers/Sidebar/SidebarGroup/index.tsx +0 -49
  282. package/src/Containers/Sidebar/SidebarItem/index.module.css +0 -56
  283. package/src/Containers/Sidebar/SidebarItem/index.stories.tsx +0 -15
  284. package/src/Containers/Sidebar/SidebarItem/index.tsx +0 -43
  285. package/src/Containers/Sidebar/index.module.css +0 -30
  286. package/src/Containers/Sidebar/index.stories.tsx +0 -88
  287. package/src/Containers/Sidebar/index.tsx +0 -70
  288. package/src/Icons/HexagonGrid.stories.tsx +0 -10
  289. package/src/Icons/HexagonGrid.tsx +0 -1434
  290. package/src/Icons/InstallationMethod/Choco.tsx +0 -78
  291. package/src/Icons/InstallationMethod/Devbox.tsx +0 -21
  292. package/src/Icons/InstallationMethod/Docker.tsx +0 -20
  293. package/src/Icons/InstallationMethod/FNM.tsx +0 -132
  294. package/src/Icons/InstallationMethod/Homebrew.tsx +0 -69
  295. package/src/Icons/InstallationMethod/N.tsx +0 -32
  296. package/src/Icons/InstallationMethod/NVM.tsx +0 -63
  297. package/src/Icons/InstallationMethod/Volta.tsx +0 -34
  298. package/src/Icons/Logos/JsGreen.tsx +0 -24
  299. package/src/Icons/Logos/JsWhite.tsx +0 -37
  300. package/src/Icons/Logos/Nodejs.tsx +0 -372
  301. package/src/Icons/Logos/NodejsStackedBlack.tsx +0 -98
  302. package/src/Icons/Logos/NodejsStackedDark.tsx +0 -124
  303. package/src/Icons/Logos/NodejsStackedLight.tsx +0 -123
  304. package/src/Icons/Logos/NodejsStackedWhite.tsx +0 -98
  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,34 +0,0 @@
1
- import type { Meta as MetaObj, StoryObj } from '@storybook/react';
2
-
3
- import BaseLinkTabs from '#ui/Common/BaseLinkTabs';
4
-
5
- type Story = StoryObj<typeof BaseLinkTabs>;
6
- type Meta = MetaObj<typeof BaseLinkTabs>;
7
-
8
- export const Default: Story = {
9
- args: {
10
- label: 'Select Tab',
11
- tabs: [
12
- {
13
- key: 'package',
14
- label: 'Package Manager',
15
- link: '/package-manager',
16
- },
17
- {
18
- key: 'prebuilt',
19
- label: 'Prebuilt Installer',
20
- link: '/prebuilt-installer',
21
- },
22
- {
23
- key: 'source',
24
- label: 'Source Code',
25
- link: '/source-code',
26
- },
27
- ],
28
- activeTab: 'prebuilt',
29
- children: <p>Tab content goes here</p>,
30
- onSelect: console.log,
31
- },
32
- };
33
-
34
- export default { component: BaseLinkTabs } as Meta;
@@ -1,53 +0,0 @@
1
- import type { FC, PropsWithChildren } from 'react';
2
-
3
- import Select from '#ui/Common/Select';
4
- import type { LinkLike } from '#ui/types';
5
-
6
- import styles from './index.module.css';
7
-
8
- type LinkTab = { key: string; label: string; link: string };
9
-
10
- export type LinkTabsProps = PropsWithChildren<{
11
- label?: string;
12
- tabs: Array<LinkTab>;
13
- activeTab: string;
14
- as?: LinkLike;
15
- onSelect: (value: string) => void;
16
- }>;
17
-
18
- const BaseLinkTabs: FC<LinkTabsProps> = ({
19
- tabs,
20
- label,
21
- activeTab,
22
- children,
23
- as: Component = 'a',
24
- onSelect,
25
- }) => (
26
- <>
27
- <div className={styles.tabsList}>
28
- {tabs.map(tab => (
29
- <Component
30
- key={tab.key}
31
- href={tab.link}
32
- className={styles.tabsTrigger}
33
- data-state={tab.key === activeTab ? 'active' : 'inactive'}
34
- >
35
- {tab.label}
36
- </Component>
37
- ))}
38
- </div>
39
-
40
- <div className={styles.tabsSelect}>
41
- <Select
42
- label={label}
43
- defaultValue={tabs.find(tab => tab.key === activeTab)?.link}
44
- values={tabs.map(tab => ({ label: tab.label, value: tab.link }))}
45
- onChange={onSelect}
46
- />
47
- </div>
48
-
49
- {children}
50
- </>
51
- );
52
-
53
- export default BaseLinkTabs;
@@ -1,10 +0,0 @@
1
- @reference "../../../styles/index.css";
2
-
3
- .ellipsis {
4
- @apply w-10
5
- px-3
6
- py-2.5
7
- leading-none
8
- text-neutral-800
9
- dark:text-neutral-200;
10
- }
@@ -1,10 +0,0 @@
1
- import type { Meta as MetaObj, StoryObj } from '@storybook/react';
2
-
3
- import Ellipsis from '#ui/Common/BasePagination/Ellipsis';
4
-
5
- type Story = StoryObj<typeof Ellipsis>;
6
- type Meta = MetaObj<typeof Ellipsis>;
7
-
8
- export const Default: Story = {};
9
-
10
- export default { component: Ellipsis } as Meta;
@@ -1,11 +0,0 @@
1
- import type { FC } from 'react';
2
-
3
- import styles from './index.module.css';
4
-
5
- const Ellipsis: FC = () => (
6
- <span aria-hidden="true" className={styles.ellipsis}>
7
- ...
8
- </span>
9
- );
10
-
11
- export default Ellipsis;
@@ -1,58 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
-
4
- import { render, screen } from '@testing-library/react';
5
-
6
- import { isVisible } from '../../../../../../../tests/utilities.mjs';
7
-
8
- import PaginationListItem from '#ui/Common/BasePagination/PaginationListItem';
9
-
10
- function renderPaginationListItem({
11
- url,
12
- pageNumber,
13
- currentPage,
14
- totalPages,
15
- }) {
16
- render(
17
- <PaginationListItem
18
- url={url}
19
- pageNumber={pageNumber}
20
- currentPage={currentPage}
21
- totalPages={totalPages}
22
- />
23
- );
24
- }
25
-
26
- describe('PaginationListItem', () => {
27
- it('Renders the list item correctly, including the corresponding ARIA attributes', () => {
28
- const pageNumber = 1;
29
- const totalPages = 10;
30
- const url = 'http://';
31
-
32
- renderPaginationListItem({
33
- url,
34
- currentPage: 1,
35
- pageNumber,
36
- totalPages,
37
- });
38
-
39
- const listItem = screen.getByRole('listitem');
40
-
41
- assert.ok(isVisible());
42
- assert.equal(listItem.getAttribute('aria-posinset'), String(pageNumber));
43
- assert.equal(listItem.getAttribute('aria-setsize'), String(totalPages));
44
-
45
- assert.equal(screen.getByRole('link').getAttribute('href'), url);
46
- });
47
-
48
- it('Assigns aria-current="page" attribute to the link when the current page is equal to the page number', () => {
49
- renderPaginationListItem({
50
- url: 'http://',
51
- currentPage: 1,
52
- pageNumber: 1,
53
- totalPages: 10,
54
- });
55
-
56
- assert.equal(screen.getByRole('link').getAttribute('aria-current'), 'page');
57
- });
58
- });
@@ -1,27 +0,0 @@
1
- @reference "../../../styles/index.css";
2
-
3
- .listItem,
4
- .listItem:link,
5
- .listItem:active {
6
- @apply aria-current:bg-green-600
7
- aria-current:text-white
8
- aria-current:cursor-default
9
- flex
10
- size-10
11
- cursor-pointer
12
- items-center
13
- justify-center
14
- rounded-sm
15
- px-3
16
- py-2.5
17
- text-neutral-800
18
- motion-safe:transition-colors
19
- dark:text-neutral-200;
20
-
21
- &:hover:not([aria-current='page']) {
22
- @apply bg-neutral-100
23
- text-neutral-800
24
- dark:bg-neutral-900
25
- dark:text-neutral-200;
26
- }
27
- }
@@ -1,40 +0,0 @@
1
- import type { Meta as MetaObj, StoryObj } from '@storybook/react';
2
-
3
- import PaginationListItem from '#ui/Common/BasePagination/PaginationListItem';
4
-
5
- type Story = StoryObj<typeof PaginationListItem>;
6
- type Meta = MetaObj<typeof PaginationListItem>;
7
-
8
- export const Default: Story = {
9
- args: {
10
- url: '#',
11
- pageNumber: 1,
12
- currentPage: 2,
13
- totalPages: 2,
14
- },
15
- decorators: [
16
- Story => (
17
- <ul className="list-none">
18
- <Story />
19
- </ul>
20
- ),
21
- ],
22
- };
23
-
24
- export const CurrentPage: Story = {
25
- args: {
26
- url: '#',
27
- pageNumber: 1,
28
- currentPage: 1,
29
- totalPages: 1,
30
- },
31
- decorators: [
32
- Story => (
33
- <ul className="list-none">
34
- <Story />
35
- </ul>
36
- ),
37
- ],
38
- };
39
-
40
- export default { component: PaginationListItem } as Meta;
@@ -1,39 +0,0 @@
1
- import type { FC } from 'react';
2
-
3
- import type { LinkLike } from '#ui/types';
4
-
5
- import styles from './index.module.css';
6
-
7
- export type PaginationListItemProps = {
8
- url: string;
9
- pageNumber: number;
10
- // One-based number of the current page
11
- currentPage: number;
12
- totalPages: number;
13
- as?: LinkLike;
14
- label: string;
15
- };
16
-
17
- const PaginationListItem: FC<PaginationListItemProps> = ({
18
- url,
19
- pageNumber,
20
- currentPage,
21
- totalPages,
22
- as: Component = 'a',
23
- label,
24
- }) => {
25
- return (
26
- <li key={pageNumber} aria-setsize={totalPages} aria-posinset={pageNumber}>
27
- <Component
28
- href={url}
29
- aria-label={label}
30
- className={styles.listItem}
31
- {...(pageNumber === currentPage && { 'aria-current': 'page' })}
32
- >
33
- <span>{pageNumber}</span>
34
- </Component>
35
- </li>
36
- );
37
- };
38
-
39
- export default PaginationListItem;
@@ -1,15 +0,0 @@
1
- import { ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/solid';
2
- import type { FC, SVGAttributes } from 'react';
3
-
4
- type PrevNextArrowProps = {
5
- type: 'previous' | 'next';
6
- } & SVGAttributes<SVGSVGElement>;
7
-
8
- const PrevNextArrow: FC<PrevNextArrowProps> = ({ type, ...extra }) => {
9
- const ChevronComponent =
10
- type === 'previous' ? ChevronLeftIcon : ChevronRightIcon;
11
-
12
- return <ChevronComponent {...extra} />;
13
- };
14
-
15
- export default PrevNextArrow;
@@ -1,180 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert/strict';
3
-
4
- import { render, screen } from '@testing-library/react';
5
-
6
- import { isVisible } from '../../../../../../tests/utilities.mjs';
7
-
8
- import BasePagination from '#ui/Common/BasePagination';
9
-
10
- const getPageLabel = number => number.toString();
11
- const labels = {
12
- aria: 'Aria',
13
- prevAria: 'Previous Aria',
14
- prev: 'Previous',
15
- nextAria: 'Next Aria',
16
- next: 'Next',
17
- };
18
-
19
- function renderPagination({
20
- currentPage = 1,
21
- pages,
22
- currentPageSiblingsCount,
23
- }) {
24
- const parsedPages = new Array(pages)
25
- .fill({ url: 'page' })
26
- .map(item => ({ url: `${item.url}-${Math.random()}` }));
27
-
28
- render(
29
- <BasePagination
30
- currentPage={currentPage}
31
- pages={parsedPages}
32
- currentPageSiblingsCount={currentPageSiblingsCount}
33
- getPageLabel={getPageLabel}
34
- labels={labels}
35
- />
36
- );
37
-
38
- return {
39
- currentPage,
40
- parsedPages,
41
- };
42
- }
43
-
44
- describe('Pagination', () => {
45
- describe('Rendering', () => {
46
- it('Renders the navigation buttons even if no pages are passed to it', () => {
47
- renderPagination({ currentPage: 0, pages: 0 });
48
-
49
- assert.ok(isVisible(screen.getByRole('navigation')));
50
- assert.ok(
51
- isVisible(
52
- screen.getByRole('button', {
53
- name: labels.prevAria,
54
- })
55
- )
56
- );
57
- assert.ok(
58
- isVisible(
59
- screen.getByRole('button', {
60
- name: labels.nextAria,
61
- })
62
- )
63
- );
64
- });
65
-
66
- it('Renders the passed pages and current page', () => {
67
- const { currentPage, parsedPages } = renderPagination({
68
- pages: 4,
69
- });
70
-
71
- const pageElements = screen.getAllByRole('link');
72
-
73
- assert.equal(pageElements.length, parsedPages.length);
74
-
75
- pageElements.forEach((page, index) => {
76
- if (index + 1 === currentPage) {
77
- assert.strictEqual(page.getAttribute('aria-current'), 'page');
78
- }
79
-
80
- assert.ok(isVisible(page));
81
- });
82
- });
83
- });
84
-
85
- describe('Ellipsis behavior', () => {
86
- it('When the pages size is equal or smaller than currentPageSiblingsCount + 5, all pages are shown', () => {
87
- renderPagination({
88
- pages: 6,
89
- });
90
-
91
- assert.ok(!screen.queryByText('...')?.ownerDocument);
92
-
93
- const pageElements = screen.getAllByRole('link');
94
-
95
- assert.deepEqual(
96
- pageElements.map(element => element.textContent),
97
- ['1', '2', '3', '4', '5', '6']
98
- );
99
- });
100
-
101
- it('Shows left ellipsis when the left sibling of the current page is at least two pages away from the first page', () => {
102
- renderPagination({
103
- currentPage: 5,
104
- pages: 8,
105
- });
106
-
107
- assert.ok(isVisible(screen.getByText('...')));
108
-
109
- const pageElements = screen.getAllByRole('link');
110
-
111
- assert.deepEqual(
112
- pageElements.map(element => element.textContent),
113
- ['1', '4', '5', '6', '7', '8']
114
- );
115
- });
116
-
117
- it('Shows right ellipsis when the right sibling of the current page is at least two pages away from the last page', () => {
118
- renderPagination({
119
- currentPage: 3,
120
- pages: 8,
121
- });
122
-
123
- assert.ok(isVisible(screen.getByText('...')));
124
-
125
- const pageElements = screen.getAllByRole('link');
126
-
127
- assert.deepEqual(
128
- pageElements.map(element => element.textContent),
129
- ['1', '2', '3', '4', '5', '8']
130
- );
131
- });
132
-
133
- it('Shows right and left ellipses when the current page siblings are both at least two pages away from the first and last pages', () => {
134
- renderPagination({
135
- currentPage: 5,
136
- pages: 10,
137
- });
138
-
139
- assert.equal(screen.getAllByText('...').length, 2);
140
-
141
- const pageElements = screen.getAllByRole('link');
142
-
143
- assert.deepEqual(
144
- pageElements.map(element => element.textContent),
145
- ['1', '4', '5', '6', '10']
146
- );
147
- });
148
- });
149
-
150
- describe('Navigation buttons', () => {
151
- it('Disables "Previous" button when the currentPage is equal to the first page', () => {
152
- renderPagination({
153
- pages: 2,
154
- });
155
-
156
- assert.ok(
157
- screen
158
- .getByRole('button', {
159
- name: labels.prevAria,
160
- })
161
- .getAttribute('aria-disabled')
162
- );
163
- });
164
-
165
- it('Disables "Next" button when the currentPage is equal to the last page', () => {
166
- renderPagination({
167
- currentPage: 2,
168
- pages: 2,
169
- });
170
-
171
- assert.ok(
172
- screen
173
- .getByRole('button', {
174
- name: labels.nextAria,
175
- })
176
- .getAttribute('aria-disabled')
177
- );
178
- });
179
- });
180
- });
@@ -1,39 +0,0 @@
1
- @reference "../../styles/index.css";
2
-
3
- .pagination {
4
- @apply grid
5
- items-center
6
- justify-between
7
- gap-y-5
8
- [grid-template-areas:'pages_pages_pages''prev_._next']
9
- md:gap-y-0
10
- md:[grid-template-areas:'prev_pages_next'];
11
- }
12
-
13
- .previousButton,
14
- .nextButton {
15
- @apply text-sm;
16
- }
17
-
18
- .previousButton {
19
- @apply [grid-area:prev];
20
- }
21
-
22
- .nextButton {
23
- @apply [grid-area:next];
24
- }
25
-
26
- .arrowIcon {
27
- @apply h-5
28
- shrink-0
29
- text-neutral-600
30
- dark:text-neutral-400;
31
- }
32
-
33
- .list {
34
- @apply flex
35
- list-none
36
- justify-center
37
- gap-1
38
- [grid-area:pages];
39
- }
@@ -1,67 +0,0 @@
1
- import type { Meta as MetaObj, StoryObj } from '@storybook/react';
2
-
3
- import BasePagination from '#ui/Common/BasePagination';
4
-
5
- type Story = StoryObj<typeof BasePagination>;
6
- type Meta = MetaObj<typeof BasePagination>;
7
-
8
- export const Default: Story = {
9
- args: {
10
- currentPage: 1,
11
- currentPageSiblingsCount: 1,
12
- pages: [{ url: '1' }, { url: '2' }, { url: '3' }],
13
- getPageLabel: value => `Page: ${value}`,
14
- labels: {
15
- aria: 'Aria',
16
- prevAria: 'Previous Aria',
17
- prev: 'Previous',
18
- nextAria: 'Next Aria',
19
- next: 'Next',
20
- },
21
- },
22
- };
23
-
24
- export const LeftEllipsis: Story = {
25
- args: {
26
- ...Default.args,
27
- currentPage: 5,
28
- pages: [
29
- { url: '1' },
30
- { url: '2' },
31
- { url: '3' },
32
- { url: '4' },
33
- { url: '5' },
34
- { url: '6' },
35
- { url: '7' },
36
- { url: '8' },
37
- ],
38
- },
39
- };
40
-
41
- export const RightEllipsis: Story = {
42
- args: {
43
- ...LeftEllipsis.args,
44
- currentPage: 3,
45
- },
46
- };
47
-
48
- export const TwoEllipses: Story = {
49
- args: {
50
- ...Default.args,
51
- currentPage: 5,
52
- pages: [
53
- { url: '1' },
54
- { url: '2' },
55
- { url: '3' },
56
- { url: '4' },
57
- { url: '5' },
58
- { url: '6' },
59
- { url: '7' },
60
- { url: '8' },
61
- { url: '9' },
62
- { url: '10' },
63
- ],
64
- },
65
- };
66
-
67
- export default { component: BasePagination } as Meta;
@@ -1,77 +0,0 @@
1
- import { ArrowRightIcon, ArrowLeftIcon } from '@heroicons/react/20/solid';
2
- import type { FC } from 'react';
3
-
4
- import Button from '#ui/Common/BaseButton';
5
- import { useGetPageElements } from '#ui/Common/BasePagination/useGetPageElements';
6
- import type { LinkLike } from '#ui/types';
7
-
8
- import styles from './index.module.css';
9
-
10
- type Page = { url: string };
11
-
12
- export type PaginationProps = {
13
- // One-based number of the current page
14
- currentPage: number;
15
- pages: Array<Page>;
16
- // The number of page buttons on each side of the current page button
17
- // @default 1
18
- currentPageSiblingsCount?: number;
19
- as?: LinkLike;
20
- getPageLabel: (pageNumber: number) => string;
21
- labels: {
22
- aria: string;
23
- prevAria: string;
24
- prev: string;
25
- nextAria: string;
26
- next: string;
27
- };
28
- };
29
-
30
- const BasePagination: FC<PaginationProps> = ({
31
- currentPage,
32
- pages,
33
- as = 'a',
34
- currentPageSiblingsCount = 1,
35
- labels,
36
- getPageLabel,
37
- }) => {
38
- const parsedPages = useGetPageElements(
39
- currentPage,
40
- pages,
41
- currentPageSiblingsCount,
42
- as,
43
- getPageLabel
44
- );
45
-
46
- return (
47
- <nav aria-label={labels.aria} className={styles.pagination}>
48
- <Button
49
- as={as}
50
- aria-label={labels.prevAria}
51
- disabled={currentPage === 1}
52
- kind="secondary"
53
- className={styles.previousButton}
54
- href={pages[currentPage - 2]?.url}
55
- >
56
- <ArrowLeftIcon className={styles.arrowIcon} />
57
- <span>{labels.prev}</span>
58
- </Button>
59
-
60
- <ol className={styles.list}>{parsedPages}</ol>
61
-
62
- <Button
63
- as={as}
64
- aria-label={labels.nextAria}
65
- disabled={currentPage === pages.length}
66
- kind="secondary"
67
- className={styles.nextButton}
68
- href={pages[currentPage]?.url}
69
- >
70
- <span>{labels.next}</span>
71
- <ArrowRightIcon className={styles.arrowIcon} />
72
- </Button>
73
- </nav>
74
- );
75
- };
76
-
77
- export default BasePagination;