@node-core/ui-components 1.0.1-ed840c2c5b3a7f7a58ec6d75280c2b34129fb5dc → 1.0.1-f1580a0a3365d3d4d0236b80ce9eff447d2890dd

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 (270) hide show
  1. package/Common/AlertBox/index.js +5 -0
  2. package/Common/AlertBox/index.module.css +2 -76
  3. package/Common/AvatarGroup/Avatar/index.js +11 -0
  4. package/Common/AvatarGroup/Avatar/index.module.css +2 -40
  5. package/Common/AvatarGroup/Overlay/index.js +6 -0
  6. package/Common/AvatarGroup/Overlay/index.module.css +2 -31
  7. package/Common/AvatarGroup/index.js +21 -0
  8. package/Common/AvatarGroup/index.module.css +2 -21
  9. package/Common/Badge/index.js +5 -0
  10. package/Common/Badge/index.module.css +2 -38
  11. package/Common/BadgeGroup/index.js +6 -0
  12. package/Common/BadgeGroup/index.module.css +2 -77
  13. package/Common/Banner/index.js +4 -0
  14. package/Common/Banner/index.module.css +2 -42
  15. package/Common/BaseActiveLink/index.js +14 -0
  16. package/Common/BaseButton/index.js +10 -0
  17. package/Common/BaseButton/index.module.css +2 -142
  18. package/Common/BaseCodeBox/index.js +50 -0
  19. package/Common/BaseCodeBox/index.module.css +2 -78
  20. package/Common/BaseCrossLink/index.js +12 -0
  21. package/Common/BaseCrossLink/index.module.css +2 -51
  22. package/Common/BaseLinkTabs/index.js +5 -0
  23. package/Common/BaseLinkTabs/index.module.css +2 -43
  24. package/Common/BasePagination/Ellipsis/index.js +4 -0
  25. package/Common/BasePagination/Ellipsis/index.module.css +2 -10
  26. package/Common/BasePagination/PaginationListItem/index.js +6 -0
  27. package/Common/BasePagination/PaginationListItem/index.module.css +2 -27
  28. package/Common/BasePagination/PrevNextArrow.js +7 -0
  29. package/Common/BasePagination/index.js +10 -0
  30. package/Common/BasePagination/index.module.css +2 -39
  31. package/Common/BasePagination/useGetPageElements.js +77 -0
  32. package/Common/Blockquote/index.js +4 -0
  33. package/Common/Blockquote/index.module.css +2 -29
  34. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.js +9 -0
  35. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.module.css +2 -5
  36. package/Common/Breadcrumbs/BreadcrumbItem/index.js +6 -0
  37. package/Common/Breadcrumbs/BreadcrumbItem/index.module.css +2 -41
  38. package/Common/Breadcrumbs/BreadcrumbLink/index.js +5 -0
  39. package/Common/Breadcrumbs/BreadcrumbLink/index.module.css +2 -22
  40. package/Common/Breadcrumbs/BreadcrumbRoot/index.js +4 -0
  41. package/Common/Breadcrumbs/BreadcrumbRoot/index.module.css +2 -9
  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 -56
  48. package/Common/DataTag/index.js +18 -0
  49. package/Common/DataTag/index.module.css +2 -56
  50. package/Common/GlowingBackdrop/index.js +5 -0
  51. package/Common/GlowingBackdrop/index.module.css +2 -32
  52. package/Common/LanguageDropDown/index.js +11 -0
  53. package/Common/LanguageDropDown/index.module.css +2 -53
  54. package/Common/Modal/index.js +10 -0
  55. package/Common/Modal/index.module.css +2 -79
  56. package/Common/NodejsLogo/index.js +7 -0
  57. package/Common/NodejsLogo/index.module.css +2 -6
  58. package/Common/Notification/index.js +6 -0
  59. package/Common/Notification/index.module.css +2 -20
  60. package/Common/Preview/index.js +7 -0
  61. package/Common/Preview/index.module.css +2 -79
  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 -161
  66. package/Common/Separator/index.js +7 -0
  67. package/Common/Separator/index.module.css +2 -16
  68. package/Common/Skeleton/index.js +18 -0
  69. package/Common/Skeleton/index.module.css +2 -30
  70. package/Common/Tabs/index.js +6 -0
  71. package/Common/Tabs/index.module.css +2 -54
  72. package/Common/ThemeToggle/index.js +7 -0
  73. package/Common/ThemeToggle/index.module.css +2 -15
  74. package/Common/Tooltip/index.js +8 -0
  75. package/Common/Tooltip/index.module.css +2 -43
  76. package/Containers/Article/index.js +4 -0
  77. package/Containers/Article/index.module.css +2 -70
  78. package/Containers/Footer/index.js +21 -0
  79. package/Containers/Footer/index.module.css +2 -46
  80. package/Containers/MetaBar/index.js +12 -0
  81. package/Containers/MetaBar/index.module.css +2 -91
  82. package/Containers/NavBar/NavItem/index.js +7 -0
  83. package/Containers/NavBar/NavItem/index.module.css +2 -60
  84. package/Containers/NavBar/index.js +18 -0
  85. package/Containers/NavBar/index.module.css +2 -125
  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 -26
  89. package/Containers/Sidebar/SidebarItem/index.js +11 -0
  90. package/Containers/Sidebar/SidebarItem/index.module.css +2 -35
  91. package/Containers/Sidebar/index.js +15 -0
  92. package/Containers/Sidebar/index.module.css +2 -31
  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/Icons/InstallationMethod/{index.ts → 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/Icons/OperatingSystem/{index.ts → 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/Icons/PackageManager/{index.ts → 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/Icons/Social/{index.ts → 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 +10 -55
  127. package/stylelint/one-utility-class-per-line.mjs +34 -50
  128. package/stylelint/utils.mjs +19 -25
  129. package/styles/index.css +2 -38
  130. package/types.js +1 -0
  131. package/util/array.js +2 -0
  132. package/Common/AlertBox/index.stories.tsx +0 -73
  133. package/Common/AlertBox/index.tsx +0 -24
  134. package/Common/AvatarGroup/Avatar/index.stories.tsx +0 -22
  135. package/Common/AvatarGroup/Avatar/index.tsx +0 -67
  136. package/Common/AvatarGroup/Overlay/index.stories.tsx +0 -33
  137. package/Common/AvatarGroup/Overlay/index.tsx +0 -37
  138. package/Common/AvatarGroup/__tests__/index.test.jsx +0 -55
  139. package/Common/AvatarGroup/index.stories.tsx +0 -56
  140. package/Common/AvatarGroup/index.tsx +0 -83
  141. package/Common/Badge/index.stories.tsx +0 -38
  142. package/Common/Badge/index.tsx +0 -35
  143. package/Common/BadgeGroup/index.stories.tsx +0 -35
  144. package/Common/BadgeGroup/index.tsx +0 -35
  145. package/Common/Banner/index.stories.tsx +0 -29
  146. package/Common/Banner/index.tsx +0 -18
  147. package/Common/BaseActiveLink/__tests__/index.test.jsx +0 -52
  148. package/Common/BaseActiveLink/index.tsx +0 -34
  149. package/Common/BaseButton/index.stories.tsx +0 -67
  150. package/Common/BaseButton/index.tsx +0 -59
  151. package/Common/BaseCodeBox/index.stories.tsx +0 -39
  152. package/Common/BaseCodeBox/index.tsx +0 -122
  153. package/Common/BaseCrossLink/index.stories.tsx +0 -38
  154. package/Common/BaseCrossLink/index.tsx +0 -46
  155. package/Common/BaseLinkTabs/index.stories.tsx +0 -34
  156. package/Common/BaseLinkTabs/index.tsx +0 -53
  157. package/Common/BasePagination/Ellipsis/index.stories.tsx +0 -10
  158. package/Common/BasePagination/Ellipsis/index.tsx +0 -11
  159. package/Common/BasePagination/PaginationListItem/__tests__/index.test.jsx +0 -58
  160. package/Common/BasePagination/PaginationListItem/index.stories.tsx +0 -40
  161. package/Common/BasePagination/PaginationListItem/index.tsx +0 -39
  162. package/Common/BasePagination/PrevNextArrow.tsx +0 -15
  163. package/Common/BasePagination/__tests__/index.test.jsx +0 -180
  164. package/Common/BasePagination/index.stories.tsx +0 -67
  165. package/Common/BasePagination/index.tsx +0 -77
  166. package/Common/BasePagination/useGetPageElements.tsx +0 -132
  167. package/Common/Blockquote/index.stories.tsx +0 -45
  168. package/Common/Blockquote/index.tsx +0 -11
  169. package/Common/Breadcrumbs/BreadcrumbHomeLink/index.tsx +0 -30
  170. package/Common/Breadcrumbs/BreadcrumbItem/index.tsx +0 -42
  171. package/Common/Breadcrumbs/BreadcrumbLink/index.tsx +0 -37
  172. package/Common/Breadcrumbs/BreadcrumbRoot/index.tsx +0 -20
  173. package/Common/Breadcrumbs/BreadcrumbTruncatedItem/index.tsx +0 -9
  174. package/Common/Breadcrumbs/index.stories.tsx +0 -94
  175. package/Common/Breadcrumbs/index.tsx +0 -81
  176. package/Common/CodeTabs/index.stories.tsx +0 -73
  177. package/Common/CodeTabs/index.tsx +0 -16
  178. package/Common/DataTag/index.stories.tsx +0 -40
  179. package/Common/DataTag/index.tsx +0 -39
  180. package/Common/GlowingBackdrop/index.stories.tsx +0 -10
  181. package/Common/GlowingBackdrop/index.tsx +0 -13
  182. package/Common/LanguageDropDown/index.stories.tsx +0 -19
  183. package/Common/LanguageDropDown/index.tsx +0 -56
  184. package/Common/Modal/index.stories.tsx +0 -32
  185. package/Common/Modal/index.tsx +0 -48
  186. package/Common/NodejsLogo/index.stories.tsx +0 -14
  187. package/Common/NodejsLogo/index.tsx +0 -26
  188. package/Common/Notification/index.stories.tsx +0 -36
  189. package/Common/Notification/index.tsx +0 -34
  190. package/Common/Preview/index.stories.tsx +0 -44
  191. package/Common/Preview/index.tsx +0 -25
  192. package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.module.css +0 -47
  193. package/Common/ProgressionSidebar/ProgressionSidebarGroup/index.tsx +0 -35
  194. package/Common/ProgressionSidebar/ProgressionSidebarIcon/index.tsx +0 -16
  195. package/Common/ProgressionSidebar/ProgressionSidebarItem/index.module.css +0 -39
  196. package/Common/ProgressionSidebar/ProgressionSidebarItem/index.tsx +0 -32
  197. package/Common/ProgressionSidebar/index.module.css +0 -30
  198. package/Common/ProgressionSidebar/index.stories.tsx +0 -79
  199. package/Common/ProgressionSidebar/index.tsx +0 -59
  200. package/Common/Select/__tests__/index.test.jsx +0 -67
  201. package/Common/Select/index.stories.tsx +0 -111
  202. package/Common/Select/index.tsx +0 -187
  203. package/Common/Separator/index.stories.tsx +0 -32
  204. package/Common/Separator/index.tsx +0 -27
  205. package/Common/Skeleton/index.tsx +0 -39
  206. package/Common/Tabs/__tests__/index.test.jsx +0 -52
  207. package/Common/Tabs/index.stories.tsx +0 -50
  208. package/Common/Tabs/index.tsx +0 -54
  209. package/Common/ThemeToggle/__tests__/index.test.jsx +0 -35
  210. package/Common/ThemeToggle/index.stories.tsx +0 -10
  211. package/Common/ThemeToggle/index.tsx +0 -15
  212. package/Common/Tooltip/index.stories.tsx +0 -73
  213. package/Common/Tooltip/index.tsx +0 -48
  214. package/Containers/Article/index.stories.tsx +0 -39
  215. package/Containers/Article/index.tsx +0 -9
  216. package/Containers/Footer/index.stories.tsx +0 -27
  217. package/Containers/Footer/index.tsx +0 -95
  218. package/Containers/MetaBar/__tests__/index.test.jsx +0 -63
  219. package/Containers/MetaBar/index.stories.tsx +0 -80
  220. package/Containers/MetaBar/index.tsx +0 -72
  221. package/Containers/NavBar/NavItem/index.stories.tsx +0 -38
  222. package/Containers/NavBar/NavItem/index.tsx +0 -44
  223. package/Containers/NavBar/index.stories.tsx +0 -45
  224. package/Containers/NavBar/index.tsx +0 -94
  225. package/Containers/Sidebar/SidebarGroup/index.stories.tsx +0 -36
  226. package/Containers/Sidebar/SidebarGroup/index.tsx +0 -30
  227. package/Containers/Sidebar/SidebarItem/index.stories.tsx +0 -15
  228. package/Containers/Sidebar/SidebarItem/index.tsx +0 -26
  229. package/Containers/Sidebar/index.stories.tsx +0 -84
  230. package/Containers/Sidebar/index.tsx +0 -58
  231. package/Icons/HexagonGrid.stories.tsx +0 -10
  232. package/Icons/HexagonGrid.tsx +0 -1434
  233. package/Icons/InstallationMethod/Choco.tsx +0 -78
  234. package/Icons/InstallationMethod/Devbox.tsx +0 -21
  235. package/Icons/InstallationMethod/Docker.tsx +0 -20
  236. package/Icons/InstallationMethod/FNM.tsx +0 -132
  237. package/Icons/InstallationMethod/Homebrew.tsx +0 -69
  238. package/Icons/InstallationMethod/N.tsx +0 -32
  239. package/Icons/InstallationMethod/NVM.tsx +0 -63
  240. package/Icons/InstallationMethod/Volta.tsx +0 -34
  241. package/Icons/Logos/JsGreen.tsx +0 -24
  242. package/Icons/Logos/JsWhite.tsx +0 -37
  243. package/Icons/Logos/Nodejs.tsx +0 -188
  244. package/Icons/Logos/NodejsStackedBlack.tsx +0 -98
  245. package/Icons/Logos/NodejsStackedDark.tsx +0 -124
  246. package/Icons/Logos/NodejsStackedLight.tsx +0 -123
  247. package/Icons/Logos/NodejsStackedWhite.tsx +0 -98
  248. package/Icons/Logos/index.ts +0 -17
  249. package/Icons/OperatingSystem/AIX.tsx +0 -46
  250. package/Icons/OperatingSystem/Apple.tsx +0 -23
  251. package/Icons/OperatingSystem/Linux.tsx +0 -969
  252. package/Icons/OperatingSystem/Microsoft.tsx +0 -19
  253. package/Icons/PackageManager/Npm.tsx +0 -21
  254. package/Icons/PackageManager/Pnpm.tsx +0 -22
  255. package/Icons/PackageManager/Yarn.tsx +0 -22
  256. package/Icons/Social/Bluesky.tsx +0 -19
  257. package/Icons/Social/Discord.tsx +0 -20
  258. package/Icons/Social/GitHub.tsx +0 -16
  259. package/Icons/Social/LinkedIn.tsx +0 -16
  260. package/Icons/Social/Mastodon.tsx +0 -36
  261. package/Icons/Social/Slack.tsx +0 -31
  262. package/Icons/Social/X.tsx +0 -16
  263. package/MDX/CodeTabs.tsx +0 -47
  264. package/stylelint/__tests__/index.test.mjs +0 -80
  265. package/styles/animations.css +0 -47
  266. package/styles/base.css +0 -17
  267. package/styles/effects.css +0 -12
  268. package/styles/markdown.css +0 -173
  269. package/styles/theme.css +0 -175
  270. package/types.ts +0 -25
@@ -1,56 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .root {
4
- > [role='tabpanel'] > :first-child {
5
- @apply rounded-t-none;
6
- }
7
-
8
- > div:nth-of-type(1) {
9
- @apply flex
10
- rounded-t
11
- border-x
12
- border-t
13
- border-neutral-900
14
- bg-neutral-950
15
- px-2
16
- pt-3
17
- md:px-4;
18
-
19
- .trigger {
20
- @apply border-b
21
- border-b-transparent
22
- px-1
23
- text-neutral-200;
24
-
25
- &[data-state='active'] {
26
- @apply border-b-green-400
27
- text-green-400;
28
- }
29
- }
30
-
31
- .link {
32
- @apply hidden
33
- items-center
34
- gap-2
35
- text-center
36
- text-neutral-200
37
- motion-safe:transition-colors
38
- lg:flex;
39
-
40
- & > .icon {
41
- @apply size-4
42
- text-neutral-300;
43
- }
44
-
45
- &:is(:link, :visited) {
46
- &:hover {
47
- @apply text-neutral-400;
48
-
49
- & > .icon {
50
- @apply text-neutral-600;
51
- }
52
- }
53
- }
54
- }
55
- }
56
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .root>[role=tabpanel]>:first-child{border-top-left-radius:0;border-top-right-radius:0}.root>div:first-of-type{border-inline-style:var(--tw-border-style);border-inline-width:1px;border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-neutral-900,#2c3437);background-color:var(--color-neutral-950,#0d121c);padding-inline:calc(var(--spacing,.25rem)*2);padding-top:calc(var(--spacing,.25rem)*3);border-top-left-radius:.25rem;border-top-right-radius:.25rem;display:flex}@media (min-width:48rem){.root>div:first-of-type{padding-inline:calc(var(--spacing,.25rem)*4)}}.root>div:first-of-type .trigger{border-bottom-style:var(--tw-border-style);padding-inline:calc(var(--spacing,.25rem)*1);color:var(--color-neutral-200,#e9edf0);border-bottom-width:1px;border-bottom-color:#0000}.root>div:first-of-type .trigger[data-state=active]{border-bottom-color:var(--color-green-400,#84ba64);color:var(--color-green-400,#84ba64)}.root>div:first-of-type .link{align-items:center;gap:calc(var(--spacing,.25rem)*2);text-align:center;color:var(--color-neutral-200,#e9edf0);display:none}@media (prefers-reduced-motion:no-preference){.root>div:first-of-type .link{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4,0,.2,1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}}@media (min-width:64rem){.root>div:first-of-type .link{display:flex}}.root>div:first-of-type .link>.icon{width:calc(var(--spacing,.25rem)*4);height:calc(var(--spacing,.25rem)*4);color:var(--color-neutral-300,#d9e1e4)}.root>div:first-of-type .link:is(:link,:visited):hover{color:var(--color-neutral-400,#cbd4d9)}.root>div:first-of-type .link:is(:link,:visited):hover>.icon{color:var(--color-neutral-600,#929fa5)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import styles from './index.module.css';
4
+ // These symbols match up with the types used in
5
+ // node core, and the ones defined at
6
+ // https://github.com/nodejs/api-docs-tooling/blob/main/src/types.d.ts#L22 (`HeadingMetadataEntry['type']`)
7
+ const symbolMap = {
8
+ event: 'E',
9
+ method: 'M',
10
+ property: 'P',
11
+ class: 'C',
12
+ module: 'M',
13
+ classMethod: 'S',
14
+ global: 'G',
15
+ ctor: 'C',
16
+ };
17
+ const DataTag = ({ kind, size = 'md' }) => (_jsx("div", { className: classNames(styles.dataTag, styles[size], styles[kind]), children: _jsx("span", { children: symbolMap[kind] }) }));
18
+ export default DataTag;
@@ -1,56 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .dataTag {
4
- @apply flex
5
- items-center
6
- justify-center
7
- rounded-full
8
- font-semibold
9
- text-white;
10
-
11
- &.lg {
12
- @apply size-12
13
- text-2xl;
14
- }
15
-
16
- &.md {
17
- @apply size-10
18
- text-xl;
19
- }
20
-
21
- &.sm {
22
- @apply size-8;
23
- }
24
-
25
- &.event {
26
- @apply bg-accent1-600;
27
- }
28
-
29
- &.method {
30
- @apply bg-info-600;
31
- }
32
-
33
- &.property {
34
- @apply bg-green-600;
35
- }
36
-
37
- &.class {
38
- @apply bg-warning-600;
39
- }
40
-
41
- &.module {
42
- @apply bg-red-600;
43
- }
44
-
45
- &.classMethod {
46
- @apply bg-blue-600;
47
- }
48
-
49
- &.ctor {
50
- @apply bg-accent2-600;
51
- }
52
-
53
- &.global {
54
- @apply bg-amber-600;
55
- }
56
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .dataTag{--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex}.dataTag.lg{width:calc(var(--spacing,.25rem)*12);height:calc(var(--spacing,.25rem)*12);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,1.33333))}.dataTag.md{width:calc(var(--spacing,.25rem)*10);height:calc(var(--spacing,.25rem)*10);font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,1.4))}.dataTag.sm{width:calc(var(--spacing,.25rem)*8);height:calc(var(--spacing,.25rem)*8)}.dataTag.event{background-color:var(--color-accent1-600,#9756d6)}.dataTag.method{background-color:var(--color-info-600,#0c7bb3)}.dataTag.property{background-color:var(--color-green-600,#417e38)}.dataTag.class{background-color:var(--color-warning-600,#ae5f00)}.dataTag.module{background-color:var(--color-red-600,oklch(57.7% .245 27.325))}.dataTag.classMethod{background-color:var(--color-blue-600,oklch(54.6% .245 262.881))}.dataTag.ctor{background-color:var(--color-accent2-600,#d6246e)}.dataTag.global{background-color:var(--color-amber-600,oklch(66.6% .179 58.318))}@property --tw-font-weight{syntax:"*";inherits:false}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import HexagonGrid from '#ui/Icons/HexagonGrid';
3
+ import styles from './index.module.css';
4
+ const GlowingBackdrop = () => (_jsx("div", { className: styles.glowingBackdrop, children: _jsx(HexagonGrid, {}) }));
5
+ export default GlowingBackdrop;
@@ -1,32 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .glowingBackdrop {
4
- @apply absolute
5
- left-0
6
- top-0
7
- -z-10
8
- size-full
9
- opacity-50
10
- after:absolute
11
- after:inset-0
12
- after:m-auto
13
- after:aspect-square
14
- after:w-[300px]
15
- after:rounded-full
16
- after:bg-green-300
17
- after:blur-[120px]
18
- after:content-['']
19
- md:opacity-100
20
- dark:after:bg-green-700;
21
-
22
- svg {
23
- @apply absolute
24
- inset-0
25
- m-auto
26
- aspect-[1.67]
27
- max-w-[1004px]
28
- object-cover
29
- text-neutral-300
30
- dark:text-neutral-900/75;
31
- }
32
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .glowingBackdrop{top:calc(var(--spacing,.25rem)*0);left:calc(var(--spacing,.25rem)*0);z-index:-10;opacity:.5;width:100%;height:100%;position:absolute}.glowingBackdrop:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing,.25rem)*0);content:var(--tw-content);content:var(--tw-content);aspect-ratio:1;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--color-green-300,#99cc7d);content:var(--tw-content);--tw-blur:blur(120px);width:300px;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,);content:var(--tw-content);--tw-content:"";content:var(--tw-content);border-radius:3.40282e38px;margin:auto;position:absolute}@media (min-width:48rem){.glowingBackdrop{opacity:1}}.glowingBackdrop:where([data-theme=dark],[data-theme=dark] *):after{content:var(--tw-content);background-color:var(--color-green-700,#2c682c)}.glowingBackdrop svg{inset:calc(var(--spacing,.25rem)*0);aspect-ratio:1.67;object-fit:cover;max-width:1004px;color:var(--color-neutral-300,#d9e1e4);margin:auto;position:absolute}.glowingBackdrop svg:where([data-theme=dark],[data-theme=dark] *){color:#2c3437bf}@supports (color:color-mix(in lab, red, red)){.glowingBackdrop svg:where([data-theme=dark],[data-theme=dark] *){color:color-mix(in oklab,var(--color-neutral-900,#2c3437)75%,transparent)}}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { LanguageIcon } from '@heroicons/react/24/outline';
3
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
4
+ import classNames from 'classnames';
5
+ import styles from './index.module.css';
6
+ const LanguageDropdown = ({ onChange = () => { }, currentLanguage, availableLanguages, ariaLabel, }) => {
7
+ return (_jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsx("button", { className: styles.languageDropdown, "aria-label": ariaLabel, children: _jsx(LanguageIcon, { height: "20" }) }) }), _jsx(DropdownMenu.Portal, { children: _jsx(DropdownMenu.Content, { align: "start", className: styles.dropDownContent, sideOffset: 5, children: _jsx("div", { children: availableLanguages.map(({ name, code, localName }) => (_jsx(DropdownMenu.Item, { onClick: () => onChange({ name, code, localName }), className: classNames(styles.dropDownItem, {
8
+ [styles.currentDropDown]: code === currentLanguage,
9
+ }), children: localName }, code))) }) }) })] }));
10
+ };
11
+ export default LanguageDropdown;
@@ -1,53 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .languageDropdown {
4
- @apply h-9
5
- w-9
6
- rounded-md
7
- p-2
8
- text-neutral-700
9
- motion-safe:transition-colors
10
- dark:text-neutral-300;
11
-
12
- &:hover {
13
- @apply bg-neutral-100
14
- dark:bg-neutral-900;
15
- }
16
- }
17
-
18
- .dropDownContent {
19
- @apply max-h-80
20
- w-48
21
- overflow-hidden
22
- rounded-sm
23
- border
24
- border-neutral-200
25
- bg-white
26
- shadow-lg
27
- dark:border-neutral-900
28
- dark:bg-neutral-950;
29
-
30
- > div {
31
- @apply max-h-80
32
- w-48
33
- overflow-y-auto;
34
- }
35
- }
36
-
37
- .dropDownItem {
38
- @apply outline-hidden
39
- cursor-pointer
40
- px-2.5
41
- py-1.5
42
- text-sm
43
- font-medium
44
- text-neutral-800
45
- data-[highlighted]:bg-green-600
46
- data-[highlighted]:text-white
47
- dark:text-white;
48
- }
49
-
50
- .currentDropDown {
51
- @apply bg-green-600
52
- text-white;
53
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .languageDropdown{height:calc(var(--spacing,.25rem)*9);width:calc(var(--spacing,.25rem)*9);border-radius:var(--radius-md,.375rem);padding:calc(var(--spacing,.25rem)*2);color:var(--color-neutral-700,#6e7b83)}@media (prefers-reduced-motion:no-preference){.languageDropdown{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4,0,.2,1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}}.languageDropdown:where([data-theme=dark],[data-theme=dark] *){color:var(--color-neutral-300,#d9e1e4)}.languageDropdown:hover{background-color:var(--color-neutral-100,#f6f7f9)}.languageDropdown:hover:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-900,#2c3437)}.dropDownContent{max-height:calc(var(--spacing,.25rem)*80);width:calc(var(--spacing,.25rem)*48);border-radius:var(--radius-sm,.25rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-200,#e9edf0);background-color:var(--color-white,#fff);--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#10182808),0px 12px 16px -4px var(--tw-shadow-color,#10182814);overflow:hidden}@supports (color:color-mix(in lab, red, red)){.dropDownContent{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,color-mix(in oklab,var(--color-shadow,#101828)3%,transparent)),0px 12px 16px -4px var(--tw-shadow-color,color-mix(in oklab,var(--color-shadow,#101828)8%,transparent))}}.dropDownContent{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dropDownContent:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-neutral-900,#2c3437);background-color:var(--color-neutral-950,#0d121c)}.dropDownContent>div{max-height:calc(var(--spacing,.25rem)*80);width:calc(var(--spacing,.25rem)*48);overflow-y:auto}.dropDownItem{cursor:pointer;padding-inline:calc(var(--spacing,.25rem)*2.5);padding-block:calc(var(--spacing,.25rem)*1.5);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,1.42857));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-neutral-800,#556066);--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.dropDownItem{outline-offset:2px;outline:2px solid #0000}}.dropDownItem[data-highlighted]{background-color:var(--color-green-600,#417e38);color:var(--color-white,#fff)}.dropDownItem:where([data-theme=dark],[data-theme=dark] *){color:var(--color-white,#fff)}.currentDropDown{background-color:var(--color-green-600,#417e38);color:var(--color-white,#fff)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { XMarkIcon } from '@heroicons/react/24/outline';
4
+ import * as Dialog from '@radix-ui/react-dialog';
5
+ import styles from './index.module.css';
6
+ const Modal = ({ children, open = false, onOpenChange = () => { }, }) => (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsx(Dialog.Portal, { children: _jsx(Dialog.Overlay, { className: styles.overlay, children: _jsxs(Dialog.Content, { className: styles.content, children: [_jsx(Dialog.Trigger, { className: styles.close, children: _jsx(XMarkIcon, {}) }), children, _jsx(Dialog.Close, {})] }) }) }) }));
7
+ const Title = ({ children }) => (_jsx(Dialog.Title, { className: styles.title, children: children }));
8
+ const Description = ({ children }) => (_jsx(Dialog.Description, { className: styles.description, children: children }));
9
+ const Content = ({ children }) => (_jsx("main", { className: styles.wrapper, children: children }));
10
+ export { Modal, Title, Description, Content };
@@ -1,79 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .overlay {
4
- @apply fixed
5
- inset-0
6
- flex
7
- justify-center
8
- bg-white/40
9
- backdrop-blur-[2px]
10
- dark:bg-neutral-950/40;
11
-
12
- .content {
13
- @apply xs:p-6
14
- relative
15
- m-4
16
- inline-flex
17
- w-full
18
- max-w-3xl
19
- flex-col
20
- overflow-y-auto
21
- rounded
22
- border
23
- border-neutral-200
24
- bg-white
25
- p-8
26
- focus:outline-none
27
- sm:my-20
28
- xl:p-12
29
- dark:bg-neutral-950;
30
- }
31
-
32
- .close {
33
- @apply absolute
34
- right-3
35
- top-3
36
- block
37
- size-7
38
- cursor-pointer
39
- rounded-sm
40
- p-1
41
- hover:bg-neutral-100
42
- focus:outline-none
43
- focus:ring-2
44
- focus:ring-neutral-200
45
- dark:hover:bg-neutral-900
46
- dark:focus:ring-neutral-900;
47
- }
48
-
49
- .title {
50
- @apply mb-2
51
- text-3xl
52
- font-semibold
53
- text-neutral-900
54
- dark:text-white;
55
- }
56
-
57
- .description {
58
- @apply font-regular
59
- mb-4
60
- text-lg
61
- text-neutral-800
62
- dark:text-neutral-200;
63
- }
64
-
65
- .wrapper {
66
- @apply flex
67
- flex-col
68
- gap-4;
69
-
70
- pre {
71
- @apply overflow-auto;
72
- }
73
-
74
- code,
75
- a {
76
- @apply break-words;
77
- }
78
- }
79
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .overlay{inset:calc(var(--spacing,.25rem)*0);background-color:#fff6;justify-content:center;display:flex;position:fixed}@supports (color:color-mix(in lab, red, red)){.overlay{background-color:color-mix(in oklab,var(--color-white,#fff)40%,transparent)}}.overlay{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.overlay:where([data-theme=dark],[data-theme=dark] *){background-color:#0d121c66}@supports (color:color-mix(in lab, red, red)){.overlay:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-neutral-950,#0d121c)40%,transparent)}}.overlay .content{margin:calc(var(--spacing,.25rem)*4);width:100%;max-width:var(--container-3xl,48rem);gap:calc(var(--spacing,.25rem)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-200,#e9edf0);background-color:var(--color-white,#fff);padding:calc(var(--spacing,.25rem)*8);border-radius:.25rem;flex-direction:column;display:inline-flex;position:relative;overflow-y:auto}.overlay .content:focus{--tw-outline-style:none;outline-style:none}@media (min-width:670px){.overlay .content{padding:calc(var(--spacing,.25rem)*6)}}@media (min-width:40rem){.overlay .content{margin-block:calc(var(--spacing,.25rem)*20)}}@media (min-width:80rem){.overlay .content{padding:calc(var(--spacing,.25rem)*12)}}.overlay .content:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-neutral-950,#0d121c)}.overlay .close{top:calc(var(--spacing,.25rem)*3);right:calc(var(--spacing,.25rem)*3);width:calc(var(--spacing,.25rem)*7);height:calc(var(--spacing,.25rem)*7);cursor:pointer;border-radius:var(--radius-sm,.25rem);padding:calc(var(--spacing,.25rem)*1);display:block;position:absolute}@media (hover:hover){.overlay .close:hover{background-color:var(--color-neutral-100,#f6f7f9)}}.overlay .close:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--color-neutral-200,#e9edf0);--tw-outline-style:none;outline-style:none}@media (hover:hover){.overlay .close:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-neutral-900,#2c3437)}}.overlay .close:where([data-theme=dark],[data-theme=dark] *):focus{--tw-ring-color:var(--color-neutral-900,#2c3437)}.overlay .title{font-size:var(--text-3xl,1.875rem);line-height:var(--tw-leading,var(--text-3xl--line-height,1.2));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-neutral-900,#2c3437)}.overlay .title:where([data-theme=dark],[data-theme=dark] *){color:var(--color-white,#fff)}.overlay .description{margin-bottom:calc(var(--spacing,.25rem)*2);font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,1.55556));--tw-font-weight:var(--font-weight-regular,400);font-weight:var(--font-weight-regular,400);color:var(--color-neutral-800,#556066)}.overlay .description:where([data-theme=dark],[data-theme=dark] *){color:var(--color-neutral-200,#e9edf0)}.overlay .wrapper{gap:calc(var(--spacing,.25rem)*4);flex-direction:column;display:flex}.overlay .wrapper pre{overflow:auto}.overlay .wrapper code,.overlay .wrapper a{overflow-wrap:break-word}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import NodejsIcon from '#ui/Icons/Logos/Nodejs';
3
+ import style from './index.module.css';
4
+ const NodejsLogo = props => {
5
+ return _jsx(NodejsIcon, { className: style.nodejsLogo, ...props });
6
+ };
7
+ export default NodejsLogo;
@@ -1,6 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .nodejsLogo {
4
- @apply h-6
5
- w-20;
6
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .nodejsLogo{height:calc(var(--spacing,.25rem)*6);width:calc(var(--spacing,.25rem)*20)}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as ToastPrimitive from '@radix-ui/react-toast';
3
+ import classNames from 'classnames';
4
+ import styles from './index.module.css';
5
+ const Notification = ({ open, duration = 5000, onChange, children, className, }) => (_jsx(ToastPrimitive.Root, { open: open, duration: duration, onOpenChange: onChange, className: classNames(styles.root, className), children: _jsx(ToastPrimitive.Title, { className: styles.message, children: children }) }));
6
+ export default Notification;
@@ -1,20 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .root {
4
- @apply m-6
5
- rounded-sm
6
- border
7
- border-neutral-200
8
- bg-white
9
- px-4
10
- py-3
11
- shadow-lg
12
- dark:border-neutral-800
13
- dark:bg-neutral-900;
14
- }
15
-
16
- .message {
17
- @apply font-medium
18
- text-green-600
19
- dark:text-white;
20
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .root{margin:calc(var(--spacing,.25rem)*6);border-radius:var(--radius-sm,.25rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-200,#e9edf0);background-color:var(--color-white,#fff);padding-inline:calc(var(--spacing,.25rem)*4);padding-block:calc(var(--spacing,.25rem)*3);--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,#10182808),0px 12px 16px -4px var(--tw-shadow-color,#10182814)}@supports (color:color-mix(in lab, red, red)){.root{--tw-shadow:0px 4px 6px -2px var(--tw-shadow-color,color-mix(in oklab,var(--color-shadow,#101828)3%,transparent)),0px 12px 16px -4px var(--tw-shadow-color,color-mix(in oklab,var(--color-shadow,#101828)8%,transparent))}}.root{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.root:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-neutral-800,#556066);background-color:var(--color-neutral-900,#2c3437)}.message{--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-green-600,#417e38)}.message:where([data-theme=dark],[data-theme=dark] *){color:var(--color-white,#fff)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ import HexagonGrid from '#ui/Icons/HexagonGrid';
4
+ import JsWhiteIcon from '#ui/Icons/Logos/JsWhite';
5
+ import styles from './index.module.css';
6
+ const Preview = ({ type = 'announcements', title }) => (_jsx("div", { className: classNames(styles.root, styles[type]), children: _jsxs("div", { className: styles.container, "aria-hidden": true, children: [_jsx(HexagonGrid, { className: styles.hexagon }), _jsx(JsWhiteIcon, { className: styles.logo }), title] }) }));
7
+ export default Preview;
@@ -1,79 +1,2 @@
1
- @reference "../../styles/index.css";
2
-
3
- .root {
4
- @apply after:bg-gradient-radial
5
- @container/preview
6
- relative
7
- flex
8
- aspect-[1.90/1]
9
- items-center
10
- rounded-sm
11
- border
12
- border-neutral-900
13
- bg-neutral-950
14
- after:absolute
15
- after:inset-0
16
- after:m-auto
17
- after:aspect-square
18
- after:w-1/3
19
- after:rounded-full
20
- after:blur-2xl
21
- after:content-[''];
22
-
23
- &.announcements {
24
- @apply after:from-green-700/90;
25
- }
26
-
27
- &.release {
28
- @apply after:from-info-600/90;
29
- }
30
-
31
- &.vulnerability {
32
- @apply after:from-warning-600/90;
33
- }
34
-
35
- .container {
36
- @apply @sm/preview:text-base
37
- @md/preview:gap-6
38
- @md/preview:text-lg
39
- @lg/preview:gap-8
40
- @lg/preview:text-xl
41
- @xl/preview:gap-12
42
- @xl/preview:text-2xl
43
- @2xl/preview:text-3xl
44
- z-10
45
- mx-auto
46
- flex
47
- w-2/3
48
- max-w-xl
49
- flex-col
50
- gap-4
51
- text-center
52
- text-xs
53
- font-semibold
54
- text-white;
55
-
56
- .hexagon {
57
- @apply @md/preview:h-3/5
58
- @md/preview:w-3/5
59
- @lg/preview:h-2/3
60
- @lg/preview:w-2/3
61
- @xl/preview:h-3/5
62
- @xl/preview:w-3/5
63
- @2xl/preview:h-2/3
64
- @2xl/preview:w-2/3
65
- absolute
66
- inset-0
67
- m-auto
68
- size-full;
69
- }
70
-
71
- .logo {
72
- @apply @md/preview:size-14
73
- @lg/preview:size-16
74
- @xl/preview:size-20
75
- mx-auto
76
- size-6;
77
- }
78
- }
79
- }
1
+ /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
2
+ .root{aspect-ratio:1.9;border-radius:var(--radius-sm,.25rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-900,#2c3437);background-color:var(--color-neutral-950,#0d121c);align-items:center;display:flex;position:relative;container:preview/inline-size}.root:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing,.25rem)*0);content:var(--tw-content);content:var(--tw-content);aspect-ratio:1;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-image:radial-gradient(var(--tw-gradient-from),var(--tw-gradient-to));content:var(--tw-content);--tw-blur:blur(var(--blur-2xl,40px));width:33.3333%;filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,);content:var(--tw-content);--tw-content:"";content:var(--tw-content);border-radius:3.40282e38px;margin:auto;position:absolute}.root.announcements:after{content:var(--tw-content);--tw-gradient-from:#2c682ce6}@supports (color:color-mix(in lab, red, red)){.root.announcements:after{--tw-gradient-from:color-mix(in oklab,var(--color-green-700,#2c682c)90%,transparent)}}.root.announcements:after{--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))}.root.release:after{content:var(--tw-content);--tw-gradient-from:#0c7bb3e6}@supports (color:color-mix(in lab, red, red)){.root.release:after{--tw-gradient-from:color-mix(in oklab,var(--color-info-600,#0c7bb3)90%,transparent)}}.root.release:after{--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))}.root.vulnerability:after{content:var(--tw-content);--tw-gradient-from:#ae5f00e6}@supports (color:color-mix(in lab, red, red)){.root.vulnerability:after{--tw-gradient-from:color-mix(in oklab,var(--color-warning-600,#ae5f00)90%,transparent)}}.root.vulnerability:after{--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))}.root .container{z-index:10;width:66.6667%;max-width:var(--container-xl,36rem);gap:calc(var(--spacing,.25rem)*4);text-align:center;font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,1.33333));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-white,#fff);flex-direction:column;margin-inline:auto;display:flex}@container preview (min-width:24rem){.root .container{font-size:var(--text-base,1rem);line-height:var(--tw-leading,var(--text-base--line-height,1.5))}}@container preview (min-width:28rem){.root .container{gap:calc(var(--spacing,.25rem)*6);font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,1.55556))}}@container preview (min-width:32rem){.root .container{gap:calc(var(--spacing,.25rem)*8);font-size:var(--text-xl,1.25rem);line-height:var(--tw-leading,var(--text-xl--line-height,1.4))}}@container preview (min-width:36rem){.root .container{gap:calc(var(--spacing,.25rem)*12);font-size:var(--text-2xl,1.5rem);line-height:var(--tw-leading,var(--text-2xl--line-height,1.33333))}}@container preview (min-width:42rem){.root .container{font-size:var(--text-3xl,1.875rem);line-height:var(--tw-leading,var(--text-3xl--line-height,1.2))}}.root .container .hexagon{inset:calc(var(--spacing,.25rem)*0);width:100%;height:100%;margin:auto;position:absolute}@container preview (min-width:28rem){.root .container .hexagon{width:60%;height:60%}}@container preview (min-width:32rem){.root .container .hexagon{width:66.6667%;height:66.6667%}}@container preview (min-width:36rem){.root .container .hexagon{width:60%;height:60%}}@container preview (min-width:42rem){.root .container .hexagon{width:66.6667%;height:66.6667%}}.root .container .logo{width:calc(var(--spacing,.25rem)*6);height:calc(var(--spacing,.25rem)*6);margin-inline:auto}@container preview (min-width:28rem){.root .container .logo{width:calc(var(--spacing,.25rem)*14);height:calc(var(--spacing,.25rem)*14)}}@container preview (min-width:32rem){.root .container .logo{width:calc(var(--spacing,.25rem)*16);height:calc(var(--spacing,.25rem)*16)}}@container preview (min-width:36rem){.root .container .logo{width:calc(var(--spacing,.25rem)*20);height:calc(var(--spacing,.25rem)*20)}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ import Select from '#ui/Common/Select';
4
+ import StatelessSelect from '#ui/Common/Select/StatelessSelect';
5
+ const WithNoScriptSelect = ({ as, ...props }) => {
6
+ const id = useId();
7
+ const selectId = `select-${id.replace(/[^a-zA-Z0-9]/g, '')}`;
8
+ return (_jsxs(_Fragment, { children: [_jsx(Select, { ...props, fallbackClass: selectId }), _jsxs("noscript", { children: [_jsx("style", { children: `.${selectId} { display: none!important; }` }), _jsx(StatelessSelect, { ...props, as: as })] })] }));
9
+ };
10
+ export default WithNoScriptSelect;
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronDownIcon } from '@heroicons/react/24/solid';
3
+ import classNames from 'classnames';
4
+ import { useId, useMemo } from 'react';
5
+ import { isStringArray, isValuesArray } from '#ui/util/array';
6
+ import styles from '../index.module.css';
7
+ const StatelessSelect = ({ values = [], defaultValue, placeholder, label, inline, className, ariaLabel, disabled = false, as: Component = 'div', }) => {
8
+ const id = useId();
9
+ const mappedValues = useMemo(() => {
10
+ let mappedValues = values;
11
+ if (isStringArray(mappedValues)) {
12
+ mappedValues = mappedValues.map(value => ({
13
+ label: value,
14
+ value: value,
15
+ }));
16
+ }
17
+ if (isValuesArray(mappedValues)) {
18
+ return [{ items: mappedValues }];
19
+ }
20
+ return mappedValues;
21
+ }, [values]);
22
+ // Find the current/default item to display in summary
23
+ const currentItem = useMemo(() => mappedValues
24
+ .flatMap(({ items }) => items)
25
+ .find(item => item.value === defaultValue), [mappedValues, defaultValue]);
26
+ return (_jsxs("div", { className: classNames(styles.select, styles.noscript, { [styles.inline]: inline }, className), children: [label && (_jsx("label", { className: styles.label, htmlFor: id, children: label })), _jsxs("details", { className: styles.trigger, id: id, children: [_jsxs("summary", { className: styles.summary, "aria-label": ariaLabel, "aria-disabled": disabled, children: [currentItem && (_jsxs("span", { className: styles.selectedValue, children: [currentItem.iconImage, _jsx("span", { children: currentItem.label })] })), !currentItem && (_jsx("span", { className: styles.placeholder, children: placeholder })), _jsx(ChevronDownIcon, { className: styles.icon })] }), _jsx("div", { className: classNames(styles.dropdown, { [styles.inline]: inline }), children: mappedValues.map(({ label: groupLabel, items }, groupKey) => (_jsxs("div", { className: styles.group, children: [groupLabel && (_jsx("div", { className: classNames(styles.item, styles.label), children: groupLabel })), items.map(({ value, label, iconImage, disabled: itemDisabled }) => (_jsxs(Component, { href: value, className: classNames(styles.item, styles.text, {
27
+ [styles.disabled]: itemDisabled || disabled,
28
+ [styles.selected]: value === defaultValue,
29
+ }), "aria-disabled": itemDisabled || disabled, children: [iconImage, _jsx("span", { children: label })] }, value)))] }, groupLabel?.toString() ?? groupKey))) })] })] }));
30
+ };
31
+ export default StatelessSelect;
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline';
4
+ import * as SelectPrimitive from '@radix-ui/react-select';
5
+ import classNames from 'classnames';
6
+ import { useEffect, useId, useMemo, useState } from 'react';
7
+ import Skeleton from '#ui/Common/Skeleton';
8
+ import { isStringArray, isValuesArray } from '#ui/util/array';
9
+ import styles from './index.module.css';
10
+ const Select = ({ values = [], defaultValue, placeholder, label, inline, onChange, className, dropdownClassName, ariaLabel, loading = false, disabled = false, fallbackClass = '', }) => {
11
+ const id = useId();
12
+ const [value, setValue] = useState(defaultValue);
13
+ useEffect(() => setValue(defaultValue), [defaultValue]);
14
+ const mappedValues = useMemo(() => {
15
+ let mappedValues = values;
16
+ if (isStringArray(mappedValues)) {
17
+ mappedValues = mappedValues.map(value => ({
18
+ label: value,
19
+ value: value,
20
+ }));
21
+ }
22
+ if (isValuesArray(mappedValues)) {
23
+ return [{ items: mappedValues }];
24
+ }
25
+ return mappedValues;
26
+ }, [values]);
27
+ // We render the actual item slotted to fix/prevent the issue
28
+ // of the tirgger flashing on the initial render
29
+ const currentItem = useMemo(() => mappedValues
30
+ .flatMap(({ items }) => items)
31
+ .find(item => item.value === value), [mappedValues, value]);
32
+ const memoizedMappedValues = useMemo(() => {
33
+ return mappedValues.map(({ label, items }, key) => (_jsxs(SelectPrimitive.Group, { children: [label && (_jsx(SelectPrimitive.Label, { className: classNames(styles.item, styles.label), children: label })), items.map(({ value, label, iconImage, disabled }) => (_jsx(SelectPrimitive.Item, { value: value, disabled: disabled, className: classNames(styles.item, styles.text), children: _jsxs(SelectPrimitive.ItemText, { children: [iconImage, _jsx("span", { children: label })] }) }, value)))] }, label?.toString() ?? key)));
34
+ // We explicitly want to recalculate these values only when the values themselves changed
35
+ // This is to prevent re-rendering and re-calcukating the values on every render
36
+ }, [JSON.stringify(values)]);
37
+ // Both change the internal state and emit the change event
38
+ const handleChange = (value) => {
39
+ setValue(value);
40
+ if (typeof onChange === 'function') {
41
+ onChange(value);
42
+ }
43
+ };
44
+ return (_jsx(Skeleton, { loading: loading, children: _jsxs("span", { className: classNames(styles.select, { [styles.inline]: inline }, className, fallbackClass), children: [label && (_jsx("label", { className: styles.label, htmlFor: id, children: label })), _jsxs(SelectPrimitive.Root, { value: currentItem !== undefined ? value : undefined, onValueChange: handleChange, disabled: disabled, children: [_jsxs(SelectPrimitive.Trigger, { className: styles.trigger, "aria-label": ariaLabel, id: id, children: [_jsx(SelectPrimitive.Value, { placeholder: placeholder, children: currentItem !== undefined && (_jsxs(_Fragment, { children: [currentItem.iconImage, _jsx("span", { children: currentItem.label })] })) }), _jsx(ChevronDownIcon, { className: styles.icon })] }), _jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { position: inline ? 'popper' : 'item-aligned', className: classNames(styles.dropdown, { [styles.inline]: inline }, dropdownClassName), children: [_jsx(SelectPrimitive.ScrollUpButton, { children: _jsx(ChevronUpIcon, { className: styles.scrollIcon }) }), _jsx(SelectPrimitive.Viewport, { children: memoizedMappedValues }), _jsx(SelectPrimitive.ScrollDownButton, { children: _jsx(ChevronDownIcon, { className: styles.scrollIcon }) })] }) })] })] }) }));
45
+ };
46
+ export default Select;