@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,67 @@
1
+ import { render } from '@testing-library/react';
2
+ import { describe, it } from 'node:test';
3
+ import assert from 'node:assert/strict';
4
+ import Select from '..';
5
+
6
+ const noop = () => {};
7
+
8
+ describe('Select', () => {
9
+ const values = ['Option 1', 'Option 2', 'Option 3'];
10
+ const defaultValue = 'Option 1';
11
+ const placeholder = 'Select an option';
12
+ const dropdownLabel = 'Dropdown label';
13
+ const label = 'Option label';
14
+
15
+ global.ResizeObserver = class {
16
+ observe = noop;
17
+ unobserve = noop;
18
+ disconnect = noop;
19
+ };
20
+
21
+ it('renders the label when provided', () => {
22
+ const { getByLabelText } = render(
23
+ <Select
24
+ values={values}
25
+ defaultValue={defaultValue}
26
+ placeholder={placeholder}
27
+ dropdownLabel={dropdownLabel}
28
+ label={label}
29
+ onChange={noop}
30
+ />
31
+ );
32
+
33
+ const element = getByLabelText(label);
34
+ assert.ok(element.ownerDocument);
35
+ });
36
+
37
+ it('renders the default value when provided', () => {
38
+ const { getByText } = render(
39
+ <Select
40
+ values={values}
41
+ defaultValue={defaultValue}
42
+ placeholder={placeholder}
43
+ dropdownLabel={dropdownLabel}
44
+ label={label}
45
+ onChange={noop}
46
+ />
47
+ );
48
+
49
+ const element = getByText(defaultValue);
50
+ assert.ok(element.ownerDocument);
51
+ });
52
+
53
+ it('renders the placeholder when default value is not provided', () => {
54
+ const { getByText } = render(
55
+ <Select
56
+ values={values}
57
+ placeholder={placeholder}
58
+ dropdownLabel={dropdownLabel}
59
+ label={label}
60
+ onChange={noop}
61
+ />
62
+ );
63
+
64
+ const element = getByText(placeholder);
65
+ assert.ok(element.ownerDocument);
66
+ });
67
+ });
@@ -1,328 +1,161 @@
1
- /*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
1
+ @reference "../../styles/index.css";
2
+
2
3
  .select {
3
- display: inline-flex;
4
- flex-direction: column;
5
- gap: calc(var(--spacing, 0.25rem)*1.5);
4
+ @apply inline-flex
5
+ flex-col
6
+ gap-1.5;
7
+
6
8
  .label {
7
- display: block;
8
- width: 100%;
9
- font-size: var(--text-sm, 0.875rem);
10
- line-height: var(--tw-leading, var(--text-sm--line-height, 1.42857));
11
- --tw-font-weight: var(--font-weight-medium, 500);
12
- font-weight: var(--font-weight-medium, 500);
13
- color: var(--color-neutral-800, #556066);
14
- &:where([data-theme=dark], [data-theme=dark] *) {
15
- color: var(--color-neutral-200, #e9edf0);
16
- }
17
- }
9
+ @apply block
10
+ w-full
11
+ text-sm
12
+ font-medium
13
+ text-neutral-800
14
+ dark:text-neutral-200;
15
+ }
16
+
18
17
  .trigger {
19
- display: inline-flex;
20
- height: calc(var(--spacing, 0.25rem)*11);
21
- width: 100%;
22
- min-width: 17rem;
23
- align-items: center;
24
- justify-content: space-between;
25
- gap: calc(var(--spacing, 0.25rem)*2);
26
- border-radius: var(--radius-sm, 0.25rem);
27
- border-style: var(--tw-border-style);
28
- border-width: 1px;
29
- border-color: var(--color-neutral-300, #d9e1e4);
30
- background-color: var(--color-white, #fff);
31
- padding-inline: calc(var(--spacing, 0.25rem)*3.5);
32
- padding-block: calc(var(--spacing, 0.25rem)*2.5);
33
- text-align: left;
34
- font-size: var(--text-base, 1rem);
35
- line-height: var(--tw-leading, var(--text-base--line-height, 1.5));
36
- --tw-font-weight: var(--font-weight-medium, 500);
37
- font-weight: var(--font-weight-medium, 500);
38
- color: var(--color-neutral-900, #2c3437);
39
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in srgb, #101828 5%, transparent));
40
- @supports (color: color-mix(in lab, red, red)) {
41
- --tw-shadow: 0px 1px 2px 0px var(--tw-shadow-color, color-mix(in oklab, var(--color-shadow, #101828) 5%, transparent));
42
- }
43
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
44
- --tw-outline-style: none;
45
- outline-style: none;
46
- @media (forced-colors: active) {
47
- outline: 2px solid transparent;
48
- outline-offset: 2px;
49
- }
50
- &:focus {
51
- border-color: var(--color-neutral-500, #b1bcc2);
52
- }
53
- &:focus {
54
- --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
55
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
56
- }
57
- &:focus {
58
- --tw-ring-color: var(--color-neutral-500, #b1bcc2);
59
- }
60
- &[data-placeholder] {
61
- color: var(--color-neutral-800, #556066);
62
- }
63
- &:where([data-theme=dark], [data-theme=dark] *) {
64
- border-color: var(--color-neutral-800, #556066);
65
- }
66
- &:where([data-theme=dark], [data-theme=dark] *) {
67
- background-color: var(--color-neutral-950, #0d121c);
68
- }
69
- &:where([data-theme=dark], [data-theme=dark] *) {
70
- color: var(--color-white, #fff);
71
- }
72
- &:where([data-theme=dark], [data-theme=dark] *) {
73
- &:focus {
74
- border-color: var(--color-neutral-600, #929fa5);
75
- }
76
- }
77
- &:where([data-theme=dark], [data-theme=dark] *) {
78
- &:focus {
79
- --tw-ring-color: var(--color-neutral-600, #929fa5);
80
- }
81
- }
82
- &:where([data-theme=dark], [data-theme=dark] *) {
83
- &[data-placeholder] {
84
- color: var(--color-neutral-200, #e9edf0);
85
- }
86
- }
87
- }
18
+ @apply shadow-xs
19
+ outline-hidden
20
+ inline-flex
21
+ h-11
22
+ w-full
23
+ min-w-[17rem]
24
+ items-center
25
+ justify-between
26
+ gap-2
27
+ rounded-sm
28
+ border
29
+ border-neutral-300
30
+ bg-white
31
+ px-3.5
32
+ py-2.5
33
+ text-left
34
+ text-base
35
+ font-medium
36
+ text-neutral-900
37
+ focus:border-neutral-500
38
+ focus:ring-1
39
+ focus:ring-neutral-500
40
+ data-[placeholder]:text-neutral-800
41
+ dark:border-neutral-800
42
+ dark:bg-neutral-950
43
+ dark:text-white
44
+ dark:focus:border-neutral-600
45
+ dark:focus:ring-neutral-600
46
+ dark:data-[placeholder]:text-neutral-200;
47
+ }
48
+
88
49
  .trigger span {
89
- display: flex;
90
- height: calc(var(--spacing, 0.25rem)*5);
91
- align-items: center;
92
- gap: calc(var(--spacing, 0.25rem)*2);
50
+ @apply flex
51
+ h-5
52
+ items-center
53
+ gap-2;
93
54
  }
55
+
94
56
  .icon {
95
- width: calc(var(--spacing, 0.25rem)*5);
96
- height: calc(var(--spacing, 0.25rem)*5);
97
- color: var(--color-neutral-600, #929fa5);
98
- &:where([data-theme=dark], [data-theme=dark] *) {
99
- color: var(--color-neutral-400, #cbd4d9);
100
- }
57
+ @apply size-5
58
+ text-neutral-600
59
+ dark:text-neutral-400;
101
60
  }
102
61
  }
62
+
103
63
  .dropdown {
104
- max-height: calc(var(--spacing, 0.25rem)*48);
105
- max-width: var(--container-xs, 20rem);
106
- overflow: hidden;
107
- overflow-y: auto;
108
- border-radius: var(--radius-md, 0.375rem);
109
- border-style: var(--tw-border-style);
110
- border-width: 1px;
111
- border-color: var(--color-neutral-200, #e9edf0);
112
- background-color: var(--color-white, #fff);
113
- --tw-shadow: 0px 4px 6px -2px var(--tw-shadow-color, color-mix(in srgb, #101828 3%, transparent)), 0px 12px 16px -4px var(--tw-shadow-color, color-mix(in srgb, #101828 8%, transparent));
114
- @supports (color: color-mix(in lab, red, red)) {
115
- --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));
116
- }
117
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
118
- &:where([data-theme=dark], [data-theme=dark] *) {
119
- border-color: var(--color-neutral-800, #556066);
120
- }
121
- &:where([data-theme=dark], [data-theme=dark] *) {
122
- background-color: var(--color-neutral-950, #0d121c);
123
- }
64
+ @apply max-h-48
65
+ max-w-xs
66
+ overflow-hidden
67
+ overflow-y-auto
68
+ rounded-md
69
+ border
70
+ border-neutral-200
71
+ bg-white
72
+ shadow-lg
73
+ dark:border-neutral-800
74
+ dark:bg-neutral-950;
75
+
124
76
  .item {
125
- overflow: hidden;
126
- text-overflow: ellipsis;
127
- white-space: nowrap;
128
- padding-inline: calc(var(--spacing, 0.25rem)*2.5);
129
- padding-block: calc(var(--spacing, 0.25rem)*1.5);
130
- font-size: var(--text-sm, 0.875rem);
131
- line-height: var(--tw-leading, var(--text-sm--line-height, 1.42857));
132
- --tw-font-weight: var(--font-weight-medium, 500);
133
- font-weight: var(--font-weight-medium, 500);
134
- -webkit-user-select: none;
135
- user-select: none;
136
- }
77
+ @apply select-none
78
+ truncate
79
+ px-2.5
80
+ py-1.5
81
+ text-sm
82
+ font-medium;
83
+ }
84
+
137
85
  .text {
138
- color: var(--color-neutral-800, #556066);
139
- &[data-highlighted] {
140
- background-color: var(--color-green-500, #5fa04e);
141
- }
142
- &[data-highlighted] {
143
- color: var(--color-white, #fff);
144
- }
145
- &[data-highlighted] {
146
- --tw-outline-style: none;
147
- outline-style: none;
148
- @media (forced-colors: active) {
149
- outline: 2px solid transparent;
150
- outline-offset: 2px;
151
- }
152
- }
153
- &:where([data-theme=dark], [data-theme=dark] *) {
154
- color: var(--color-neutral-200, #e9edf0);
155
- }
156
- &:where([data-theme=dark], [data-theme=dark] *) {
157
- &[data-highlighted] {
158
- background-color: var(--color-green-600, #417e38);
159
- }
160
- }
161
- &:where([data-theme=dark], [data-theme=dark] *) {
162
- &[data-highlighted] {
163
- color: var(--color-white, #fff);
164
- }
165
- }
166
- }
86
+ @apply data-[highlighted]:outline-hidden
87
+ text-neutral-800
88
+ data-[highlighted]:bg-green-500
89
+ data-[highlighted]:text-white
90
+ dark:text-neutral-200
91
+ dark:data-[highlighted]:bg-green-600
92
+ dark:data-[highlighted]:text-white;
93
+ }
94
+
167
95
  .text > span {
168
- display: flex;
169
- align-items: center;
170
- gap: calc(var(--spacing, 0.25rem)*2);
96
+ @apply flex
97
+ items-center
98
+ gap-2;
171
99
  }
100
+
172
101
  .text > span > span {
173
- max-width: calc(var(--spacing, 0.25rem)*64);
174
- overflow: hidden;
175
- text-overflow: ellipsis;
176
- white-space: nowrap;
177
- text-wrap: wrap;
102
+ @apply max-w-64
103
+ truncate
104
+ text-wrap;
178
105
  }
106
+
179
107
  .label {
180
- color: var(--color-neutral-600, #929fa5);
181
- &:where([data-theme=dark], [data-theme=dark] *) {
182
- color: var(--color-neutral-400, #cbd4d9);
183
- }
108
+ @apply text-neutral-600
109
+ dark:text-neutral-400;
184
110
  }
185
111
  }
112
+
186
113
  .dropdown:has(.label) .text > span {
187
114
  &:has(svg) > svg {
188
- margin-left: calc(var(--spacing, 0.25rem)*3);
115
+ @apply ml-3;
189
116
  }
117
+
190
118
  &:not(&:has(svg)) > span {
191
- margin-left: calc(var(--spacing, 0.25rem)*3);
119
+ @apply ml-3;
192
120
  }
193
121
  }
122
+
194
123
  .inline {
195
124
  .trigger {
196
- height: auto;
197
- min-width: fit-content;
198
- padding-inline: calc(var(--spacing, 0.25rem)*2.5);
199
- padding-block: calc(var(--spacing, 0.25rem)*2);
200
- font-size: var(--text-sm, 0.875rem);
201
- line-height: var(--tw-leading, var(--text-sm--line-height, 1.42857));
202
- --tw-font-weight: var(--font-weight-medium, 500);
203
- font-weight: var(--font-weight-medium, 500);
204
- }
125
+ @apply h-auto
126
+ min-w-fit
127
+ px-2.5
128
+ py-2
129
+ text-sm
130
+ font-medium;
131
+ }
132
+
205
133
  .icon {
206
- width: calc(var(--spacing, 0.25rem)*4);
207
- height: calc(var(--spacing, 0.25rem)*4);
134
+ @apply size-4;
208
135
  }
136
+
209
137
  .text {
210
- color: var(--color-neutral-900, #2c3437);
211
- &[data-disabled] {
212
- color: var(--color-neutral-600, #929fa5);
213
- }
214
- &[data-highlighted] {
215
- background-color: var(--color-neutral-100, #f6f7f9);
216
- }
217
- &[data-highlighted] {
218
- color: var(--color-neutral-900, #2c3437);
219
- }
220
- &:where([data-theme=dark], [data-theme=dark] *) {
221
- color: var(--color-white, #fff);
222
- }
223
- &:where([data-theme=dark], [data-theme=dark] *) {
224
- &[data-disabled] {
225
- color: var(--color-neutral-700, #6e7b83);
226
- }
227
- }
228
- &:where([data-theme=dark], [data-theme=dark] *) {
229
- &[data-highlighted] {
230
- background-color: var(--color-neutral-900, #2c3437);
231
- }
232
- }
233
- &:where([data-theme=dark], [data-theme=dark] *) {
234
- &[data-highlighted] {
235
- color: var(--color-white, #fff);
236
- }
237
- }
238
- }
138
+ @apply text-neutral-900
139
+ data-[highlighted]:bg-neutral-100
140
+ data-[disabled]:text-neutral-600
141
+ data-[highlighted]:text-neutral-900
142
+ dark:text-white
143
+ dark:data-[highlighted]:bg-neutral-900
144
+ dark:data-[disabled]:text-neutral-700
145
+ dark:data-[highlighted]:text-white;
146
+ }
147
+
239
148
  &.dropdown {
240
- margin-top: calc(var(--spacing, 0.25rem)*1);
241
- width: calc(100% + 1.5rem);
242
- border-radius: 0.25rem;
149
+ @apply mt-1
150
+ w-[calc(100%+1.5rem)]
151
+ rounded;
243
152
  }
244
153
  }
154
+
245
155
  .scrollIcon {
246
- margin-inline: auto;
247
- margin-block: calc(var(--spacing, 0.25rem)*1);
248
- width: calc(var(--spacing, 0.25rem)*4);
249
- height: calc(var(--spacing, 0.25rem)*4);
250
- color: var(--color-neutral-700, #6e7b83);
251
- &:where([data-theme=dark], [data-theme=dark] *) {
252
- color: var(--color-neutral-200, #e9edf0);
253
- }
254
- }
255
- @property --tw-font-weight {
256
- syntax: "*";
257
- inherits: false;
258
- }
259
- @property --tw-border-style {
260
- syntax: "*";
261
- inherits: false;
262
- initial-value: solid;
263
- }
264
- @property --tw-shadow {
265
- syntax: "*";
266
- inherits: false;
267
- initial-value: 0 0 #0000;
268
- }
269
- @property --tw-shadow-color {
270
- syntax: "*";
271
- inherits: false;
272
- }
273
- @property --tw-shadow-alpha {
274
- syntax: "<percentage>";
275
- inherits: false;
276
- initial-value: 100%;
277
- }
278
- @property --tw-inset-shadow {
279
- syntax: "*";
280
- inherits: false;
281
- initial-value: 0 0 #0000;
282
- }
283
- @property --tw-inset-shadow-color {
284
- syntax: "*";
285
- inherits: false;
286
- }
287
- @property --tw-inset-shadow-alpha {
288
- syntax: "<percentage>";
289
- inherits: false;
290
- initial-value: 100%;
291
- }
292
- @property --tw-ring-color {
293
- syntax: "*";
294
- inherits: false;
295
- }
296
- @property --tw-ring-shadow {
297
- syntax: "*";
298
- inherits: false;
299
- initial-value: 0 0 #0000;
300
- }
301
- @property --tw-inset-ring-color {
302
- syntax: "*";
303
- inherits: false;
304
- }
305
- @property --tw-inset-ring-shadow {
306
- syntax: "*";
307
- inherits: false;
308
- initial-value: 0 0 #0000;
309
- }
310
- @property --tw-ring-inset {
311
- syntax: "*";
312
- inherits: false;
313
- }
314
- @property --tw-ring-offset-width {
315
- syntax: "<length>";
316
- inherits: false;
317
- initial-value: 0px;
318
- }
319
- @property --tw-ring-offset-color {
320
- syntax: "*";
321
- inherits: false;
322
- initial-value: #fff;
323
- }
324
- @property --tw-ring-offset-shadow {
325
- syntax: "*";
326
- inherits: false;
327
- initial-value: 0 0 #0000;
156
+ @apply mx-auto
157
+ my-1
158
+ size-4
159
+ text-neutral-700
160
+ dark:text-neutral-200;
328
161
  }
@@ -0,0 +1,111 @@
1
+ import type { Meta as MetaObj, StoryObj } from '@storybook/react';
2
+
3
+ import Select from '#ui/Common/Select';
4
+ import * as OSIcons from '#ui/Icons/OperatingSystem';
5
+
6
+ type Story = StoryObj<typeof Select>;
7
+ type Meta = MetaObj<typeof Select>;
8
+
9
+ export const Default: Story = {
10
+ args: {
11
+ values: ['v20.8.0', 'v19.9.0', 'v18.18.0', 'v17.9.1', 'v16.20.2'],
12
+ defaultValue: 'v16.20.2',
13
+ label: 'Node.js version',
14
+ },
15
+ };
16
+
17
+ export const WithoutLabel: Story = {
18
+ args: {
19
+ values: ['v20.8.0', 'v19.9.0', 'v18.18.0', 'v17.9.1', 'v16.20.2'],
20
+ defaultValue: 'v16.20.2',
21
+ },
22
+ };
23
+
24
+ export const WithScrollButtons: Story = {
25
+ args: {
26
+ values: Array.from({ length: 100 }, (_, i) => `Item ${i}`),
27
+ defaultValue: 'Item 50',
28
+ },
29
+ };
30
+
31
+ export const DropdownLabel: Story = {
32
+ args: {
33
+ values: [
34
+ {
35
+ label: 'Getting Started',
36
+ items: [
37
+ {
38
+ value: 'section-1',
39
+ label: 'Getting Started',
40
+ },
41
+ {
42
+ value: 'section-2',
43
+ label: 'How to install Node.js',
44
+ },
45
+ {
46
+ value: 'section-3',
47
+ label: 'How much JavaScript do you need to know to use Node.js?',
48
+ },
49
+ {
50
+ value: 'section-4',
51
+ label: 'Differences between Node.js and the Browser',
52
+ },
53
+ {
54
+ value: 'section-5',
55
+ label: 'The V8 JavaScript Engine',
56
+ },
57
+ {
58
+ value: 'section-6',
59
+ label: 'An introduction to the npm package manager',
60
+ },
61
+ {
62
+ value: 'section-7',
63
+ label: 'ECMAScript 2015 (ES6) and beyond',
64
+ },
65
+ {
66
+ value: 'section-8',
67
+ label: 'Node.js, the difference between development and production',
68
+ },
69
+ ],
70
+ },
71
+ ],
72
+ placeholder: 'Select a guide',
73
+ label: 'Getting Started',
74
+ },
75
+ };
76
+
77
+ export const InlineSelect: Story = {
78
+ args: {
79
+ values: [
80
+ {
81
+ label: 'Platform',
82
+ items: [
83
+ {
84
+ value: 'linux',
85
+ label: 'Linux',
86
+ iconImage: <OSIcons.Linux width={16} height={16} />,
87
+ },
88
+ {
89
+ value: 'macos',
90
+ label: 'macOS',
91
+ iconImage: <OSIcons.Apple width={16} height={16} />,
92
+ },
93
+ {
94
+ value: 'windows',
95
+ label: 'Windows',
96
+ iconImage: <OSIcons.Microsoft width={16} height={16} />,
97
+ },
98
+ {
99
+ value: 'aix',
100
+ label: 'AIX',
101
+ iconImage: <OSIcons.AIX width={16} height={16} />,
102
+ },
103
+ ],
104
+ },
105
+ ],
106
+ defaultValue: 'macos',
107
+ inline: true,
108
+ },
109
+ };
110
+
111
+ export default { component: Select } as Meta;