@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,57 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { render, screen } from "../../vitest";
3
- import Button from "./button";
4
- import { createRef } from "react";
5
-
6
- describe("@refraktor/core/Button", () => {
7
- it("should render correctly", async () => {
8
- await render(<Button>Click me</Button>);
9
- expect(screen.getByText("Click me")).toBeInTheDocument();
10
- });
11
-
12
- it("forwards ref correctly", async () => {
13
- const ref = createRef<HTMLButtonElement>();
14
-
15
- await render(<Button ref={ref}>Click me</Button>);
16
-
17
- expect(ref.current).toBeInstanceOf(HTMLButtonElement);
18
- expect(ref.current?.tagName).toBe("BUTTON");
19
- expect(ref.current?.textContent).toBe("Click me");
20
- });
21
-
22
- it("handles click event correctly", async () => {
23
- const handleClick = vi.fn();
24
-
25
- await render(<Button onClick={handleClick}>Click me</Button>);
26
- screen.getByText("Click me").click();
27
- expect(handleClick).toHaveBeenCalled();
28
- });
29
-
30
- it("disables button when disabled prop is true", async () => {
31
- await render(<Button disabled>Click me</Button>);
32
-
33
- const button = screen.getByRole("button", { name: "Click me" });
34
-
35
- expect(button).toBeDisabled();
36
- expect(button).toHaveAttribute("aria-disabled", "true");
37
- expect(button).toHaveAttribute("data-disabled", "true");
38
- });
39
-
40
- it("renders left section correctly", async () => {
41
- await render(
42
- <Button leftSection={<span data-testid="left-section">🚀</span>}>
43
- Click me
44
- </Button>
45
- );
46
- expect(screen.getByTestId("left-section")).toBeInTheDocument();
47
- });
48
-
49
- it("renders right section correctly", async () => {
50
- await render(
51
- <Button rightSection={<span data-testid="right-section">🚀</span>}>
52
- Click me
53
- </Button>
54
- );
55
- expect(screen.getByTestId("right-section")).toBeInTheDocument();
56
- });
57
- });
@@ -1,110 +0,0 @@
1
- import { useId } from "@refraktor/utils";
2
- import {
3
- createClassNamesConfig,
4
- createComponentConfig,
5
- polymorphicFactory,
6
- useClassNames,
7
- useProps
8
- } from "../../utils";
9
- import { useTheme } from "../../theme";
10
- import { Loader } from "../loader";
11
- import {
12
- ButtonClassNames,
13
- ButtonFactoryPayload,
14
- ButtonProps
15
- } from "./button.types";
16
- import { getSize, getVariant } from "./button.styles";
17
-
18
- const defaultProps = {
19
- size: "md",
20
- radius: "default",
21
- variant: "default"
22
- } satisfies Partial<ButtonProps>;
23
-
24
- const Button = polymorphicFactory<ButtonFactoryPayload>((_props, ref) => {
25
- const { cx, getRadius } = useTheme();
26
- const {
27
- as,
28
- children,
29
- id,
30
- size,
31
- radius,
32
- variant,
33
- disabled,
34
- loading,
35
- loaderProps,
36
- fullWidth,
37
- leftSection,
38
- rightSection,
39
- classNames,
40
- className,
41
- ...props
42
- } = useProps("Button", defaultProps, _props);
43
- const classes = useClassNames("Button", classNames);
44
-
45
- const Component = as ?? "button";
46
- const _id = useId(id);
47
-
48
- return (
49
- <Component
50
- id={_id}
51
- ref={ref}
52
- disabled={Component === "button" ? disabled || loading : undefined}
53
- className={cx(
54
- "inline-flex items-center justify-center cursor-pointer transition-all",
55
- "[&_svg]:pointer-events-none [&_svg]:shrink-0 outline-none select-none active:scale-[0.98]",
56
- "[&[data-disabled=true]]:opacity-50 [&[data-disabled=true]]:pointer-events-none [&[data-disabled=true]]:cursor-not-allowed",
57
- fullWidth && "w-full",
58
- getSize(size),
59
- getRadius(radius),
60
- getVariant(variant),
61
- classes.root,
62
- className
63
- )}
64
- {...props}
65
- data-disabled={disabled || loading}
66
- aria-disabled={disabled || loading}
67
- >
68
- <div
69
- className={cx(
70
- "inline-flex items-center justify-center",
71
- classes.container
72
- )}
73
- >
74
- {(loading || leftSection) && (
75
- <span
76
- className={cx(
77
- "shrink-0 mr-2 inline-flex",
78
- classes.leftSection
79
- )}
80
- >
81
- {loading ? (
82
- <Loader size={16} {...loaderProps} />
83
- ) : (
84
- leftSection
85
- )}
86
- </span>
87
- )}
88
-
89
- {children}
90
-
91
- {rightSection && (
92
- <span
93
- className={cx(
94
- "shrink-0 ml-2 inline-flex",
95
- classes.rightSection
96
- )}
97
- >
98
- {rightSection}
99
- </span>
100
- )}
101
- </div>
102
- </Component>
103
- );
104
- });
105
-
106
- Button.displayName = "@refraktor/core/Button";
107
- Button.configure = createComponentConfig<ButtonProps>();
108
- Button.classNames = createClassNamesConfig<ButtonClassNames>();
109
-
110
- export default Button;
@@ -1,69 +0,0 @@
1
- import { ButtonHTMLAttributes, ReactNode } from "react";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- PolymorphicFactoryPayload
7
- } from "../../utils";
8
- import { LoaderProps } from "../loader";
9
-
10
- export type ButtonSize =
11
- | RefraktorSize
12
- | "icon-xs"
13
- | "icon-sm"
14
- | "icon-md"
15
- | "icon-lg"
16
- | "icon-xl";
17
- export type ButtonVariant = "default" | "filled" | "outline" | "ghost";
18
-
19
- export type ButtonClassNames = {
20
- root?: string;
21
- container?: string;
22
- leftSection?: string;
23
- rightSection?: string;
24
- };
25
-
26
- export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
27
- /** The size of the button @default `md` */
28
- size?: ButtonSize;
29
-
30
- /** The radius of the button @default `md` */
31
- radius?: RefraktorRadius;
32
-
33
- /** The variant of the button @default `default` */
34
- variant?: ButtonVariant;
35
-
36
- /** Whether the button is disabled @default `false` */
37
- disabled?: boolean;
38
-
39
- /** Whether the button is loading @default `false` */
40
- loading?: boolean;
41
-
42
- /** The props for the loader. Uses the Loader component */
43
- loaderProps?: LoaderProps;
44
-
45
- /** Whether the button should take the full width of its container @default `false` */
46
- fullWidth?: boolean;
47
-
48
- /** The left section of the button */
49
- leftSection?: ReactNode;
50
-
51
- /** The right section of the button */
52
- rightSection?: ReactNode;
53
-
54
- /** Used for styling different parts of the component */
55
- classNames?: ButtonClassNames;
56
-
57
- /** Used for editing root class name */
58
- className?: string;
59
- }
60
-
61
- export interface ButtonFactoryPayload extends PolymorphicFactoryPayload {
62
- props: ButtonProps;
63
- defaultRef: HTMLButtonElement;
64
- defaultComponent: "button";
65
- compound: {
66
- configure: ReturnType<typeof createComponentConfig<ButtonProps>>;
67
- classNames: ReturnType<typeof createClassNamesConfig<ButtonClassNames>>;
68
- };
69
- }
@@ -1,2 +0,0 @@
1
- export { default as Button } from "./button";
2
- export type { ButtonProps, ButtonClassNames } from "./button.types";
@@ -1,93 +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 { CheckboxGroupProvider } from "../checkbox.context";
11
- import {
12
- CheckboxGroupClassNames,
13
- CheckboxGroupFactoryPayload,
14
- CheckboxGroupProps
15
- } from "../checkbox.types";
16
-
17
- const defaultProps = {
18
- orientation: "vertical"
19
- } satisfies Partial<CheckboxGroupProps>;
20
-
21
- const CheckboxGroup = factory<CheckboxGroupFactoryPayload>((_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("CheckboxGroup", defaultProps, _props);
38
- const classes = useClassNames("CheckboxGroup", classNames);
39
-
40
- const _id = useId(id);
41
-
42
- const [values, setValues] = useUncontrolled<string[]>({
43
- value,
44
- defaultValue,
45
- finalValue: [],
46
- onChange
47
- });
48
-
49
- const handleValueChange = (checkboxValue: string, checked: boolean) => {
50
- const nextValues = checked
51
- ? values.includes(checkboxValue)
52
- ? values
53
- : [...values, checkboxValue]
54
- : values.filter((itemValue) => itemValue !== checkboxValue);
55
-
56
- setValues(nextValues);
57
- };
58
-
59
- return (
60
- <CheckboxGroupProvider
61
- value={{
62
- value: values,
63
- onValueChange: handleValueChange,
64
- name,
65
- disabled,
66
- size,
67
- radius
68
- }}
69
- >
70
- <div
71
- ref={ref}
72
- id={_id}
73
- className={cx(
74
- "inline-flex",
75
- orientation === "horizontal"
76
- ? "flex-row flex-wrap gap-3"
77
- : "flex-col gap-2",
78
- classes.root,
79
- className
80
- )}
81
- {...props}
82
- >
83
- {children}
84
- </div>
85
- </CheckboxGroupProvider>
86
- );
87
- });
88
-
89
- CheckboxGroup.displayName = "@refraktor/core/CheckboxGroup";
90
- CheckboxGroup.configure = createComponentConfig<CheckboxGroupProps>();
91
- CheckboxGroup.classNames = createClassNamesConfig<CheckboxGroupClassNames>();
92
-
93
- export default CheckboxGroup;
@@ -1 +0,0 @@
1
- export { default as CheckboxGroup } from "./checkbox-group";
@@ -1,14 +0,0 @@
1
- import { createOptionalContext } from "@refraktor/utils";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
-
4
- export interface CheckboxGroupContextValue {
5
- value: string[];
6
- onValueChange: (checkboxValue: string, checked: boolean) => void;
7
- name?: string;
8
- disabled?: boolean;
9
- size?: RefraktorSize;
10
- radius?: RefraktorRadius;
11
- }
12
-
13
- export const [CheckboxGroupProvider, useCheckboxGroupContext] =
14
- createOptionalContext<CheckboxGroupContextValue>();
@@ -1,49 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- type CheckboxSizeStyles = {
4
- indicator: string;
5
- icon: string;
6
- label: string;
7
- description: string;
8
- gap: string;
9
- };
10
-
11
- const sizes: Record<RefraktorSize, CheckboxSizeStyles> = {
12
- xs: {
13
- indicator: "h-3.5 w-3.5",
14
- icon: "h-2.5 w-2.5",
15
- label: "text-[10px]",
16
- description: "text-[10px]",
17
- gap: "gap-1.5"
18
- },
19
- sm: {
20
- indicator: "h-4 w-4",
21
- icon: "h-3 w-3",
22
- label: "text-xs",
23
- description: "text-xs",
24
- gap: "gap-2"
25
- },
26
- md: {
27
- indicator: "h-5 w-5",
28
- icon: "h-3.5 w-3.5",
29
- label: "text-sm",
30
- description: "text-xs",
31
- gap: "gap-2"
32
- },
33
- lg: {
34
- indicator: "h-6 w-6",
35
- icon: "h-4 w-4",
36
- label: "text-base",
37
- description: "text-sm",
38
- gap: "gap-2.5"
39
- },
40
- xl: {
41
- indicator: "h-7 w-7",
42
- icon: "h-4.5 w-4.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,80 +0,0 @@
1
- import { createRef } from "react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { render, screen, userEvent } from "../../vitest";
4
- import Checkbox from "./checkbox";
5
-
6
- describe("@refraktor/core/Checkbox", () => {
7
- it("renders correctly", async () => {
8
- await render(<Checkbox label="Accept terms" />);
9
-
10
- expect(
11
- screen.getByRole("checkbox", { name: "Accept terms" })
12
- ).toBeInTheDocument();
13
- });
14
-
15
- it("forwards ref correctly", async () => {
16
- const ref = createRef<HTMLInputElement>();
17
-
18
- await render(<Checkbox ref={ref} label="Accept terms" />);
19
-
20
- expect(ref.current).toBeInstanceOf(HTMLInputElement);
21
- expect(ref.current?.tagName).toBe("INPUT");
22
- expect(ref.current?.type).toBe("checkbox");
23
- });
24
-
25
- it("handles change events", async () => {
26
- const user = userEvent.setup();
27
- const onChange = vi.fn();
28
-
29
- await render(<Checkbox label="Accept terms" onChange={onChange} />);
30
-
31
- const input = screen.getByRole("checkbox", { name: "Accept terms" });
32
- await user.click(input);
33
-
34
- expect(input).toBeChecked();
35
- expect(onChange).toHaveBeenCalledTimes(1);
36
- });
37
-
38
- it("supports indeterminate state", async () => {
39
- await render(<Checkbox label="Select all" indeterminate />);
40
-
41
- const input = screen.getByRole("checkbox", { name: "Select all" });
42
-
43
- expect(input).toHaveAttribute("aria-checked", "mixed");
44
- expect((input as HTMLInputElement).indeterminate).toBe(true);
45
- });
46
-
47
- it("supports checkbox group", async () => {
48
- const user = userEvent.setup();
49
- const onChange = vi.fn();
50
-
51
- await render(
52
- <Checkbox.Group defaultValue={["react"]} onChange={onChange}>
53
- <Checkbox value="react" label="React" />
54
- <Checkbox value="vue" label="Vue" />
55
- </Checkbox.Group>
56
- );
57
-
58
- const reactInput = screen.getByRole("checkbox", { name: "React" });
59
- const vueInput = screen.getByRole("checkbox", { name: "Vue" });
60
-
61
- expect(reactInput).toBeChecked();
62
- expect(vueInput).not.toBeChecked();
63
-
64
- await user.click(vueInput);
65
- expect(onChange).toHaveBeenLastCalledWith(["react", "vue"]);
66
-
67
- await user.click(reactInput);
68
- expect(onChange).toHaveBeenLastCalledWith(["vue"]);
69
- });
70
-
71
- it("propagates disabled state from group", async () => {
72
- await render(
73
- <Checkbox.Group disabled>
74
- <Checkbox value="react" label="React" />
75
- </Checkbox.Group>
76
- );
77
-
78
- expect(screen.getByRole("checkbox", { name: "React" })).toBeDisabled();
79
- });
80
- });
@@ -1,192 +0,0 @@
1
- import { useEffect, 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 { CheckIcon, MinusIcon } from "../../icons";
12
- import { CheckboxGroup } from "./checkbox-group";
13
- import { useCheckboxGroupContext } from "./checkbox.context";
14
- import {
15
- CheckboxClassNames,
16
- CheckboxFactoryPayload,
17
- CheckboxProps
18
- } from "./checkbox.types";
19
- import { getSize } from "./checkbox.styles";
20
-
21
- const defaultProps = {
22
- labelPosition: "right"
23
- } satisfies Partial<CheckboxProps>;
24
-
25
- const Checkbox = factory<CheckboxFactoryPayload>((_props, ref) => {
26
- const { cx, getRadius } = useTheme();
27
- const {
28
- id,
29
- checked,
30
- defaultChecked,
31
- onChange,
32
- indeterminate,
33
- value,
34
- name,
35
- size,
36
- radius,
37
- disabled,
38
- label,
39
- labelPosition,
40
- description,
41
- error,
42
- className,
43
- classNames,
44
- ...props
45
- } = useProps("Checkbox", defaultProps, _props);
46
- const classes = useClassNames("Checkbox", classNames);
47
- const groupContext = useCheckboxGroupContext();
48
-
49
- const [uncontrolledValue, handleChange] = useUncontrolled({
50
- value: checked,
51
- defaultValue: defaultChecked,
52
- finalValue: false
53
- });
54
-
55
- const _id = useId(id);
56
- const inputRef = useRef<HTMLInputElement>(null);
57
- const mergedRef = useMergedRefs(ref, inputRef);
58
-
59
- const hasGroupValue = !!groupContext && typeof value === "string";
60
- const isChecked = hasGroupValue
61
- ? groupContext.value.includes(value)
62
- : uncontrolledValue;
63
- const isIndeterminate = !!indeterminate;
64
- const isDisabled = !!(disabled || groupContext?.disabled);
65
-
66
- const resolvedName = name ?? groupContext?.name;
67
- const resolvedSize = size ?? groupContext?.size ?? "md";
68
- const resolvedRadius = radius ?? groupContext?.radius ?? "sm";
69
- const sizeClass = getSize(resolvedSize);
70
-
71
- useEffect(() => {
72
- if (inputRef.current) {
73
- inputRef.current.indeterminate = isIndeterminate;
74
- }
75
- }, [isIndeterminate, isChecked]);
76
-
77
- const handleOnChange = (event: React.ChangeEvent<HTMLInputElement>) => {
78
- const nextChecked = event.currentTarget.checked;
79
-
80
- if (hasGroupValue) {
81
- groupContext.onValueChange(value, nextChecked);
82
- } else {
83
- handleChange(nextChecked);
84
- }
85
-
86
- onChange?.(event);
87
- };
88
-
89
- return (
90
- <div className={cx("inline-flex flex-col", classes.root, className)}>
91
- <label
92
- className={cx(
93
- "inline-flex items-center select-none w-fit",
94
- sizeClass.gap,
95
- isDisabled
96
- ? "opacity-50 cursor-not-allowed"
97
- : "cursor-pointer",
98
- labelPosition === "left" ? "flex-row-reverse" : "flex-row",
99
- classes.body
100
- )}
101
- htmlFor={_id}
102
- >
103
- <input
104
- {...props}
105
- id={_id}
106
- ref={mergedRef}
107
- type="checkbox"
108
- value={value}
109
- name={resolvedName}
110
- className={cx("sr-only peer", classes.input)}
111
- checked={!!isChecked}
112
- onChange={handleOnChange}
113
- disabled={isDisabled}
114
- aria-checked={isIndeterminate ? "mixed" : undefined}
115
- />
116
-
117
- <span
118
- className={cx(
119
- "relative inline-flex items-center justify-center shrink-0 border transition-all",
120
- "bg-[var(--refraktor-bg)] border-[var(--refraktor-border)]",
121
- "peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-[var(--refraktor-primary)]",
122
- "data-[checked=true]:bg-[var(--refraktor-primary)] data-[checked=true]:border-[var(--refraktor-primary)]",
123
- "data-[indeterminate=true]:bg-[var(--refraktor-primary)] data-[indeterminate=true]:border-[var(--refraktor-primary)]",
124
- sizeClass.indicator,
125
- getRadius(resolvedRadius),
126
- classes.indicator
127
- )}
128
- data-checked={isChecked}
129
- data-indeterminate={isIndeterminate}
130
- >
131
- {(isChecked || isIndeterminate) && (
132
- <span
133
- className={cx(
134
- "text-[var(--refraktor-primary-text)]",
135
- sizeClass.icon,
136
- classes.icon
137
- )}
138
- >
139
- {isIndeterminate ? (
140
- <MinusIcon size="100%" />
141
- ) : (
142
- <CheckIcon size="100%" />
143
- )}
144
- </span>
145
- )}
146
- </span>
147
-
148
- {label && (
149
- <span
150
- className={cx(
151
- "text-[var(--refraktor-text)]",
152
- sizeClass.label,
153
- classes.label
154
- )}
155
- >
156
- {label}
157
- </span>
158
- )}
159
- </label>
160
-
161
- {description && (
162
- <p
163
- className={cx(
164
- "text-[var(--refraktor-text-tertiary)] mt-1",
165
- sizeClass.description,
166
- classes.description
167
- )}
168
- >
169
- {description}
170
- </p>
171
- )}
172
-
173
- {error && error !== true && (
174
- <p
175
- className={cx(
176
- "text-[var(--refraktor-colors-red-5)] mt-1 text-xs",
177
- classes.error
178
- )}
179
- >
180
- {error}
181
- </p>
182
- )}
183
- </div>
184
- );
185
- });
186
-
187
- Checkbox.displayName = "@refraktor/core/Checkbox";
188
- Checkbox.configure = createComponentConfig<CheckboxProps>();
189
- Checkbox.classNames = createClassNamesConfig<CheckboxClassNames>();
190
- Checkbox.Group = CheckboxGroup;
191
-
192
- export default Checkbox;