@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,89 +0,0 @@
1
- import { useId, useUncontrolled } from "@refraktor/utils";
2
- import { useTheme } from "../../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- factory,
7
- useClassNames,
8
- useProps
9
- } from "../../../utils";
10
- import { RadioGroupProvider } from "../radio.context";
11
- import {
12
- RadioGroupClassNames,
13
- RadioGroupFactoryPayload,
14
- RadioGroupProps
15
- } from "../radio.types";
16
-
17
- const defaultProps = {
18
- orientation: "vertical"
19
- } satisfies Partial<RadioGroupProps>;
20
-
21
- const RadioGroup = factory<RadioGroupFactoryPayload>((_props, ref) => {
22
- const { cx } = useTheme();
23
- const {
24
- id,
25
- children,
26
- value,
27
- defaultValue,
28
- onChange,
29
- name,
30
- disabled,
31
- size,
32
- radius,
33
- orientation,
34
- className,
35
- classNames,
36
- ...props
37
- } = useProps("RadioGroup", defaultProps, _props);
38
- const classes = useClassNames("RadioGroup", classNames);
39
-
40
- const _id = useId(id);
41
-
42
- const [selectedValue, setSelectedValue] = useUncontrolled<string>({
43
- value,
44
- defaultValue,
45
- finalValue: "",
46
- onChange
47
- });
48
-
49
- const handleValueChange = (radioValue: string) => {
50
- setSelectedValue(radioValue);
51
- };
52
-
53
- const resolvedName = name ?? _id;
54
-
55
- return (
56
- <RadioGroupProvider
57
- value={{
58
- value: selectedValue,
59
- onValueChange: handleValueChange,
60
- name: resolvedName,
61
- disabled,
62
- size,
63
- radius
64
- }}
65
- >
66
- <div
67
- ref={ref}
68
- id={_id}
69
- className={cx(
70
- "inline-flex",
71
- orientation === "horizontal"
72
- ? "flex-row flex-wrap gap-3"
73
- : "flex-col gap-2",
74
- classes.root,
75
- className
76
- )}
77
- {...props}
78
- >
79
- {children}
80
- </div>
81
- </RadioGroupProvider>
82
- );
83
- });
84
-
85
- RadioGroup.displayName = "@refraktor/core/RadioGroup";
86
- RadioGroup.configure = createComponentConfig<RadioGroupProps>();
87
- RadioGroup.classNames = createClassNamesConfig<RadioGroupClassNames>();
88
-
89
- export default RadioGroup;
@@ -1,14 +0,0 @@
1
- import { createOptionalContext } from "@refraktor/utils";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
-
4
- export interface RadioGroupContextValue {
5
- value: string;
6
- onValueChange: (radioValue: string) => void;
7
- name?: string;
8
- disabled?: boolean;
9
- size?: RefraktorSize;
10
- radius?: RefraktorRadius;
11
- }
12
-
13
- export const [RadioGroupProvider, useRadioGroupContext] =
14
- createOptionalContext<RadioGroupContextValue>();
@@ -1,49 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- type RadioSizeStyles = {
4
- indicator: string;
5
- dot: string;
6
- label: string;
7
- description: string;
8
- gap: string;
9
- };
10
-
11
- const sizes: Record<RefraktorSize, RadioSizeStyles> = {
12
- xs: {
13
- indicator: "h-3.5 w-3.5",
14
- dot: "h-1.5 w-1.5",
15
- label: "text-[10px]",
16
- description: "text-[10px]",
17
- gap: "gap-1.5"
18
- },
19
- sm: {
20
- indicator: "h-4 w-4",
21
- dot: "h-2 w-2",
22
- label: "text-xs",
23
- description: "text-xs",
24
- gap: "gap-2"
25
- },
26
- md: {
27
- indicator: "h-5 w-5",
28
- dot: "h-2.5 w-2.5",
29
- label: "text-sm",
30
- description: "text-xs",
31
- gap: "gap-2"
32
- },
33
- lg: {
34
- indicator: "h-6 w-6",
35
- dot: "h-3 w-3",
36
- label: "text-base",
37
- description: "text-sm",
38
- gap: "gap-2.5"
39
- },
40
- xl: {
41
- indicator: "h-7 w-7",
42
- dot: "h-3.5 w-3.5",
43
- label: "text-lg",
44
- description: "text-base",
45
- gap: "gap-3"
46
- }
47
- };
48
-
49
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
@@ -1,75 +0,0 @@
1
- import { createRef } from "react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { render, screen, userEvent } from "../../vitest";
4
- import Radio from "./radio";
5
-
6
- describe("@refraktor/core/Radio", () => {
7
- it("renders correctly", async () => {
8
- await render(<Radio label="React" />);
9
-
10
- expect(
11
- screen.getByRole("radio", { name: "React" })
12
- ).toBeInTheDocument();
13
- });
14
-
15
- it("forwards ref correctly", async () => {
16
- const ref = createRef<HTMLInputElement>();
17
-
18
- await render(<Radio ref={ref} label="React" />);
19
-
20
- expect(ref.current).toBeInstanceOf(HTMLInputElement);
21
- expect(ref.current?.tagName).toBe("INPUT");
22
- expect(ref.current?.type).toBe("radio");
23
- });
24
-
25
- it("handles change events", async () => {
26
- const user = userEvent.setup();
27
- const onChange = vi.fn();
28
-
29
- await render(<Radio label="React" onChange={onChange} />);
30
-
31
- const input = screen.getByRole("radio", { name: "React" });
32
- await user.click(input);
33
-
34
- expect(input).toBeChecked();
35
- expect(onChange).toHaveBeenCalledTimes(1);
36
- });
37
-
38
- it("supports radio group", async () => {
39
- const user = userEvent.setup();
40
- const onChange = vi.fn();
41
-
42
- await render(
43
- <Radio.Group defaultValue="react" onChange={onChange}>
44
- <Radio value="react" label="React" />
45
- <Radio value="vue" label="Vue" />
46
- </Radio.Group>
47
- );
48
-
49
- const reactInput = screen.getByRole("radio", { name: "React" });
50
- const vueInput = screen.getByRole("radio", { name: "Vue" });
51
-
52
- expect(reactInput).toBeChecked();
53
- expect(vueInput).not.toBeChecked();
54
-
55
- await user.click(vueInput);
56
- expect(onChange).toHaveBeenLastCalledWith("vue");
57
- expect(vueInput).toBeChecked();
58
- expect(reactInput).not.toBeChecked();
59
-
60
- await user.click(reactInput);
61
- expect(onChange).toHaveBeenLastCalledWith("react");
62
- expect(reactInput).toBeChecked();
63
- expect(vueInput).not.toBeChecked();
64
- });
65
-
66
- it("propagates disabled state from group", async () => {
67
- await render(
68
- <Radio.Group disabled>
69
- <Radio value="react" label="React" />
70
- </Radio.Group>
71
- );
72
-
73
- expect(screen.getByRole("radio", { name: "React" })).toBeDisabled();
74
- });
75
- });
@@ -1,173 +0,0 @@
1
- import { useRef } from "react";
2
- import { useId, useMergedRefs, useUncontrolled } from "@refraktor/utils";
3
- import { useTheme } from "../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../utils";
11
- import { RadioGroup } from "./radio-group";
12
- import { useRadioGroupContext } from "./radio.context";
13
- import {
14
- RadioClassNames,
15
- RadioFactoryPayload,
16
- RadioProps
17
- } from "./radio.types";
18
- import { getSize } from "./radio.styles";
19
-
20
- const defaultProps = {
21
- labelPosition: "right"
22
- } satisfies Partial<RadioProps>;
23
-
24
- const Radio = factory<RadioFactoryPayload>((_props, ref) => {
25
- const { cx, getRadius } = useTheme();
26
- const {
27
- id,
28
- checked,
29
- defaultChecked,
30
- onChange,
31
- value,
32
- name,
33
- size,
34
- radius,
35
- disabled,
36
- label,
37
- labelPosition,
38
- description,
39
- error,
40
- className,
41
- classNames,
42
- ...props
43
- } = useProps("Radio", defaultProps, _props);
44
- const classes = useClassNames("Radio", classNames);
45
- const groupContext = useRadioGroupContext();
46
-
47
- const [uncontrolledValue, handleChange] = useUncontrolled({
48
- value: checked,
49
- defaultValue: defaultChecked,
50
- finalValue: false
51
- });
52
-
53
- const _id = useId(id);
54
- const inputRef = useRef<HTMLInputElement>(null);
55
- const mergedRef = useMergedRefs(ref, inputRef);
56
-
57
- const hasGroupValue = !!groupContext && typeof value === "string";
58
- const isChecked = hasGroupValue
59
- ? groupContext.value === value
60
- : uncontrolledValue;
61
- const isDisabled = !!(disabled || groupContext?.disabled);
62
-
63
- const resolvedName = name ?? groupContext?.name;
64
- const resolvedSize = size ?? groupContext?.size ?? "md";
65
- const resolvedRadius = radius ?? groupContext?.radius ?? "full";
66
- const sizeClass = getSize(resolvedSize);
67
-
68
- const handleOnChange = (event: React.ChangeEvent<HTMLInputElement>) => {
69
- const nextChecked = event.currentTarget.checked;
70
-
71
- if (hasGroupValue && nextChecked) {
72
- groupContext.onValueChange(value);
73
- } else {
74
- handleChange(nextChecked);
75
- }
76
-
77
- onChange?.(event);
78
- };
79
-
80
- return (
81
- <div className={cx("inline-flex flex-col", classes.root, className)}>
82
- <label
83
- className={cx(
84
- "inline-flex items-center select-none w-fit",
85
- sizeClass.gap,
86
- isDisabled
87
- ? "opacity-50 cursor-not-allowed"
88
- : "cursor-pointer",
89
- labelPosition === "left" ? "flex-row-reverse" : "flex-row",
90
- classes.body
91
- )}
92
- htmlFor={_id}
93
- >
94
- <input
95
- {...props}
96
- id={_id}
97
- ref={mergedRef}
98
- type="radio"
99
- value={value}
100
- name={resolvedName}
101
- className={cx("sr-only peer", classes.input)}
102
- checked={!!isChecked}
103
- onChange={handleOnChange}
104
- disabled={isDisabled}
105
- />
106
-
107
- <span
108
- className={cx(
109
- "relative inline-flex items-center justify-center shrink-0 border transition-all",
110
- "bg-[var(--refraktor-bg)] border-[var(--refraktor-border)]",
111
- "peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[var(--refraktor-primary)]",
112
- "data-[checked=true]:bg-[var(--refraktor-primary)] data-[checked=true]:border-[var(--refraktor-primary)]",
113
- sizeClass.indicator,
114
- getRadius(resolvedRadius),
115
- classes.indicator
116
- )}
117
- data-checked={isChecked}
118
- >
119
- <span
120
- className={cx(
121
- "rounded-full bg-[var(--refraktor-primary-text)] transition-transform scale-0 data-[checked=true]:scale-100",
122
- sizeClass.dot,
123
- classes.dot
124
- )}
125
- data-checked={isChecked}
126
- />
127
- </span>
128
-
129
- {label && (
130
- <span
131
- className={cx(
132
- "text-[var(--refraktor-text)]",
133
- sizeClass.label,
134
- classes.label
135
- )}
136
- >
137
- {label}
138
- </span>
139
- )}
140
- </label>
141
-
142
- {description && (
143
- <p
144
- className={cx(
145
- "text-[var(--refraktor-text-tertiary)] mt-1",
146
- sizeClass.description,
147
- classes.description
148
- )}
149
- >
150
- {description}
151
- </p>
152
- )}
153
-
154
- {error && error !== true && (
155
- <p
156
- className={cx(
157
- "text-[var(--refraktor-colors-red-5)] mt-1 text-xs",
158
- classes.error
159
- )}
160
- >
161
- {error}
162
- </p>
163
- )}
164
- </div>
165
- );
166
- });
167
-
168
- Radio.displayName = "@refraktor/core/Radio";
169
- Radio.configure = createComponentConfig<RadioProps>();
170
- Radio.classNames = createClassNamesConfig<RadioClassNames>();
171
- Radio.Group = RadioGroup;
172
-
173
- export default Radio;
@@ -1,126 +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
- import { RadioGroup } from "./radio-group";
9
-
10
- export type RadioLabelPosition = "left" | "right";
11
- export type RadioGroupOrientation = "vertical" | "horizontal";
12
-
13
- export type RadioClassNames = {
14
- root?: string;
15
- body?: string;
16
- input?: string;
17
- indicator?: string;
18
- dot?: string;
19
- label?: string;
20
- description?: string;
21
- error?: string;
22
- };
23
-
24
- export type RadioGroupClassNames = {
25
- root?: string;
26
- };
27
-
28
- export interface RadioProps extends Omit<
29
- ComponentPropsWithoutRef<"input">,
30
- "size" | "onChange"
31
- > {
32
- /** State of the radio (controlled) */
33
- checked?: boolean;
34
-
35
- /** Initial state of the radio (uncontrolled) */
36
- defaultChecked?: boolean;
37
-
38
- /** Callback called when the radio state changes */
39
- onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
40
-
41
- /** Value used in Radio.Group */
42
- value?: string;
43
-
44
- /** The size of the radio @default `md` */
45
- size?: RefraktorSize;
46
-
47
- /** The radius of the radio @default `full` */
48
- radius?: RefraktorRadius;
49
-
50
- /** The label of the radio */
51
- label?: ReactNode;
52
-
53
- /** The position of the label @default `right` */
54
- labelPosition?: RadioLabelPosition;
55
-
56
- /** Error state or message */
57
- error?: ReactNode;
58
-
59
- /** Description below the radio */
60
- description?: ReactNode;
61
-
62
- /** Used for editing root class name */
63
- className?: string;
64
-
65
- /** Used for styling different parts of the component */
66
- classNames?: RadioClassNames;
67
- }
68
-
69
- export interface RadioGroupProps extends Omit<
70
- ComponentPropsWithoutRef<"div">,
71
- "onChange"
72
- > {
73
- /** Radio items to render */
74
- children: ReactNode;
75
-
76
- /** Selected value (controlled) */
77
- value?: string;
78
-
79
- /** Initial selected value (uncontrolled) */
80
- defaultValue?: string;
81
-
82
- /** Callback called when group value changes */
83
- onChange?: (value: string) => void;
84
-
85
- /** Name propagated to radio inputs in the group */
86
- name?: string;
87
-
88
- /** Whether all radios in group are disabled */
89
- disabled?: boolean;
90
-
91
- /** Shared radio size */
92
- size?: RefraktorSize;
93
-
94
- /** Shared radio radius */
95
- radius?: RefraktorRadius;
96
-
97
- /** Layout direction @default `vertical` */
98
- orientation?: RadioGroupOrientation;
99
-
100
- /** Used for editing root class name */
101
- className?: string;
102
-
103
- /** Used for styling different parts of the component */
104
- classNames?: RadioGroupClassNames;
105
- }
106
-
107
- export interface RadioFactoryPayload extends FactoryPayload {
108
- props: RadioProps;
109
- ref: HTMLInputElement;
110
- compound: {
111
- configure: ReturnType<typeof createComponentConfig<RadioProps>>;
112
- classNames: ReturnType<typeof createClassNamesConfig<RadioClassNames>>;
113
- Group: typeof RadioGroup;
114
- };
115
- }
116
-
117
- export interface RadioGroupFactoryPayload extends FactoryPayload {
118
- props: RadioGroupProps;
119
- ref: HTMLDivElement;
120
- compound: {
121
- configure: ReturnType<typeof createComponentConfig<RadioGroupProps>>;
122
- classNames: ReturnType<
123
- typeof createClassNamesConfig<RadioGroupClassNames>
124
- >;
125
- };
126
- }
@@ -1,6 +0,0 @@
1
- export { default as ScrollArea } from "./scroll-area";
2
- export type {
3
- ScrollAreaProps,
4
- ScrollAreaClassNames,
5
- ScrollAreaOrientation
6
- } from "./scroll-area.types";
@@ -1,72 +0,0 @@
1
- import { createRef } from "react";
2
- import { describe, expect, it } from "vitest";
3
- import { render, screen } from "../../vitest";
4
- import ScrollArea from "./scroll-area";
5
-
6
- describe("@refraktor/core/ScrollArea", () => {
7
- it("renders children with default vertical scroll behavior", async () => {
8
- await render(
9
- <ScrollArea data-testid="scroll-area">
10
- <div>Content</div>
11
- </ScrollArea>
12
- );
13
-
14
- const scrollArea = screen.getByTestId("scroll-area");
15
-
16
- expect(scrollArea).toHaveClass("refraktor-scrollbar");
17
- expect(scrollArea).toHaveClass("overflow-y-auto");
18
- expect(scrollArea).toHaveClass("overflow-x-hidden");
19
- expect(scrollArea).toHaveTextContent("Content");
20
- });
21
-
22
- it("supports horizontal and bidirectional orientation", async () => {
23
- const { rerender } = await render(
24
- <ScrollArea data-testid="scroll-area" orientation="horizontal" />
25
- );
26
-
27
- expect(screen.getByTestId("scroll-area")).toHaveClass(
28
- "overflow-x-auto"
29
- );
30
- expect(screen.getByTestId("scroll-area")).toHaveClass(
31
- "overflow-y-hidden"
32
- );
33
-
34
- rerender(<ScrollArea data-testid="scroll-area" orientation="both" />);
35
-
36
- expect(screen.getByTestId("scroll-area")).toHaveClass("overflow-auto");
37
- });
38
-
39
- it("applies scrollbar size css variable", async () => {
40
- await render(<ScrollArea data-testid="scroll-area" scrollbarSize={10} />);
41
-
42
- const scrollArea = screen.getByTestId("scroll-area");
43
-
44
- expect(scrollArea.style.getPropertyValue("--refraktor-scrollbar-size")).toBe(
45
- "10px"
46
- );
47
- });
48
-
49
- it("supports root and slot class names", async () => {
50
- await render(
51
- <ScrollArea
52
- data-testid="scroll-area"
53
- className="custom-root"
54
- classNames={{ root: "slot-root" }}
55
- />
56
- );
57
-
58
- const scrollArea = screen.getByTestId("scroll-area");
59
-
60
- expect(scrollArea).toHaveClass("custom-root");
61
- expect(scrollArea).toHaveClass("slot-root");
62
- });
63
-
64
- it("forwards ref to root element", async () => {
65
- const ref = createRef<HTMLDivElement>();
66
-
67
- await render(<ScrollArea ref={ref} />);
68
-
69
- expect(ref.current).toBeInstanceOf(HTMLDivElement);
70
- expect(ref.current?.tagName).toBe("DIV");
71
- });
72
- });
@@ -1,70 +0,0 @@
1
- import type { CSSProperties } from "react";
2
- import {
3
- createClassNamesConfig,
4
- createComponentConfig,
5
- factory,
6
- useClassNames,
7
- useProps
8
- } from "../../utils";
9
- import type {
10
- ScrollAreaClassNames,
11
- ScrollAreaFactoryPayload,
12
- ScrollAreaOrientation,
13
- ScrollAreaProps
14
- } from "./scroll-area.types";
15
- import { useTheme } from "../../theme";
16
-
17
- const defaultProps = {
18
- orientation: "vertical",
19
- scrollbarSize: 6
20
- } satisfies Partial<ScrollAreaProps>;
21
-
22
- function getOrientationStyles(orientation: ScrollAreaOrientation): string {
23
- if (orientation === "horizontal") {
24
- return "overflow-x-auto overflow-y-hidden";
25
- }
26
-
27
- if (orientation === "both") {
28
- return "overflow-auto";
29
- }
30
-
31
- return "overflow-y-auto overflow-x-hidden";
32
- }
33
-
34
- const ScrollArea = factory<ScrollAreaFactoryPayload>((_props, ref) => {
35
- const { cx } = useTheme();
36
- const {
37
- orientation,
38
- scrollbarSize,
39
- className,
40
- classNames,
41
- style,
42
- ...props
43
- } = useProps("ScrollArea", defaultProps, _props);
44
- const classes = useClassNames("ScrollArea", classNames);
45
-
46
- const resolvedStyle = {
47
- ...(style ?? {}),
48
- "--refraktor-scrollbar-size": `${scrollbarSize}px`
49
- } as CSSProperties;
50
-
51
- return (
52
- <div
53
- ref={ref}
54
- className={cx(
55
- "refraktor-scrollbar",
56
- getOrientationStyles(orientation),
57
- classes.root,
58
- className
59
- )}
60
- style={resolvedStyle}
61
- {...props}
62
- />
63
- );
64
- });
65
-
66
- ScrollArea.displayName = "@refraktor/core/ScrollArea";
67
- ScrollArea.configure = createComponentConfig<ScrollAreaProps>();
68
- ScrollArea.classNames = createClassNamesConfig<ScrollAreaClassNames>();
69
-
70
- export default ScrollArea;