@refraktor/core 0.0.4 → 0.0.5

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 (334) hide show
  1. package/build/components/progress-circle/progress-circle.d.ts.map +1 -1
  2. package/build/components/progress-circle/progress-circle.js +6 -6
  3. package/build/components/progress-circle/progress-circle.styles.d.ts +2 -7
  4. package/build/components/progress-circle/progress-circle.styles.d.ts.map +1 -1
  5. package/build/components/progress-circle/progress-circle.styles.js +2 -23
  6. package/build/components/progress-circle/progress-circle.types.d.ts +4 -3
  7. package/build/components/progress-circle/progress-circle.types.d.ts.map +1 -1
  8. package/build/components/slider/slider.d.ts.map +1 -1
  9. package/build/components/slider/slider.js +69 -20
  10. package/build/components/tooltip/tooltip.js +1 -1
  11. package/build/style.css +2 -2
  12. package/package.json +30 -3
  13. package/.turbo/turbo-build.log +0 -4
  14. package/refraktor-core-0.0.1-alpha.0.tgz +0 -0
  15. package/src/components/accordion/accordion-control/accordion-control.tsx +0 -156
  16. package/src/components/accordion/accordion-control/index.ts +0 -1
  17. package/src/components/accordion/accordion-item/accordion-item.tsx +0 -40
  18. package/src/components/accordion/accordion-item/index.ts +0 -1
  19. package/src/components/accordion/accordion-panel/accordion-panel.tsx +0 -58
  20. package/src/components/accordion/accordion-panel/index.ts +0 -1
  21. package/src/components/accordion/accordion.context.ts +0 -93
  22. package/src/components/accordion/accordion.styles.ts +0 -60
  23. package/src/components/accordion/accordion.test.tsx +0 -174
  24. package/src/components/accordion/accordion.tsx +0 -203
  25. package/src/components/accordion/accordion.types.ts +0 -126
  26. package/src/components/accordion/index.ts +0 -17
  27. package/src/components/avatar/avatar-group/avatar-group.tsx +0 -73
  28. package/src/components/avatar/avatar-group/index.ts +0 -1
  29. package/src/components/avatar/avatar.styles.ts +0 -11
  30. package/src/components/avatar/avatar.tsx +0 -142
  31. package/src/components/avatar/avatar.types.ts +0 -86
  32. package/src/components/avatar/index.ts +0 -8
  33. package/src/components/badge/badge.styles.ts +0 -21
  34. package/src/components/badge/badge.tsx +0 -62
  35. package/src/components/badge/badge.types.ts +0 -40
  36. package/src/components/badge/index.ts +0 -2
  37. package/src/components/breadcrumbs/breadcrumbs.styles.ts +0 -55
  38. package/src/components/breadcrumbs/breadcrumbs.test.tsx +0 -136
  39. package/src/components/breadcrumbs/breadcrumbs.tsx +0 -199
  40. package/src/components/breadcrumbs/breadcrumbs.types.ts +0 -78
  41. package/src/components/breadcrumbs/breadcrumbs.utils.ts +0 -70
  42. package/src/components/breadcrumbs/index.ts +0 -6
  43. package/src/components/button/button.styles.ts +0 -28
  44. package/src/components/button/button.test.tsx +0 -57
  45. package/src/components/button/button.tsx +0 -110
  46. package/src/components/button/button.types.ts +0 -69
  47. package/src/components/button/index.ts +0 -2
  48. package/src/components/checkbox/checkbox-group/checkbox-group.tsx +0 -93
  49. package/src/components/checkbox/checkbox-group/index.ts +0 -1
  50. package/src/components/checkbox/checkbox.context.ts +0 -14
  51. package/src/components/checkbox/checkbox.styles.ts +0 -49
  52. package/src/components/checkbox/checkbox.test.tsx +0 -80
  53. package/src/components/checkbox/checkbox.tsx +0 -192
  54. package/src/components/checkbox/checkbox.types.ts +0 -125
  55. package/src/components/checkbox/index.ts +0 -10
  56. package/src/components/chip/chip-group/chip-group.tsx +0 -107
  57. package/src/components/chip/chip-group/index.ts +0 -1
  58. package/src/components/chip/chip.context.ts +0 -15
  59. package/src/components/chip/chip.styles.ts +0 -36
  60. package/src/components/chip/chip.test.tsx +0 -197
  61. package/src/components/chip/chip.tsx +0 -208
  62. package/src/components/chip/chip.types.ts +0 -134
  63. package/src/components/chip/index.ts +0 -10
  64. package/src/components/color-swatch/color-swatch.styles.ts +0 -11
  65. package/src/components/color-swatch/color-swatch.test.tsx +0 -80
  66. package/src/components/color-swatch/color-swatch.tsx +0 -84
  67. package/src/components/color-swatch/color-swatch.types.ts +0 -46
  68. package/src/components/color-swatch/index.ts +0 -2
  69. package/src/components/drawer/drawer-body/drawer-body.tsx +0 -29
  70. package/src/components/drawer/drawer-body/index.ts +0 -1
  71. package/src/components/drawer/drawer-close/drawer-close.tsx +0 -43
  72. package/src/components/drawer/drawer-close/index.ts +0 -1
  73. package/src/components/drawer/drawer-content/drawer-content.tsx +0 -135
  74. package/src/components/drawer/drawer-content/index.ts +0 -1
  75. package/src/components/drawer/drawer-header/drawer-header.tsx +0 -40
  76. package/src/components/drawer/drawer-header/index.ts +0 -1
  77. package/src/components/drawer/drawer-overlay/drawer-overlay.tsx +0 -87
  78. package/src/components/drawer/drawer-overlay/index.ts +0 -1
  79. package/src/components/drawer/drawer-root/drawer-root.tsx +0 -93
  80. package/src/components/drawer/drawer-root/index.ts +0 -1
  81. package/src/components/drawer/drawer.context.ts +0 -26
  82. package/src/components/drawer/drawer.styles.ts +0 -32
  83. package/src/components/drawer/drawer.test.tsx +0 -274
  84. package/src/components/drawer/drawer.tsx +0 -58
  85. package/src/components/drawer/drawer.types.ts +0 -192
  86. package/src/components/drawer/index.ts +0 -18
  87. package/src/components/drawer/use-drawer.ts +0 -94
  88. package/src/components/file-input/file-input.test.tsx +0 -134
  89. package/src/components/file-input/file-input.tsx +0 -224
  90. package/src/components/file-input/file-input.types.ts +0 -78
  91. package/src/components/file-input/file-input.utils.test.ts +0 -36
  92. package/src/components/file-input/file-input.utils.ts +0 -130
  93. package/src/components/file-input/index.ts +0 -2
  94. package/src/components/for/for.test.tsx +0 -66
  95. package/src/components/for/for.tsx +0 -53
  96. package/src/components/for/for.types.ts +0 -40
  97. package/src/components/for/index.ts +0 -2
  98. package/src/components/index.ts +0 -35
  99. package/src/components/input/index.ts +0 -2
  100. package/src/components/input/input-description/index.ts +0 -2
  101. package/src/components/input/input-description/input-description.tsx +0 -36
  102. package/src/components/input/input-error/index.ts +0 -2
  103. package/src/components/input/input-error/input-error.tsx +0 -36
  104. package/src/components/input/input-field/index.ts +0 -1
  105. package/src/components/input/input-field/input-field.styles.ts +0 -23
  106. package/src/components/input/input-field/input-field.tsx +0 -94
  107. package/src/components/input/input-label/index.ts +0 -2
  108. package/src/components/input/input-label/input-label.tsx +0 -47
  109. package/src/components/input/input-wrapper/index.ts +0 -2
  110. package/src/components/input/input-wrapper/input-wrapper.tsx +0 -43
  111. package/src/components/input/input.tsx +0 -71
  112. package/src/components/input/input.types.ts +0 -111
  113. package/src/components/loader/index.ts +0 -2
  114. package/src/components/loader/loader.tsx +0 -89
  115. package/src/components/loader/loader.types.ts +0 -33
  116. package/src/components/menu/index.ts +0 -24
  117. package/src/components/menu/menu-dropdown/index.ts +0 -1
  118. package/src/components/menu/menu-dropdown/menu-dropdown.tsx +0 -220
  119. package/src/components/menu/menu-item/index.ts +0 -1
  120. package/src/components/menu/menu-item/menu-item.tsx +0 -126
  121. package/src/components/menu/menu-label/index.ts +0 -1
  122. package/src/components/menu/menu-label/menu-label.tsx +0 -30
  123. package/src/components/menu/menu-separator/index.ts +0 -1
  124. package/src/components/menu/menu-separator/menu-separator.tsx +0 -28
  125. package/src/components/menu/menu-sub/index.ts +0 -1
  126. package/src/components/menu/menu-sub/menu-sub.tsx +0 -117
  127. package/src/components/menu/menu-sub-dropdown/index.ts +0 -1
  128. package/src/components/menu/menu-sub-dropdown/menu-sub-dropdown.tsx +0 -221
  129. package/src/components/menu/menu-sub-trigger/index.ts +0 -1
  130. package/src/components/menu/menu-sub-trigger/menu-sub-trigger.tsx +0 -164
  131. package/src/components/menu/menu-trigger/index.ts +0 -1
  132. package/src/components/menu/menu-trigger/menu-trigger.tsx +0 -98
  133. package/src/components/menu/menu.context.ts +0 -162
  134. package/src/components/menu/menu.test.tsx +0 -136
  135. package/src/components/menu/menu.tsx +0 -133
  136. package/src/components/menu/menu.types.ts +0 -291
  137. package/src/components/menu/use-menu.ts +0 -204
  138. package/src/components/modal/index.ts +0 -18
  139. package/src/components/modal/modal-body/index.ts +0 -1
  140. package/src/components/modal/modal-body/modal-body.tsx +0 -29
  141. package/src/components/modal/modal-close/index.ts +0 -1
  142. package/src/components/modal/modal-close/modal-close.tsx +0 -43
  143. package/src/components/modal/modal-content/index.ts +0 -1
  144. package/src/components/modal/modal-content/modal-content.tsx +0 -119
  145. package/src/components/modal/modal-header/index.ts +0 -1
  146. package/src/components/modal/modal-header/modal-header.tsx +0 -40
  147. package/src/components/modal/modal-overlay/index.ts +0 -1
  148. package/src/components/modal/modal-overlay/modal-overlay.tsx +0 -87
  149. package/src/components/modal/modal-root/index.ts +0 -1
  150. package/src/components/modal/modal-root/modal-root.tsx +0 -93
  151. package/src/components/modal/modal.context.ts +0 -26
  152. package/src/components/modal/modal.test.tsx +0 -316
  153. package/src/components/modal/modal.tsx +0 -58
  154. package/src/components/modal/modal.types.ts +0 -189
  155. package/src/components/modal/use-modal.ts +0 -94
  156. package/src/components/number-input/index.ts +0 -2
  157. package/src/components/number-input/number-input.styles.ts +0 -37
  158. package/src/components/number-input/number-input.test.tsx +0 -22
  159. package/src/components/number-input/number-input.tsx +0 -381
  160. package/src/components/number-input/number-input.types.ts +0 -58
  161. package/src/components/pagination/index.ts +0 -7
  162. package/src/components/pagination/pagination.styles.ts +0 -84
  163. package/src/components/pagination/pagination.test.tsx +0 -117
  164. package/src/components/pagination/pagination.tsx +0 -371
  165. package/src/components/pagination/pagination.types.ts +0 -95
  166. package/src/components/pagination/pagination.utils.ts +0 -88
  167. package/src/components/password-input/index.ts +0 -2
  168. package/src/components/password-input/password-input.test.tsx +0 -72
  169. package/src/components/password-input/password-input.tsx +0 -85
  170. package/src/components/password-input/password-input.types.ts +0 -30
  171. package/src/components/pin-input/index.ts +0 -2
  172. package/src/components/pin-input/pin-input.test.tsx +0 -149
  173. package/src/components/pin-input/pin-input.tsx +0 -473
  174. package/src/components/pin-input/pin-input.types.ts +0 -78
  175. package/src/components/popover/index.ts +0 -12
  176. package/src/components/popover/popover-dropdown/index.ts +0 -1
  177. package/src/components/popover/popover-dropdown/popover-dropdown.tsx +0 -94
  178. package/src/components/popover/popover-trigger/index.ts +0 -1
  179. package/src/components/popover/popover-trigger/popover-trigger.tsx +0 -49
  180. package/src/components/popover/popover.context.ts +0 -20
  181. package/src/components/popover/popover.tsx +0 -113
  182. package/src/components/popover/popover.types.ts +0 -137
  183. package/src/components/popover/use-popover.ts +0 -219
  184. package/src/components/portal/index.ts +0 -2
  185. package/src/components/portal/portal.test.tsx +0 -39
  186. package/src/components/portal/portal.tsx +0 -104
  187. package/src/components/portal/portal.types.ts +0 -31
  188. package/src/components/progress/index.ts +0 -2
  189. package/src/components/progress/progress.styles.ts +0 -25
  190. package/src/components/progress/progress.test.tsx +0 -107
  191. package/src/components/progress/progress.tsx +0 -93
  192. package/src/components/progress/progress.types.ts +0 -52
  193. package/src/components/progress-circle/index.ts +0 -5
  194. package/src/components/progress-circle/progress-circle.styles.ts +0 -31
  195. package/src/components/progress-circle/progress-circle.test.tsx +0 -140
  196. package/src/components/progress-circle/progress-circle.tsx +0 -124
  197. package/src/components/progress-circle/progress-circle.types.ts +0 -52
  198. package/src/components/radio/index.ts +0 -10
  199. package/src/components/radio/radio-group/index.ts +0 -1
  200. package/src/components/radio/radio-group/radio-group.tsx +0 -89
  201. package/src/components/radio/radio.context.ts +0 -14
  202. package/src/components/radio/radio.styles.ts +0 -49
  203. package/src/components/radio/radio.test.tsx +0 -75
  204. package/src/components/radio/radio.tsx +0 -173
  205. package/src/components/radio/radio.types.ts +0 -126
  206. package/src/components/scroll-area/index.ts +0 -6
  207. package/src/components/scroll-area/scroll-area.test.tsx +0 -72
  208. package/src/components/scroll-area/scroll-area.tsx +0 -70
  209. package/src/components/scroll-area/scroll-area.types.ts +0 -37
  210. package/src/components/segmented-control/index.ts +0 -6
  211. package/src/components/segmented-control/segmented-control.styles.ts +0 -37
  212. package/src/components/segmented-control/segmented-control.test.tsx +0 -170
  213. package/src/components/segmented-control/segmented-control.tsx +0 -255
  214. package/src/components/segmented-control/segmented-control.types.ts +0 -78
  215. package/src/components/select/index.ts +0 -20
  216. package/src/components/select/select-dropdown/index.ts +0 -1
  217. package/src/components/select/select-dropdown/select-dropdown.tsx +0 -299
  218. package/src/components/select/select-group/index.ts +0 -1
  219. package/src/components/select/select-group/select-group.tsx +0 -47
  220. package/src/components/select/select-item/index.ts +0 -1
  221. package/src/components/select/select-item/select-item.tsx +0 -157
  222. package/src/components/select/select-root/index.ts +0 -1
  223. package/src/components/select/select-root/select-root.tsx +0 -333
  224. package/src/components/select/select-trigger/index.ts +0 -1
  225. package/src/components/select/select-trigger/select-trigger.tsx +0 -123
  226. package/src/components/select/select.context.ts +0 -140
  227. package/src/components/select/select.test.tsx +0 -190
  228. package/src/components/select/select.tsx +0 -82
  229. package/src/components/select/select.types.ts +0 -272
  230. package/src/components/select/use-select.ts +0 -170
  231. package/src/components/slider/index.ts +0 -7
  232. package/src/components/slider/slider.styles.ts +0 -37
  233. package/src/components/slider/slider.tsx +0 -275
  234. package/src/components/slider/slider.types.ts +0 -82
  235. package/src/components/switch/index.ts +0 -2
  236. package/src/components/switch/switch.styles.ts +0 -31
  237. package/src/components/switch/switch.tsx +0 -132
  238. package/src/components/switch/switch.types.ts +0 -62
  239. package/src/components/table/index.ts +0 -24
  240. package/src/components/table/table-body/index.ts +0 -1
  241. package/src/components/table/table-body/table-body.tsx +0 -37
  242. package/src/components/table/table-caption/index.ts +0 -1
  243. package/src/components/table/table-caption/table-caption.tsx +0 -32
  244. package/src/components/table/table-cell/index.ts +0 -1
  245. package/src/components/table/table-cell/table-cell.tsx +0 -33
  246. package/src/components/table/table-head/index.ts +0 -1
  247. package/src/components/table/table-head/table-head.tsx +0 -29
  248. package/src/components/table/table-header-cell/index.ts +0 -1
  249. package/src/components/table/table-header-cell/table-header-cell.tsx +0 -33
  250. package/src/components/table/table-row/index.ts +0 -1
  251. package/src/components/table/table-row/table-row.tsx +0 -30
  252. package/src/components/table/table.context.ts +0 -18
  253. package/src/components/table/table.styles.ts +0 -62
  254. package/src/components/table/table.test.tsx +0 -145
  255. package/src/components/table/table.tsx +0 -91
  256. package/src/components/table/table.types.ts +0 -145
  257. package/src/components/tabs/index.ts +0 -18
  258. package/src/components/tabs/tabs-list/index.ts +0 -1
  259. package/src/components/tabs/tabs-list/tabs-list.tsx +0 -42
  260. package/src/components/tabs/tabs-panel/index.ts +0 -1
  261. package/src/components/tabs/tabs-panel/tabs-panel.tsx +0 -58
  262. package/src/components/tabs/tabs-tab/index.ts +0 -1
  263. package/src/components/tabs/tabs-tab/tabs-tab.tsx +0 -210
  264. package/src/components/tabs/tabs.context.ts +0 -88
  265. package/src/components/tabs/tabs.styles.ts +0 -92
  266. package/src/components/tabs/tabs.test.tsx +0 -167
  267. package/src/components/tabs/tabs.tsx +0 -137
  268. package/src/components/tabs/tabs.types.ts +0 -128
  269. package/src/components/textarea/index.ts +0 -2
  270. package/src/components/textarea/textarea-field/index.ts +0 -1
  271. package/src/components/textarea/textarea-field/textarea-field.styles.ts +0 -34
  272. package/src/components/textarea/textarea-field/textarea-field.tsx +0 -96
  273. package/src/components/textarea/textarea.tsx +0 -64
  274. package/src/components/textarea/textarea.types.ts +0 -80
  275. package/src/components/timeline/index.ts +0 -11
  276. package/src/components/timeline/timeline-item/index.ts +0 -1
  277. package/src/components/timeline/timeline-item/timeline-item.tsx +0 -158
  278. package/src/components/timeline/timeline.context.ts +0 -21
  279. package/src/components/timeline/timeline.styles.ts +0 -135
  280. package/src/components/timeline/timeline.test.tsx +0 -150
  281. package/src/components/timeline/timeline.tsx +0 -124
  282. package/src/components/timeline/timeline.types.ts +0 -91
  283. package/src/components/tooltip/index.ts +0 -8
  284. package/src/components/tooltip/tooltip.tsx +0 -164
  285. package/src/components/tooltip/tooltip.types.ts +0 -104
  286. package/src/components/tooltip/use-tooltip.ts +0 -200
  287. package/src/components/transition/index.ts +0 -11
  288. package/src/components/transition/transition.test.tsx +0 -126
  289. package/src/components/transition/transition.tsx +0 -441
  290. package/src/components/transition/transition.types.ts +0 -97
  291. package/src/components/transition/transitions.ts +0 -140
  292. package/src/icons/check.tsx +0 -25
  293. package/src/icons/chevron.tsx +0 -46
  294. package/src/icons/eye-off.tsx +0 -30
  295. package/src/icons/eye.tsx +0 -24
  296. package/src/icons/index.ts +0 -7
  297. package/src/icons/minus.tsx +0 -24
  298. package/src/icons/types.ts +0 -9
  299. package/src/icons/user.tsx +0 -18
  300. package/src/icons/x.tsx +0 -35
  301. package/src/index.ts +0 -5
  302. package/src/style.css +0 -334
  303. package/src/theme/ThemeProvider/ThemeProvider.tsx +0 -111
  304. package/src/theme/ThemeProvider/context.ts +0 -7
  305. package/src/theme/ThemeProvider/generateVariables.test.ts +0 -49
  306. package/src/theme/ThemeProvider/generateVariables.ts +0 -124
  307. package/src/theme/ThemeProvider/index.ts +0 -3
  308. package/src/theme/ThemeProvider/types.ts +0 -37
  309. package/src/theme/createTheme/createTheme.ts +0 -41
  310. package/src/theme/createTheme/index.ts +0 -7
  311. package/src/theme/createTheme/types.ts +0 -62
  312. package/src/theme/defaults/colors.ts +0 -203
  313. package/src/theme/defaults/settings.ts +0 -8
  314. package/src/theme/index.ts +0 -4
  315. package/src/theme/types.ts +0 -31
  316. package/src/theme/utils/get-radius.ts +0 -23
  317. package/src/theme/utils/get-shade.ts +0 -16
  318. package/src/theme/utils/index.ts +0 -3
  319. package/src/theme/utils/use-theme.ts +0 -27
  320. package/src/utils/configs/create-config.ts +0 -15
  321. package/src/utils/configs/index.ts +0 -3
  322. package/src/utils/configs/use-class-names.ts +0 -41
  323. package/src/utils/configs/use-props.ts +0 -55
  324. package/src/utils/cx/index.ts +0 -6
  325. package/src/utils/factory/factory.ts +0 -23
  326. package/src/utils/factory/index.ts +0 -14
  327. package/src/utils/factory/types.ts +0 -92
  328. package/src/utils/index.ts +0 -3
  329. package/src/vitest/index.ts +0 -1
  330. package/src/vitest/setup.tsx +0 -20
  331. package/src/vitest/utils.tsx +0 -59
  332. package/tsconfig.json +0 -13
  333. package/tsconfig.tsbuildinfo +0 -1
  334. package/vitest.config.js +0 -19
@@ -1,37 +0,0 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
- import {
3
- createClassNamesConfig,
4
- createComponentConfig,
5
- FactoryPayload
6
- } from "../../utils";
7
-
8
- export type ScrollAreaOrientation = "vertical" | "horizontal" | "both";
9
-
10
- export type ScrollAreaClassNames = {
11
- root?: string;
12
- };
13
-
14
- export interface ScrollAreaProps extends ComponentPropsWithoutRef<"div"> {
15
- /** Scroll direction behavior @default `vertical` */
16
- orientation?: ScrollAreaOrientation;
17
-
18
- /** Scrollbar thickness in pixels @default `6` */
19
- scrollbarSize?: number;
20
-
21
- /** Used for editing root class name */
22
- className?: string;
23
-
24
- /** Used for styling different parts of the component */
25
- classNames?: ScrollAreaClassNames;
26
- }
27
-
28
- export interface ScrollAreaFactoryPayload extends FactoryPayload {
29
- props: ScrollAreaProps;
30
- ref: HTMLDivElement;
31
- compound: {
32
- configure: ReturnType<typeof createComponentConfig<ScrollAreaProps>>;
33
- classNames: ReturnType<
34
- typeof createClassNamesConfig<ScrollAreaClassNames>
35
- >;
36
- };
37
- }
@@ -1,6 +0,0 @@
1
- export { default as SegmentedControl } from "./segmented-control";
2
- export type {
3
- SegmentedControlProps,
4
- SegmentedControlClassNames,
5
- SegmentedControlItem
6
- } from "./segmented-control.types";
@@ -1,37 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- type SegmentedControlSizeStyles = {
4
- root: string;
5
- control: string;
6
- label: string;
7
- };
8
-
9
- const sizes: Record<RefraktorSize, SegmentedControlSizeStyles> = {
10
- xs: {
11
- root: "p-0.5 gap-0.5",
12
- control: "h-4 px-2 min-w-6",
13
- label: "text-[8px]"
14
- },
15
- sm: {
16
- root: "p-0.5 gap-0.5",
17
- control: "h-5 px-2.5 min-w-7",
18
- label: "text-[10px]"
19
- },
20
- md: {
21
- root: "p-0.5 gap-0.5",
22
- control: "h-7 px-3 min-w-8",
23
- label: "text-xs"
24
- },
25
- lg: {
26
- root: "p-0.5 gap-0.5",
27
- control: "h-9 px-3.5 min-w-9",
28
- label: "text-sm"
29
- },
30
- xl: {
31
- root: "p-0.5 gap-0.5",
32
- control: "h-11 px-4 min-w-10",
33
- label: "text-base"
34
- }
35
- };
36
-
37
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
@@ -1,170 +0,0 @@
1
- import { createRef, useState } from "react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { render, screen, userEvent } from "../../vitest";
4
- import SegmentedControl from "./segmented-control";
5
-
6
- const data = [
7
- { value: "react", label: "React" },
8
- { value: "vue", label: "Vue" },
9
- { value: "svelte", label: "Svelte" }
10
- ];
11
-
12
- describe("@refraktor/core/SegmentedControl", () => {
13
- it("renders options and selected value", async () => {
14
- await render(<SegmentedControl data={data} defaultValue="react" />);
15
-
16
- expect(screen.getByRole("radiogroup")).toBeInTheDocument();
17
- expect(screen.getByRole("radio", { name: "React" })).toHaveAttribute(
18
- "aria-checked",
19
- "true"
20
- );
21
- expect(screen.getByRole("radio", { name: "Vue" })).toHaveAttribute(
22
- "aria-checked",
23
- "false"
24
- );
25
- });
26
-
27
- it("renders data icon without changing accessible name", async () => {
28
- await render(
29
- <SegmentedControl
30
- defaultValue="react"
31
- data={[
32
- {
33
- value: "react",
34
- label: "React",
35
- icon: <span data-testid="react-icon">R</span>
36
- }
37
- ]}
38
- />
39
- );
40
-
41
- expect(screen.getByTestId("react-icon")).toBeInTheDocument();
42
- expect(screen.getByRole("radio", { name: "React" })).toBeInTheDocument();
43
- });
44
-
45
- it("forwards ref correctly", async () => {
46
- const ref = createRef<HTMLDivElement>();
47
-
48
- await render(<SegmentedControl ref={ref} data={data} />);
49
-
50
- expect(ref.current).toBeInstanceOf(HTMLDivElement);
51
- expect(ref.current?.tagName).toBe("DIV");
52
- });
53
-
54
- it("handles click change events", async () => {
55
- const user = userEvent.setup();
56
- const onChange = vi.fn();
57
-
58
- await render(
59
- <SegmentedControl
60
- data={data}
61
- defaultValue="react"
62
- onChange={onChange}
63
- />
64
- );
65
-
66
- await user.click(screen.getByRole("radio", { name: "Vue" }));
67
-
68
- expect(onChange).toHaveBeenCalledWith("vue");
69
- expect(screen.getByRole("radio", { name: "Vue" })).toHaveAttribute(
70
- "aria-checked",
71
- "true"
72
- );
73
- });
74
-
75
- it("supports controlled mode", async () => {
76
- const user = userEvent.setup();
77
-
78
- function Demo() {
79
- const [value, setValue] = useState("react");
80
-
81
- return (
82
- <SegmentedControl
83
- data={data}
84
- value={value}
85
- onChange={setValue}
86
- />
87
- );
88
- }
89
-
90
- await render(<Demo />);
91
-
92
- await user.click(screen.getByRole("radio", { name: "Svelte" }));
93
-
94
- expect(screen.getByRole("radio", { name: "Svelte" })).toHaveAttribute(
95
- "aria-checked",
96
- "true"
97
- );
98
- });
99
-
100
- it("does not select disabled item", async () => {
101
- const user = userEvent.setup();
102
- const onChange = vi.fn();
103
-
104
- await render(
105
- <SegmentedControl
106
- defaultValue="react"
107
- onChange={onChange}
108
- data={[
109
- { value: "react", label: "React" },
110
- { value: "vue", label: "Vue", disabled: true }
111
- ]}
112
- />
113
- );
114
-
115
- const disabledControl = screen.getByRole("radio", { name: "Vue" });
116
-
117
- expect(disabledControl).toBeDisabled();
118
-
119
- await user.click(disabledControl);
120
-
121
- expect(onChange).not.toHaveBeenCalled();
122
- expect(disabledControl).toHaveAttribute("aria-checked", "false");
123
- });
124
-
125
- it("supports keyboard navigation and skips disabled items", async () => {
126
- const user = userEvent.setup();
127
-
128
- await render(
129
- <SegmentedControl
130
- defaultValue="react"
131
- data={[
132
- { value: "react", label: "React" },
133
- { value: "vue", label: "Vue", disabled: true },
134
- { value: "svelte", label: "Svelte" }
135
- ]}
136
- />
137
- );
138
-
139
- const reactControl = screen.getByRole("radio", { name: "React" });
140
- reactControl.focus();
141
-
142
- await user.keyboard("{ArrowRight}");
143
-
144
- const svelteControl = screen.getByRole("radio", { name: "Svelte" });
145
-
146
- expect(svelteControl).toHaveFocus();
147
- expect(svelteControl).toHaveAttribute("aria-checked", "true");
148
- });
149
-
150
- it("supports root and slot class names", async () => {
151
- const { container } = await render(
152
- <SegmentedControl
153
- data={data}
154
- className="custom-root"
155
- classNames={{
156
- control: "custom-control",
157
- label: "custom-label"
158
- }}
159
- />
160
- );
161
-
162
- const root = container.firstElementChild as HTMLDivElement;
163
- const control = screen.getByRole("radio", { name: "React" });
164
- const label = screen.getByText("React");
165
-
166
- expect(root).toHaveClass("custom-root");
167
- expect(control).toHaveClass("custom-control");
168
- expect(label).toHaveClass("custom-label");
169
- });
170
- });
@@ -1,255 +0,0 @@
1
- import { useId, useUncontrolled } from "@refraktor/utils";
2
- import { KeyboardEvent, useMemo, useRef } from "react";
3
- import { useTheme } from "../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../utils";
11
- import { getSize } from "./segmented-control.styles";
12
- import {
13
- SegmentedControlClassNames,
14
- SegmentedControlFactoryPayload,
15
- SegmentedControlProps
16
- } from "./segmented-control.types";
17
-
18
- const defaultProps = {
19
- size: "md",
20
- radius: "default",
21
- fullWidth: false,
22
- disabled: false
23
- } satisfies Partial<SegmentedControlProps>;
24
-
25
- const SegmentedControl = factory<SegmentedControlFactoryPayload>(
26
- (_props, ref) => {
27
- const { cx, getRadius } = useTheme();
28
- const {
29
- id,
30
- data,
31
- value,
32
- defaultValue,
33
- onChange,
34
- size,
35
- radius,
36
- fullWidth,
37
- disabled,
38
- name,
39
- className,
40
- classNames,
41
- ...props
42
- } = useProps("SegmentedControl", defaultProps, _props);
43
- const classes = useClassNames("SegmentedControl", classNames);
44
- const _id = useId(id);
45
-
46
- const firstEnabledValue = useMemo(
47
- () => data.find((item) => !item.disabled)?.value ?? "",
48
- [data]
49
- );
50
-
51
- const [selectedValue, setSelectedValue] = useUncontrolled<string>({
52
- value,
53
- defaultValue,
54
- finalValue: firstEnabledValue,
55
- onChange
56
- });
57
-
58
- const sizeStyles = getSize(size);
59
- const controlRefs = useRef<Array<HTMLButtonElement | null>>([]);
60
-
61
- const enabledIndexes = useMemo(() => {
62
- const indexes: number[] = [];
63
-
64
- data.forEach((item, index) => {
65
- if (!item.disabled) {
66
- indexes.push(index);
67
- }
68
- });
69
-
70
- return indexes;
71
- }, [data]);
72
-
73
- const activeIndex = useMemo(
74
- () => data.findIndex((item) => item.value === selectedValue),
75
- [data, selectedValue]
76
- );
77
-
78
- const tabStopIndex = useMemo(() => {
79
- if (activeIndex !== -1 && !data[activeIndex]?.disabled) {
80
- return activeIndex;
81
- }
82
-
83
- return enabledIndexes[0] ?? -1;
84
- }, [activeIndex, data, enabledIndexes]);
85
-
86
- const selectByIndex = (index: number) => {
87
- const item = data[index];
88
-
89
- if (
90
- !item ||
91
- disabled ||
92
- item.disabled ||
93
- item.value === selectedValue
94
- ) {
95
- return;
96
- }
97
-
98
- setSelectedValue(item.value);
99
- };
100
-
101
- const moveSelection = (currentIndex: number, direction: 1 | -1) => {
102
- if (disabled || enabledIndexes.length === 0) {
103
- return;
104
- }
105
-
106
- const currentEnabledPosition = enabledIndexes.indexOf(currentIndex);
107
- const basePosition =
108
- currentEnabledPosition === -1 ? 0 : currentEnabledPosition;
109
- const nextPosition =
110
- (basePosition + direction + enabledIndexes.length) %
111
- enabledIndexes.length;
112
- const nextIndex = enabledIndexes[nextPosition];
113
-
114
- selectByIndex(nextIndex);
115
- controlRefs.current[nextIndex]?.focus();
116
- };
117
-
118
- const handleKeyDown = (
119
- event: KeyboardEvent<HTMLButtonElement>,
120
- index: number,
121
- isControlDisabled: boolean
122
- ) => {
123
- if (event.defaultPrevented || disabled || isControlDisabled) {
124
- return;
125
- }
126
-
127
- if (event.key === "ArrowRight" || event.key === "ArrowDown") {
128
- event.preventDefault();
129
- moveSelection(index, 1);
130
- return;
131
- }
132
-
133
- if (event.key === "ArrowLeft" || event.key === "ArrowUp") {
134
- event.preventDefault();
135
- moveSelection(index, -1);
136
- return;
137
- }
138
-
139
- if (event.key === "Home") {
140
- event.preventDefault();
141
-
142
- const firstEnabledIndex = enabledIndexes[0];
143
-
144
- if (firstEnabledIndex !== undefined) {
145
- selectByIndex(firstEnabledIndex);
146
- controlRefs.current[firstEnabledIndex]?.focus();
147
- }
148
-
149
- return;
150
- }
151
-
152
- if (event.key === "End") {
153
- event.preventDefault();
154
-
155
- const lastEnabledIndex =
156
- enabledIndexes[enabledIndexes.length - 1];
157
-
158
- if (lastEnabledIndex !== undefined) {
159
- selectByIndex(lastEnabledIndex);
160
- controlRefs.current[lastEnabledIndex]?.focus();
161
- }
162
- }
163
- };
164
-
165
- return (
166
- <div
167
- ref={ref}
168
- id={_id}
169
- role="radiogroup"
170
- data-disabled={disabled}
171
- aria-disabled={disabled}
172
- className={cx(
173
- "relative inline-flex items-stretch border border-[var(--refraktor-border)]",
174
- "bg-[var(--refraktor-bg-subtle)]",
175
- "data-[disabled=true]:opacity-50",
176
- fullWidth && "w-full",
177
- sizeStyles.root,
178
- getRadius(radius),
179
- classes.root,
180
- className
181
- )}
182
- {...props}
183
- >
184
- {data.map((item, index) => {
185
- const isActive = item.value === selectedValue;
186
- const isControlDisabled = !!(disabled || item.disabled);
187
-
188
- return (
189
- <button
190
- key={item.value}
191
- ref={(node) => {
192
- controlRefs.current[index] = node;
193
- }}
194
- type="button"
195
- role="radio"
196
- id={`${_id}-control-${index}`}
197
- aria-checked={isActive}
198
- aria-disabled={isControlDisabled}
199
- data-active={isActive}
200
- data-disabled={isControlDisabled}
201
- disabled={isControlDisabled}
202
- tabIndex={
203
- isControlDisabled || tabStopIndex !== index
204
- ? -1
205
- : 0
206
- }
207
- className={cx(
208
- "relative inline-flex items-center justify-center whitespace-nowrap select-none outline-none transition-colors cursor-pointer",
209
- "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--refraktor-primary)]",
210
- "data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none data-[disabled=true]:cursor-not-allowed",
211
- item.icon && "gap-1.5",
212
- fullWidth && "flex-1",
213
- sizeStyles.control,
214
- sizeStyles.label,
215
- getRadius(radius),
216
- isActive
217
- ? "bg-[var(--refraktor-primary)] text-[var(--refraktor-primary-text)]"
218
- : "text-[var(--refraktor-text-secondary)] hover:bg-[var(--refraktor-bg-hover)] hover:text-[var(--refraktor-text)]",
219
- classes.control
220
- )}
221
- onClick={() => selectByIndex(index)}
222
- onKeyDown={(event) =>
223
- handleKeyDown(event, index, isControlDisabled)
224
- }
225
- >
226
- {item.icon && (
227
- <span
228
- aria-hidden="true"
229
- className="inline-flex shrink-0 leading-none"
230
- >
231
- {item.icon}
232
- </span>
233
- )}
234
-
235
- <span className={cx("leading-none", classes.label)}>
236
- {item.label}
237
- </span>
238
- </button>
239
- );
240
- })}
241
-
242
- {name && (
243
- <input type="hidden" name={name} value={selectedValue} />
244
- )}
245
- </div>
246
- );
247
- }
248
- );
249
-
250
- SegmentedControl.displayName = "@refraktor/core/SegmentedControl";
251
- SegmentedControl.configure = createComponentConfig<SegmentedControlProps>();
252
- SegmentedControl.classNames =
253
- createClassNamesConfig<SegmentedControlClassNames>();
254
-
255
- export default SegmentedControl;
@@ -1,78 +0,0 @@
1
- import { ComponentPropsWithoutRef, ReactNode } from "react";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- FactoryPayload
7
- } from "../../utils";
8
-
9
- export interface SegmentedControlItem {
10
- /** Item value */
11
- value: string;
12
-
13
- /** Item label */
14
- label: ReactNode;
15
-
16
- /** Optional item icon */
17
- icon?: ReactNode;
18
-
19
- /** Whether item is disabled */
20
- disabled?: boolean;
21
- }
22
-
23
- export type SegmentedControlClassNames = {
24
- root?: string;
25
- control?: string;
26
- label?: string;
27
- };
28
-
29
- export interface SegmentedControlProps extends Omit<
30
- ComponentPropsWithoutRef<"div">,
31
- "onChange"
32
- > {
33
- /** Items to render */
34
- data: SegmentedControlItem[];
35
-
36
- /** Selected value (controlled) */
37
- value?: string;
38
-
39
- /** Initial selected value (uncontrolled) */
40
- defaultValue?: string;
41
-
42
- /** Callback called when selected value changes */
43
- onChange?: (value: string) => void;
44
-
45
- /** The size of segmented control @default `md` */
46
- size?: RefraktorSize;
47
-
48
- /** The radius of segmented control @default `default` */
49
- radius?: RefraktorRadius;
50
-
51
- /** Whether segmented control should take full width @default `false` */
52
- fullWidth?: boolean;
53
-
54
- /** Whether segmented control is disabled @default `false` */
55
- disabled?: boolean;
56
-
57
- /** Hidden input name for forms */
58
- name?: string;
59
-
60
- /** Used for editing root class name */
61
- className?: string;
62
-
63
- /** Used for styling different parts of the component */
64
- classNames?: SegmentedControlClassNames;
65
- }
66
-
67
- export interface SegmentedControlFactoryPayload extends FactoryPayload {
68
- props: SegmentedControlProps;
69
- ref: HTMLDivElement;
70
- compound: {
71
- configure: ReturnType<
72
- typeof createComponentConfig<SegmentedControlProps>
73
- >;
74
- classNames: ReturnType<
75
- typeof createClassNamesConfig<SegmentedControlClassNames>
76
- >;
77
- };
78
- }
@@ -1,20 +0,0 @@
1
- export { default as Select } from "./select";
2
- export { SelectRoot } from "./select-root";
3
- export { SelectTrigger } from "./select-trigger";
4
- export { SelectDropdown } from "./select-dropdown";
5
- export { SelectGroup } from "./select-group";
6
- export { SelectItem } from "./select-item";
7
- export type {
8
- SelectProps,
9
- SelectRootProps,
10
- SelectTriggerProps,
11
- SelectDropdownProps,
12
- SelectGroupProps,
13
- SelectItemProps,
14
- SelectItemData,
15
- SelectGroupData,
16
- SelectData,
17
- SelectClassNames,
18
- SelectPositioning,
19
- SelectMiddlewares
20
- } from "./select.types";
@@ -1 +0,0 @@
1
- export { default as SelectDropdown } from "./select-dropdown";