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

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 (266) hide show
  1. package/Common/AlertBox/index.module.css +50 -44
  2. package/Common/AlertBox/index.stories.tsx +96 -0
  3. package/Common/AlertBox/index.tsx +24 -0
  4. package/Common/AvatarGroup/Avatar/index.module.css +30 -50
  5. package/Common/AvatarGroup/Avatar/index.stories.tsx +22 -0
  6. package/Common/AvatarGroup/Avatar/index.tsx +67 -0
  7. package/Common/AvatarGroup/Overlay/index.module.css +21 -28
  8. package/Common/AvatarGroup/Overlay/index.stories.tsx +33 -0
  9. package/Common/AvatarGroup/Overlay/index.tsx +37 -0
  10. package/Common/AvatarGroup/__tests__/index.test.jsx +55 -0
  11. package/Common/AvatarGroup/index.module.css +11 -12
  12. package/Common/AvatarGroup/index.stories.tsx +56 -0
  13. package/Common/AvatarGroup/index.tsx +83 -0
  14. package/Common/Badge/index.module.css +26 -34
  15. package/Common/Badge/index.stories.tsx +38 -0
  16. package/Common/Badge/index.tsx +35 -0
  17. package/Common/BadgeGroup/index.module.css +51 -75
  18. package/Common/BadgeGroup/index.stories.tsx +35 -0
  19. package/Common/BadgeGroup/index.tsx +35 -0
  20. package/Common/Banner/index.module.css +27 -30
  21. package/Common/Banner/index.stories.tsx +29 -0
  22. package/Common/Banner/index.tsx +18 -0
  23. package/Common/BaseActiveLink/__tests__/index.test.jsx +52 -0
  24. package/Common/BaseActiveLink/index.tsx +34 -0
  25. package/Common/BaseButton/index.module.css +105 -332
  26. package/Common/BaseButton/index.stories.tsx +67 -0
  27. package/Common/BaseButton/index.tsx +59 -0
  28. package/Common/BaseCodeBox/index.module.css +58 -76
  29. package/Common/BaseCodeBox/index.stories.tsx +39 -0
  30. package/Common/BaseCodeBox/index.tsx +122 -0
  31. package/Common/BaseCrossLink/index.module.css +39 -57
  32. package/Common/BaseCrossLink/index.stories.tsx +38 -0
  33. package/Common/BaseCrossLink/index.tsx +46 -0
  34. package/Common/BaseLinkTabs/index.module.css +33 -67
  35. package/Common/BaseLinkTabs/index.stories.tsx +34 -0
  36. package/Common/BaseLinkTabs/index.tsx +53 -0
  37. package/Common/BasePagination/Ellipsis/index.module.css +8 -14
  38. package/Common/BasePagination/Ellipsis/index.stories.tsx +10 -0
  39. package/Common/BasePagination/Ellipsis/index.tsx +11 -0
  40. package/Common/BasePagination/PaginationListItem/__tests__/index.test.jsx +58 -0
  41. package/Common/BasePagination/PaginationListItem/index.module.css +21 -36
  42. package/Common/BasePagination/PaginationListItem/index.stories.tsx +40 -0
  43. package/Common/BasePagination/PaginationListItem/index.tsx +39 -0
  44. package/Common/BasePagination/PrevNextArrow.tsx +15 -0
  45. package/Common/BasePagination/__tests__/index.test.jsx +180 -0
  46. package/Common/BasePagination/index.module.css +26 -27
  47. package/Common/BasePagination/index.stories.tsx +67 -0
  48. package/Common/BasePagination/index.tsx +77 -0
  49. package/Common/BasePagination/useGetPageElements.tsx +132 -0
  50. package/Common/Blockquote/index.module.css +23 -44
  51. package/Common/Blockquote/index.stories.tsx +45 -0
  52. package/Common/Blockquote/index.tsx +11 -0
  53. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +3 -3
  54. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.tsx +30 -0
  55. package/Common/Breadcrumbs/BreadcrumbItem/index.module.css +27 -38
  56. package/Common/Breadcrumbs/BreadcrumbItem/index.tsx +42 -0
  57. package/Common/Breadcrumbs/BreadcrumbLink/index.module.css +16 -26
  58. package/Common/Breadcrumbs/BreadcrumbLink/index.tsx +37 -0
  59. package/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +7 -8
  60. package/Common/Breadcrumbs/BreadcrumbRoot/index.tsx +20 -0
  61. package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.tsx +9 -0
  62. package/Common/Breadcrumbs/index.stories.tsx +94 -0
  63. package/Common/Breadcrumbs/index.tsx +81 -0
  64. package/Common/ChangeHistory/index.module.css +66 -181
  65. package/Common/ChangeHistory/index.stories.tsx +130 -0
  66. package/Common/ChangeHistory/index.tsx +67 -0
  67. package/Common/CodeTabs/index.module.css +36 -47
  68. package/Common/CodeTabs/index.stories.tsx +73 -0
  69. package/Common/CodeTabs/index.tsx +16 -0
  70. package/Common/DataTag/index.module.css +32 -30
  71. package/Common/DataTag/index.stories.tsx +40 -0
  72. package/Common/DataTag/index.tsx +39 -0
  73. package/Common/GlowingBackdrop/index.module.css +28 -126
  74. package/Common/GlowingBackdrop/index.stories.tsx +10 -0
  75. package/Common/GlowingBackdrop/index.tsx +13 -0
  76. package/Common/LanguageDropDown/index.module.css +42 -140
  77. package/Common/LanguageDropDown/index.stories.tsx +19 -0
  78. package/Common/LanguageDropDown/index.tsx +56 -0
  79. package/Common/Modal/index.module.css +62 -217
  80. package/Common/Modal/index.stories.tsx +34 -0
  81. package/Common/Modal/index.tsx +50 -0
  82. package/Common/NodejsLogo/index.module.css +4 -3
  83. package/Common/NodejsLogo/index.stories.tsx +14 -0
  84. package/Common/NodejsLogo/index.tsx +26 -0
  85. package/Common/Notification/index.module.css +17 -101
  86. package/Common/Notification/index.stories.tsx +36 -0
  87. package/Common/Notification/index.tsx +34 -0
  88. package/Common/Preview/index.module.css +65 -269
  89. package/Common/Preview/index.stories.tsx +44 -0
  90. package/Common/Preview/index.tsx +25 -0
  91. package/Common/Select/__tests__/index.test.jsx +67 -0
  92. package/Common/Select/index.module.css +127 -294
  93. package/Common/Select/index.stories.tsx +111 -0
  94. package/Common/Select/index.tsx +187 -0
  95. package/Common/Separator/index.module.css +10 -7
  96. package/Common/Separator/index.stories.tsx +32 -0
  97. package/Common/Separator/index.tsx +27 -0
  98. package/Common/Skeleton/index.module.css +21 -118
  99. package/Common/Skeleton/index.tsx +39 -0
  100. package/Common/Tabs/__tests__/index.test.jsx +52 -0
  101. package/Common/Tabs/index.module.css +40 -58
  102. package/Common/Tabs/index.stories.tsx +50 -0
  103. package/Common/Tabs/index.tsx +54 -0
  104. package/Common/ThemeToggle/__tests__/index.test.jsx +35 -0
  105. package/Common/ThemeToggle/index.module.css +11 -18
  106. package/Common/ThemeToggle/index.stories.tsx +10 -0
  107. package/Common/ThemeToggle/index.tsx +15 -0
  108. package/Common/Tooltip/index.module.css +29 -119
  109. package/Common/Tooltip/index.stories.tsx +73 -0
  110. package/Common/Tooltip/index.tsx +48 -0
  111. package/Containers/Article/index.module.css +58 -127
  112. package/Containers/Article/index.stories.tsx +39 -0
  113. package/Containers/Article/index.tsx +9 -0
  114. package/Containers/DocSideBar/index.tsx +0 -0
  115. package/Containers/Footer/index.module.css +36 -51
  116. package/Containers/Footer/index.stories.tsx +27 -0
  117. package/Containers/Footer/index.tsx +95 -0
  118. package/Containers/MetaBar/__tests__/index.test.jsx +63 -0
  119. package/Containers/MetaBar/index.module.css +69 -101
  120. package/Containers/MetaBar/index.stories.tsx +80 -0
  121. package/Containers/MetaBar/index.tsx +72 -0
  122. package/Containers/NavBar/NavItem/index.module.css +36 -50
  123. package/Containers/NavBar/NavItem/index.stories.tsx +38 -0
  124. package/Containers/NavBar/NavItem/index.tsx +44 -0
  125. package/Containers/NavBar/index.module.css +96 -176
  126. package/Containers/NavBar/index.stories.tsx +45 -0
  127. package/Containers/NavBar/index.tsx +94 -0
  128. package/Containers/Sidebar/ProgressionIcon/index.tsx +16 -0
  129. package/Containers/Sidebar/SidebarGroup/index.module.css +52 -180
  130. package/Containers/Sidebar/SidebarGroup/index.stories.tsx +36 -0
  131. package/Containers/Sidebar/SidebarGroup/index.tsx +49 -0
  132. package/Containers/Sidebar/SidebarItem/index.module.css +38 -49
  133. package/Containers/Sidebar/SidebarItem/index.stories.tsx +15 -0
  134. package/Containers/Sidebar/SidebarItem/index.tsx +43 -0
  135. package/Containers/Sidebar/index.module.css +24 -42
  136. package/Containers/Sidebar/index.stories.tsx +88 -0
  137. package/Containers/Sidebar/index.tsx +70 -0
  138. package/Icons/HexagonGrid.stories.tsx +10 -0
  139. package/Icons/HexagonGrid.tsx +1434 -0
  140. package/Icons/InstallationMethod/Choco.tsx +78 -0
  141. package/Icons/InstallationMethod/Devbox.tsx +21 -0
  142. package/Icons/InstallationMethod/Docker.tsx +20 -0
  143. package/Icons/InstallationMethod/FNM.tsx +132 -0
  144. package/Icons/InstallationMethod/Homebrew.tsx +69 -0
  145. package/Icons/InstallationMethod/N.tsx +32 -0
  146. package/Icons/InstallationMethod/NVM.tsx +63 -0
  147. package/Icons/InstallationMethod/Volta.tsx +34 -0
  148. package/Icons/InstallationMethod/{index.js → index.ts} +1 -0
  149. package/Icons/Logos/JsGreen.tsx +24 -0
  150. package/Icons/Logos/JsWhite.tsx +37 -0
  151. package/Icons/Logos/Nodejs.tsx +372 -0
  152. package/Icons/Logos/NodejsStackedBlack.tsx +98 -0
  153. package/Icons/Logos/NodejsStackedDark.tsx +124 -0
  154. package/Icons/Logos/NodejsStackedLight.tsx +123 -0
  155. package/Icons/Logos/NodejsStackedWhite.tsx +98 -0
  156. package/Icons/Logos/{index.js → index.ts} +10 -1
  157. package/Icons/OperatingSystem/AIX.tsx +46 -0
  158. package/Icons/OperatingSystem/Apple.tsx +23 -0
  159. package/Icons/OperatingSystem/Linux.tsx +969 -0
  160. package/Icons/OperatingSystem/Microsoft.tsx +19 -0
  161. package/Icons/OperatingSystem/{index.js → index.ts} +1 -0
  162. package/Icons/PackageManager/Npm.tsx +21 -0
  163. package/Icons/PackageManager/Pnpm.tsx +22 -0
  164. package/Icons/PackageManager/Yarn.tsx +22 -0
  165. package/Icons/PackageManager/{index.js → index.ts} +1 -0
  166. package/Icons/Social/Bluesky.tsx +19 -0
  167. package/Icons/Social/Discord.tsx +20 -0
  168. package/Icons/Social/GitHub.tsx +16 -0
  169. package/Icons/Social/LinkedIn.tsx +16 -0
  170. package/Icons/Social/Mastodon.tsx +36 -0
  171. package/Icons/Social/Slack.tsx +31 -0
  172. package/Icons/Social/X.tsx +16 -0
  173. package/Icons/Social/{index.js → index.ts} +1 -0
  174. package/MDX/CodeTabs.tsx +47 -0
  175. package/package.json +54 -6
  176. package/stylelint/__tests__/index.test.mjs +80 -0
  177. package/stylelint/one-utility-class-per-line.mjs +50 -34
  178. package/stylelint/utils.mjs +25 -19
  179. package/styles/animations.css +47 -0
  180. package/styles/base.css +17 -0
  181. package/styles/effects.css +12 -0
  182. package/styles/index.css +26 -1127
  183. package/styles/markdown.css +173 -0
  184. package/styles/theme.css +175 -0
  185. package/types.ts +25 -0
  186. package/Common/AlertBox/index.js +0 -5
  187. package/Common/AvatarGroup/Avatar/index.js +0 -11
  188. package/Common/AvatarGroup/Overlay/index.js +0 -6
  189. package/Common/AvatarGroup/index.js +0 -21
  190. package/Common/Badge/index.js +0 -7
  191. package/Common/BadgeGroup/index.js +0 -6
  192. package/Common/Banner/index.js +0 -4
  193. package/Common/BaseActiveLink/index.js +0 -14
  194. package/Common/BaseButton/index.js +0 -10
  195. package/Common/BaseCodeBox/index.js +0 -50
  196. package/Common/BaseCrossLink/index.js +0 -12
  197. package/Common/BaseLinkTabs/index.js +0 -5
  198. package/Common/BasePagination/Ellipsis/index.js +0 -4
  199. package/Common/BasePagination/PaginationListItem/index.js +0 -6
  200. package/Common/BasePagination/PrevNextArrow.js +0 -7
  201. package/Common/BasePagination/index.js +0 -10
  202. package/Common/BasePagination/useGetPageElements.js +0 -77
  203. package/Common/Blockquote/index.js +0 -4
  204. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.js +0 -9
  205. package/Common/Breadcrumbs/BreadcrumbItem/index.js +0 -6
  206. package/Common/Breadcrumbs/BreadcrumbLink/index.js +0 -5
  207. package/Common/Breadcrumbs/BreadcrumbRoot/index.js +0 -4
  208. package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.js +0 -4
  209. package/Common/Breadcrumbs/index.js +0 -22
  210. package/Common/ChangeHistory/index.js +0 -9
  211. package/Common/CodeTabs/index.js +0 -5
  212. package/Common/DataTag/index.js +0 -18
  213. package/Common/GlowingBackdrop/index.js +0 -5
  214. package/Common/LanguageDropDown/index.js +0 -11
  215. package/Common/Modal/index.js +0 -10
  216. package/Common/NodejsLogo/index.js +0 -7
  217. package/Common/Notification/index.js +0 -6
  218. package/Common/Preview/index.js +0 -7
  219. package/Common/Select/index.js +0 -46
  220. package/Common/Separator/index.js +0 -7
  221. package/Common/Skeleton/index.js +0 -18
  222. package/Common/Tabs/index.js +0 -6
  223. package/Common/ThemeToggle/index.js +0 -7
  224. package/Common/Tooltip/index.js +0 -8
  225. package/Containers/Article/index.js +0 -4
  226. package/Containers/DocSideBar/index.js +0 -1
  227. package/Containers/Footer/index.js +0 -22
  228. package/Containers/MetaBar/index.js +0 -12
  229. package/Containers/NavBar/NavItem/index.js +0 -7
  230. package/Containers/NavBar/index.js +0 -18
  231. package/Containers/Sidebar/ProgressionIcon/index.js +0 -3
  232. package/Containers/Sidebar/SidebarGroup/index.js +0 -9
  233. package/Containers/Sidebar/SidebarItem/index.js +0 -11
  234. package/Containers/Sidebar/index.js +0 -15
  235. package/Icons/HexagonGrid.js +0 -3
  236. package/Icons/InstallationMethod/Choco.js +0 -3
  237. package/Icons/InstallationMethod/Devbox.js +0 -3
  238. package/Icons/InstallationMethod/Docker.js +0 -3
  239. package/Icons/InstallationMethod/FNM.js +0 -3
  240. package/Icons/InstallationMethod/Homebrew.js +0 -3
  241. package/Icons/InstallationMethod/N.js +0 -5
  242. package/Icons/InstallationMethod/NVM.js +0 -3
  243. package/Icons/InstallationMethod/Volta.js +0 -3
  244. package/Icons/Logos/JsGreen.js +0 -3
  245. package/Icons/Logos/JsWhite.js +0 -3
  246. package/Icons/Logos/Nodejs.js +0 -6
  247. package/Icons/Logos/NodejsStackedBlack.js +0 -3
  248. package/Icons/Logos/NodejsStackedDark.js +0 -3
  249. package/Icons/Logos/NodejsStackedLight.js +0 -3
  250. package/Icons/Logos/NodejsStackedWhite.js +0 -3
  251. package/Icons/OperatingSystem/AIX.js +0 -3
  252. package/Icons/OperatingSystem/Apple.js +0 -3
  253. package/Icons/OperatingSystem/Linux.js +0 -3
  254. package/Icons/OperatingSystem/Microsoft.js +0 -3
  255. package/Icons/PackageManager/Npm.js +0 -3
  256. package/Icons/PackageManager/Pnpm.js +0 -3
  257. package/Icons/PackageManager/Yarn.js +0 -3
  258. package/Icons/Social/Bluesky.js +0 -3
  259. package/Icons/Social/Discord.js +0 -3
  260. package/Icons/Social/GitHub.js +0 -3
  261. package/Icons/Social/LinkedIn.js +0 -3
  262. package/Icons/Social/Mastodon.js +0 -3
  263. package/Icons/Social/Slack.js +0 -3
  264. package/Icons/Social/X.js +0 -3
  265. package/MDX/CodeTabs.js +0 -16
  266. package/types.js +0 -1
@@ -0,0 +1,34 @@
1
+ import classNames from 'classnames';
2
+ import type { ComponentProps, FC } from 'react';
3
+
4
+ import type { LinkLike } from '#ui/types';
5
+
6
+ export type ActiveLocalizedLinkProps = ComponentProps<LinkLike> & {
7
+ activeClassName?: string;
8
+ allowSubPath?: boolean;
9
+ pathname?: string;
10
+ as?: LinkLike;
11
+ };
12
+
13
+ const BaseActiveLink: FC<ActiveLocalizedLinkProps> = ({
14
+ activeClassName = 'active',
15
+ allowSubPath = false,
16
+ className,
17
+ href = '',
18
+ pathname = '/',
19
+ as: Component = 'a',
20
+ ...props
21
+ }) => {
22
+ const finalClassName = classNames(className, {
23
+ [activeClassName]: allowSubPath
24
+ ? // When using allowSubPath we want only to check if
25
+ // the current pathname starts with the utmost upper level
26
+ // of an href (e.g. /docs/...)
27
+ pathname.startsWith(`/${href.toString().split('/')[1]}`)
28
+ : href.toString() === pathname,
29
+ });
30
+
31
+ return <Component className={finalClassName} href={href} {...props} />;
32
+ };
33
+
34
+ export default BaseActiveLink;
@@ -1,372 +1,145 @@
1
- /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
1
+ @reference "../../styles/index.css";
2
+
2
3
  .button {
3
- position: relative;
4
- display: inline-flex;
5
- align-items: center;
6
- justify-content: center;
7
- gap: calc(var(--spacing, 0.25rem)*2);
8
- padding-inline: calc(var(--spacing, 0.25rem)*4.5);
9
- padding-block: calc(var(--spacing, 0.25rem)*2.5);
10
- text-align: center;
11
- --tw-font-weight: var(--font-weight-semibold, 600);
12
- font-weight: var(--font-weight-semibold, 600);
13
- @media (prefers-reduced-motion: no-preference) {
14
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
15
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(0.4, 0, 0.2, 1)));
16
- transition-duration: var(--tw-duration, var(--default-transition-duration, 150ms));
17
- }
4
+ @apply px-4.5
5
+ relative
6
+ inline-flex
7
+ items-center
8
+ justify-center
9
+ gap-2
10
+ py-2.5
11
+ text-center
12
+ font-semibold
13
+ motion-safe:transition-colors;
14
+
18
15
  svg {
19
- width: calc(var(--spacing, 0.25rem)*5);
20
- height: calc(var(--spacing, 0.25rem)*5);
16
+ @apply size-5;
21
17
  }
18
+
22
19
  &[aria-disabled='true'] {
23
- cursor: not-allowed;
20
+ @apply cursor-not-allowed;
24
21
  }
22
+
25
23
  &.small {
26
- padding-inline: calc(var(--spacing, 0.25rem)*3);
27
- padding-block: calc(var(--spacing, 0.25rem)*2);
28
- font-size: var(--text-sm, 0.875rem);
29
- line-height: var(--tw-leading, var(--text-sm--line-height, 1.42857));
24
+ @apply px-3
25
+ py-2
26
+ text-sm;
30
27
  }
28
+
31
29
  &.neutral {
32
- border-radius: var(--radius-sm, 0.25rem);
33
- background-color: var(--color-neutral-900, #2c3437);
34
- color: var(--color-white, #fff);
35
- &:where([data-theme=dark], [data-theme=dark] *) {
36
- color: var(--color-neutral-200, #e9edf0);
37
- }
30
+ @apply rounded-sm
31
+ bg-neutral-900
32
+ text-white
33
+ dark:text-neutral-200;
34
+
38
35
  &:hover:not([aria-disabled='true']) {
39
- background-color: var(--color-neutral-800, #556066);
36
+ @apply bg-neutral-800;
40
37
  }
38
+
41
39
  &[aria-disabled='true'] {
42
- background-color: var(--color-neutral-900, #2c3437);
43
- opacity: 50%;
40
+ @apply bg-neutral-900
41
+ opacity-50;
44
42
  }
43
+
45
44
  &:focus {
46
- background-color: var(--color-neutral-800, #556066);
45
+ @apply bg-neutral-800;
47
46
  }
48
47
  }
48
+
49
49
  &.primary {
50
- border-radius: var(--radius-sm, 0.25rem);
51
- border-style: var(--tw-border-style);
52
- border-width: 1px;
53
- border-color: var(--color-green-600, #417e38);
54
- background-color: var(--color-green-600, #417e38);
55
- color: var(--color-white, #fff);
56
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in srgb, #101828 5%, transparent));
57
- @supports (color: color-mix(in lab, red, red)) {
58
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in oklab, var(--color-shadow, #101828) 5%, transparent));
59
- }
60
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
50
+ @apply shadow-xs
51
+ rounded-sm
52
+ border
53
+ border-green-600
54
+ bg-green-600
55
+ text-white;
56
+
61
57
  &:hover:not([aria-disabled='true']) {
62
- border-color: var(--color-green-700, #2c682c);
63
- background-color: var(--color-green-700, #2c682c);
64
- color: var(--color-white, #fff);
58
+ @apply border-green-700
59
+ bg-green-700
60
+ text-white;
65
61
  }
62
+
66
63
  &:focus {
67
- border-color: var(--color-green-700, #2c682c);
68
- background-color: var(--color-green-700, #2c682c);
64
+ @apply border-green-700
65
+ bg-green-700;
69
66
  }
67
+
70
68
  &[aria-disabled='true'] {
71
- background-color: var(--color-green-600, #417e38);
72
- opacity: 50%;
69
+ @apply bg-green-600
70
+ opacity-50;
73
71
  }
74
72
  }
73
+
75
74
  &.secondary {
76
- border-radius: var(--radius-lg, 0.5rem);
77
- border-style: var(--tw-border-style);
78
- border-width: 1px;
79
- border-color: var(--color-neutral-200, #e9edf0);
80
- color: var(--color-neutral-800, #556066);
81
- &:where([data-theme=dark], [data-theme=dark] *) {
82
- border-color: var(--color-neutral-900, #2c3437);
83
- }
84
- &:where([data-theme=dark], [data-theme=dark] *) {
85
- color: var(--color-neutral-200, #e9edf0);
86
- }
75
+ @apply rounded-lg
76
+ border
77
+ border-neutral-200
78
+ text-neutral-800
79
+ dark:border-neutral-900
80
+ dark:text-neutral-200;
81
+
87
82
  &:hover:not([aria-disabled='true']) {
88
- background-color: var(--color-neutral-200, #e9edf0);
89
- color: var(--color-neutral-800, #556066);
90
- &:where([data-theme=dark], [data-theme=dark] *) {
91
- background-color: var(--color-neutral-900, #2c3437);
92
- }
93
- &:where([data-theme=dark], [data-theme=dark] *) {
94
- color: var(--color-neutral-200, #e9edf0);
95
- }
83
+ @apply bg-neutral-200
84
+ text-neutral-800
85
+ dark:bg-neutral-900
86
+ dark:text-neutral-200;
96
87
  }
88
+
97
89
  &[aria-disabled='true'] {
98
- background-color: transparent;
99
- opacity: 50%;
90
+ @apply bg-transparent
91
+ opacity-50;
100
92
  }
93
+
101
94
  &:focus {
102
- background-color: var(--color-neutral-100, #f6f7f9);
103
- color: var(--color-neutral-800, #556066);
104
- &:where([data-theme=dark], [data-theme=dark] *) {
105
- background-color: var(--color-neutral-900, #2c3437);
106
- }
107
- &:where([data-theme=dark], [data-theme=dark] *) {
108
- color: var(--color-neutral-200, #e9edf0);
109
- }
95
+ @apply bg-neutral-100
96
+ text-neutral-800
97
+ dark:bg-neutral-900
98
+ dark:text-neutral-200;
110
99
  }
111
100
  }
101
+
112
102
  &.special {
113
- border-radius: var(--radius-lg, 0.5rem);
114
- border-style: var(--tw-border-style);
115
- border-width: 1px;
116
- border-color: color-mix(in srgb, #417e38 30%, transparent);
117
- @supports (color: color-mix(in lab, red, red)) {
118
- border-color: color-mix(in oklab, var(--color-green-600, #417e38) 30%, transparent);
119
- }
120
- background-color: color-mix(in srgb, #417e38 10%, transparent);
121
- @supports (color: color-mix(in lab, red, red)) {
122
- background-color: color-mix(in oklab, var(--color-green-600, #417e38) 10%, transparent);
123
- }
124
- color: var(--color-white, #fff);
125
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in srgb, #101828 5%, transparent));
126
- @supports (color: color-mix(in lab, red, red)) {
127
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in oklab, var(--color-shadow, #101828) 5%, transparent));
128
- }
129
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
130
- &::before {
131
- content: var(--tw-content);
132
- position: absolute;
133
- }
134
- &::before {
135
- content: var(--tw-content);
136
- top: calc(var(--spacing, 0.25rem)*0);
137
- }
138
- &::before {
139
- content: var(--tw-content);
140
- right: calc(var(--spacing, 0.25rem)*0);
141
- }
142
- &::before {
143
- content: var(--tw-content);
144
- left: calc(var(--spacing, 0.25rem)*0);
145
- }
146
- &::before {
147
- content: var(--tw-content);
148
- z-index: -10;
149
- }
150
- &::before {
151
- content: var(--tw-content);
152
- margin-inline: auto;
153
- }
154
- &::before {
155
- content: var(--tw-content);
156
- height: 100%;
157
- }
158
- &::before {
159
- content: var(--tw-content);
160
- width: 100%;
161
- }
162
- &::before {
163
- content: var(--tw-content);
164
- background-image: radial-gradient( 8em circle at 50% 10px, var(--color-green-400), transparent 30% );
165
- }
166
- &::before {
167
- content: var(--tw-content);
168
- opacity: 30%;
169
- }
170
- &::before {
171
- content: var(--tw-content);
172
- --tw-content: '';
173
- content: var(--tw-content);
174
- }
175
- &::after {
176
- content: var(--tw-content);
177
- position: absolute;
178
- }
179
- &::after {
180
- content: var(--tw-content);
181
- top: -1px;
182
- }
183
- &::after {
184
- content: var(--tw-content);
185
- right: calc(var(--spacing, 0.25rem)*0);
186
- }
187
- &::after {
188
- content: var(--tw-content);
189
- left: calc(var(--spacing, 0.25rem)*0);
190
- }
191
- &::after {
192
- content: var(--tw-content);
193
- margin-inline: auto;
194
- }
195
- &::after {
196
- content: var(--tw-content);
197
- height: 1px;
198
- }
199
- &::after {
200
- content: var(--tw-content);
201
- width: 40%;
202
- }
203
- &::after {
204
- content: var(--tw-content);
205
- --tw-gradient-position: to right in oklab;
206
- background-image: linear-gradient(var(--tw-gradient-stops));
207
- }
208
- &::after {
209
- content: var(--tw-content);
210
- --tw-gradient-from: color-mix(in srgb, #417e38 0%, transparent);
211
- @supports (color: color-mix(in lab, red, red)) {
212
- --tw-gradient-from: color-mix(in oklab, var(--color-green-600, #417e38) 0%, transparent);
213
- }
214
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
215
- }
216
- &::after {
217
- content: var(--tw-content);
218
- --tw-gradient-via: var(--color-green-600, #417e38);
219
- --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);
220
- --tw-gradient-stops: var(--tw-gradient-via-stops);
221
- }
222
- &::after {
223
- content: var(--tw-content);
224
- --tw-gradient-to: color-mix(in srgb, #417e38 0%, transparent);
225
- @supports (color: color-mix(in lab, red, red)) {
226
- --tw-gradient-to: color-mix(in oklab, var(--color-green-600, #417e38) 0%, transparent);
227
- }
228
- --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));
229
- }
230
- &::after {
231
- content: var(--tw-content);
232
- --tw-content: '';
233
- content: var(--tw-content);
234
- }
103
+ @apply before:bg-gradient-glow-backdrop
104
+ shadow-xs
105
+ rounded-lg
106
+ border
107
+ border-green-600/30
108
+ bg-green-600/10
109
+ text-white
110
+ before:absolute
111
+ before:left-0
112
+ before:right-0
113
+ before:top-0
114
+ before:-z-10
115
+ before:mx-auto
116
+ before:h-full
117
+ before:w-full
118
+ before:opacity-30
119
+ before:content-['']
120
+ after:absolute
121
+ after:-top-px
122
+ after:left-0
123
+ after:right-0
124
+ after:mx-auto
125
+ after:h-px
126
+ after:w-2/5
127
+ after:bg-gradient-to-r
128
+ after:from-green-600/0
129
+ after:via-green-600
130
+ after:to-green-600/0
131
+ after:content-[''];
132
+
235
133
  &[aria-disabled='true'] {
236
- opacity: 50%;
134
+ @apply opacity-50;
237
135
  }
136
+
238
137
  &:hover:not([aria-disabled='true']) {
239
- background-color: color-mix(in srgb, #417e38 20%, transparent);
240
- @supports (color: color-mix(in lab, red, red)) {
241
- background-color: color-mix(in oklab, var(--color-green-600, #417e38) 20%, transparent);
242
- }
138
+ @apply bg-green-600/20;
243
139
  }
140
+
244
141
  &:focus {
245
- background-color: color-mix(in srgb, #417e38 20%, transparent);
246
- @supports (color: color-mix(in lab, red, red)) {
247
- background-color: color-mix(in oklab, var(--color-green-600, #417e38) 20%, transparent);
248
- }
142
+ @apply bg-green-600/20;
249
143
  }
250
144
  }
251
145
  }
252
- @property --tw-font-weight {
253
- syntax: "*";
254
- inherits: false;
255
- }
256
- @property --tw-border-style {
257
- syntax: "*";
258
- inherits: false;
259
- initial-value: solid;
260
- }
261
- @property --tw-shadow {
262
- syntax: "*";
263
- inherits: false;
264
- initial-value: 0 0 #0000;
265
- }
266
- @property --tw-shadow-color {
267
- syntax: "*";
268
- inherits: false;
269
- }
270
- @property --tw-shadow-alpha {
271
- syntax: "<percentage>";
272
- inherits: false;
273
- initial-value: 100%;
274
- }
275
- @property --tw-inset-shadow {
276
- syntax: "*";
277
- inherits: false;
278
- initial-value: 0 0 #0000;
279
- }
280
- @property --tw-inset-shadow-color {
281
- syntax: "*";
282
- inherits: false;
283
- }
284
- @property --tw-inset-shadow-alpha {
285
- syntax: "<percentage>";
286
- inherits: false;
287
- initial-value: 100%;
288
- }
289
- @property --tw-ring-color {
290
- syntax: "*";
291
- inherits: false;
292
- }
293
- @property --tw-ring-shadow {
294
- syntax: "*";
295
- inherits: false;
296
- initial-value: 0 0 #0000;
297
- }
298
- @property --tw-inset-ring-color {
299
- syntax: "*";
300
- inherits: false;
301
- }
302
- @property --tw-inset-ring-shadow {
303
- syntax: "*";
304
- inherits: false;
305
- initial-value: 0 0 #0000;
306
- }
307
- @property --tw-ring-inset {
308
- syntax: "*";
309
- inherits: false;
310
- }
311
- @property --tw-ring-offset-width {
312
- syntax: "<length>";
313
- inherits: false;
314
- initial-value: 0px;
315
- }
316
- @property --tw-ring-offset-color {
317
- syntax: "*";
318
- inherits: false;
319
- initial-value: #fff;
320
- }
321
- @property --tw-ring-offset-shadow {
322
- syntax: "*";
323
- inherits: false;
324
- initial-value: 0 0 #0000;
325
- }
326
- @property --tw-content {
327
- syntax: "*";
328
- initial-value: "";
329
- inherits: false;
330
- }
331
- @property --tw-gradient-position {
332
- syntax: "*";
333
- inherits: false;
334
- }
335
- @property --tw-gradient-from {
336
- syntax: "<color>";
337
- inherits: false;
338
- initial-value: #0000;
339
- }
340
- @property --tw-gradient-via {
341
- syntax: "<color>";
342
- inherits: false;
343
- initial-value: #0000;
344
- }
345
- @property --tw-gradient-to {
346
- syntax: "<color>";
347
- inherits: false;
348
- initial-value: #0000;
349
- }
350
- @property --tw-gradient-stops {
351
- syntax: "*";
352
- inherits: false;
353
- }
354
- @property --tw-gradient-via-stops {
355
- syntax: "*";
356
- inherits: false;
357
- }
358
- @property --tw-gradient-from-position {
359
- syntax: "<length-percentage>";
360
- inherits: false;
361
- initial-value: 0%;
362
- }
363
- @property --tw-gradient-via-position {
364
- syntax: "<length-percentage>";
365
- inherits: false;
366
- initial-value: 50%;
367
- }
368
- @property --tw-gradient-to-position {
369
- syntax: "<length-percentage>";
370
- inherits: false;
371
- initial-value: 100%;
372
- }
@@ -0,0 +1,67 @@
1
+ import { ArrowRightIcon } from '@heroicons/react/24/solid';
2
+ import type { Meta as MetaObj, StoryObj } from '@storybook/react';
3
+
4
+ import BaseButton from '#ui/Common/BaseButton';
5
+
6
+ type Story = StoryObj<typeof BaseButton>;
7
+ type Meta = MetaObj<typeof BaseButton>;
8
+
9
+ export const Neutral: Story = {
10
+ args: {
11
+ kind: 'neutral',
12
+ children: 'Download Node (LTS)',
13
+ disabled: false,
14
+ size: 'default',
15
+ },
16
+ };
17
+
18
+ export const Primary: Story = {
19
+ args: {
20
+ kind: 'primary',
21
+ children: 'Download Node (LTS)',
22
+ disabled: false,
23
+ size: 'default',
24
+ },
25
+ };
26
+
27
+ export const Secondary: Story = {
28
+ args: {
29
+ kind: 'secondary',
30
+ children: 'Download Node (LTS)',
31
+ disabled: false,
32
+ size: 'default',
33
+ },
34
+ };
35
+
36
+ export const Special: Story = {
37
+ args: {
38
+ kind: 'special',
39
+ children: 'Download Node (LTS)',
40
+ disabled: false,
41
+ size: 'default',
42
+ },
43
+ };
44
+
45
+ export const WithIcon: Story = {
46
+ args: {
47
+ kind: 'primary',
48
+ children: (
49
+ <>
50
+ Back to Home
51
+ <ArrowRightIcon />
52
+ </>
53
+ ),
54
+ disabled: false,
55
+ size: 'default',
56
+ },
57
+ };
58
+
59
+ export default {
60
+ component: BaseButton,
61
+ argTypes: {
62
+ size: {
63
+ options: ['default', 'small'],
64
+ control: { type: 'radio' },
65
+ },
66
+ },
67
+ } as Meta;
@@ -0,0 +1,59 @@
1
+ import classNames from 'classnames';
2
+ import type { FC, AnchorHTMLAttributes, ButtonHTMLAttributes } from 'react';
3
+
4
+ import type { LinkLike } from '#ui/types';
5
+
6
+ import styles from './index.module.css';
7
+
8
+ export type ButtonProps = (
9
+ | AnchorHTMLAttributes<HTMLAnchorElement>
10
+ | ButtonHTMLAttributes<HTMLButtonElement>
11
+ ) & {
12
+ kind?: 'neutral' | 'primary' | 'secondary' | 'special';
13
+ size?: 'default' | 'small';
14
+ disabled?: boolean;
15
+ as?: LinkLike;
16
+ };
17
+
18
+ const BaseButton: FC<ButtonProps> = ({
19
+ kind = 'primary',
20
+ size = 'default',
21
+ disabled = false,
22
+ className,
23
+ as: Component = 'a',
24
+ ...props
25
+ }) => {
26
+ if ('href' in props && Component) {
27
+ return (
28
+ <Component
29
+ role="button"
30
+ href={disabled ? undefined : props.href}
31
+ aria-disabled={disabled}
32
+ className={classNames(
33
+ styles.button,
34
+ styles[kind],
35
+ styles[size],
36
+ className
37
+ )}
38
+ tabIndex={disabled ? -1 : 0}
39
+ {...props}
40
+ />
41
+ );
42
+ }
43
+
44
+ return (
45
+ <button
46
+ disabled={disabled}
47
+ className={classNames(
48
+ styles.button,
49
+ styles[kind],
50
+ styles[size],
51
+ className
52
+ )}
53
+ type="button"
54
+ {...(props as ButtonHTMLAttributes<HTMLButtonElement>)}
55
+ />
56
+ );
57
+ };
58
+
59
+ export default BaseButton;