@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,107 +0,0 @@
1
- import { createRef } from "react";
2
- import { describe, expect, it } from "vitest";
3
- import { render, screen, waitFor } from "../../vitest";
4
- import Progress from "./progress";
5
-
6
- describe("@refraktor/core/Progress", () => {
7
- it("renders with determinate values", async () => {
8
- await render(<Progress value={45} aria-label="Upload progress" />);
9
-
10
- const track = screen.getByRole("progressbar", {
11
- name: "Upload progress"
12
- });
13
- const bar = track.firstElementChild as HTMLDivElement;
14
-
15
- expect(track).toHaveAttribute("aria-valuemin", "0");
16
- expect(track).toHaveAttribute("aria-valuemax", "100");
17
- expect(track).toHaveAttribute("aria-valuenow", "45");
18
- expect(bar).toHaveStyle({ width: "45%" });
19
- });
20
-
21
- it("forwards ref correctly", async () => {
22
- const ref = createRef<HTMLDivElement>();
23
-
24
- await render(<Progress ref={ref} aria-label="Progress" />);
25
-
26
- expect(ref.current).toBeInstanceOf(HTMLDivElement);
27
- expect(ref.current?.tagName).toBe("DIV");
28
- expect(ref.current).toHaveAttribute("role", "progressbar");
29
- });
30
-
31
- it("clamps values outside range", async () => {
32
- const { rerender } = await render(
33
- <Progress value={-20} aria-label="Clamped progress" />
34
- );
35
-
36
- let track = screen.getByRole("progressbar", { name: "Clamped progress" });
37
- let bar = track.firstElementChild as HTMLDivElement;
38
- expect(track).toHaveAttribute("aria-valuenow", "0");
39
- expect(bar).toHaveStyle({ width: "0%" });
40
-
41
- rerender(<Progress value={180} aria-label="Clamped progress" />);
42
-
43
- await waitFor(() => {
44
- track = screen.getByRole("progressbar", { name: "Clamped progress" });
45
- bar = track.firstElementChild as HTMLDivElement;
46
- expect(track).toHaveAttribute("aria-valuenow", "100");
47
- expect(bar).toHaveStyle({ width: "100%" });
48
- });
49
- });
50
-
51
- it("supports custom min and max", async () => {
52
- await render(
53
- <Progress
54
- value={25}
55
- min={20}
56
- max={40}
57
- aria-label="Custom range progress"
58
- />
59
- );
60
-
61
- const track = screen.getByRole("progressbar", {
62
- name: "Custom range progress"
63
- });
64
- const bar = track.firstElementChild as HTMLDivElement;
65
-
66
- expect(track).toHaveAttribute("aria-valuemin", "20");
67
- expect(track).toHaveAttribute("aria-valuemax", "40");
68
- expect(track).toHaveAttribute("aria-valuenow", "25");
69
- expect(bar).toHaveStyle({ width: "25%" });
70
- });
71
-
72
- it("supports indeterminate mode", async () => {
73
- await render(<Progress indeterminate aria-label="Loading progress" />);
74
-
75
- const track = screen.getByRole("progressbar", {
76
- name: "Loading progress"
77
- });
78
- const bar = track.firstElementChild as HTMLDivElement;
79
-
80
- expect(track).not.toHaveAttribute("aria-valuemin");
81
- expect(track).not.toHaveAttribute("aria-valuemax");
82
- expect(track).not.toHaveAttribute("aria-valuenow");
83
- expect(bar).toHaveClass("refraktor-progress-indeterminate");
84
- expect(bar.style.width).toBe("");
85
- });
86
-
87
- it("supports root and slot class names", async () => {
88
- const { container } = await render(
89
- <Progress
90
- aria-label="Styled progress"
91
- className="custom-root"
92
- classNames={{
93
- track: "custom-track",
94
- bar: "custom-bar"
95
- }}
96
- />
97
- );
98
-
99
- const root = container.firstElementChild as HTMLDivElement;
100
- const track = screen.getByRole("progressbar", { name: "Styled progress" });
101
- const bar = track.firstElementChild as HTMLDivElement;
102
-
103
- expect(root).toHaveClass("custom-root");
104
- expect(track).toHaveClass("custom-track");
105
- expect(bar).toHaveClass("custom-bar");
106
- });
107
- });
@@ -1,93 +0,0 @@
1
- import { clamp, useId } 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 {
11
- ProgressClassNames,
12
- ProgressFactoryPayload,
13
- ProgressProps
14
- } from "./progress.types";
15
- import { getSize } from "./progress.styles";
16
-
17
- const defaultProps = {
18
- value: 0,
19
- min: 0,
20
- max: 100,
21
- indeterminate: false,
22
- animated: true,
23
- size: "md",
24
- radius: "full"
25
- } satisfies Partial<ProgressProps>;
26
-
27
- const Progress = factory<ProgressFactoryPayload>((_props, ref) => {
28
- const { cx, getRadius } = useTheme();
29
- const {
30
- id,
31
- value,
32
- min,
33
- max,
34
- indeterminate,
35
- animated,
36
- size,
37
- radius,
38
- className,
39
- classNames,
40
- ...props
41
- } = useProps("Progress", defaultProps, _props);
42
- const classes = useClassNames("Progress", classNames);
43
-
44
- const _id = useId(id);
45
- const sizeStyles = getSize(size);
46
-
47
- const lowerBound = Math.min(min, max);
48
- const upperBound = Math.max(min, max);
49
- const clampedValue = clamp(value, lowerBound, upperBound);
50
- const percentage =
51
- upperBound === lowerBound
52
- ? 0
53
- : ((clampedValue - lowerBound) / (upperBound - lowerBound)) * 100;
54
-
55
- return (
56
- <div className={cx("w-full", classes.root, className)}>
57
- <div
58
- {...props}
59
- ref={ref}
60
- id={_id}
61
- role="progressbar"
62
- aria-valuemin={indeterminate ? undefined : lowerBound}
63
- aria-valuemax={indeterminate ? undefined : upperBound}
64
- aria-valuenow={indeterminate ? undefined : clampedValue}
65
- className={cx(
66
- "relative w-full overflow-hidden bg-[var(--refraktor-bg)]",
67
- sizeStyles.track,
68
- getRadius(radius),
69
- classes.track
70
- )}
71
- >
72
- <div
73
- className={cx(
74
- "h-full bg-[var(--refraktor-primary)]",
75
- getRadius(radius),
76
- indeterminate &&
77
- "absolute inset-y-0 left-0 refraktor-progress-indeterminate",
78
- animated && !indeterminate &&
79
- "transition-[width] duration-300 ease-out",
80
- classes.bar
81
- )}
82
- style={indeterminate ? undefined : { width: `${percentage}%` }}
83
- />
84
- </div>
85
- </div>
86
- );
87
- });
88
-
89
- Progress.displayName = "@refraktor/core/Progress";
90
- Progress.configure = createComponentConfig<ProgressProps>();
91
- Progress.classNames = createClassNamesConfig<ProgressClassNames>();
92
-
93
- export default Progress;
@@ -1,52 +0,0 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- FactoryPayload
7
- } from "../../utils";
8
-
9
- export type ProgressClassNames = {
10
- root?: string;
11
- track?: string;
12
- bar?: string;
13
- };
14
-
15
- export interface ProgressProps
16
- extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
17
- /** Current progress value @default `0` */
18
- value?: number;
19
-
20
- /** Minimum progress value @default `0` */
21
- min?: number;
22
-
23
- /** Maximum progress value @default `100` */
24
- max?: number;
25
-
26
- /** Whether progress is indeterminate @default `false` */
27
- indeterminate?: boolean;
28
-
29
- /** Whether width transitions are animated @default `true` */
30
- animated?: boolean;
31
-
32
- /** Track size @default `md` */
33
- size?: RefraktorSize;
34
-
35
- /** Track radius @default `full` */
36
- radius?: RefraktorRadius;
37
-
38
- /** Used for editing root class name */
39
- className?: string;
40
-
41
- /** Used for styling different parts of the component */
42
- classNames?: ProgressClassNames;
43
- }
44
-
45
- export interface ProgressFactoryPayload extends FactoryPayload {
46
- props: ProgressProps;
47
- ref: HTMLDivElement;
48
- compound: {
49
- configure: ReturnType<typeof createComponentConfig<ProgressProps>>;
50
- classNames: ReturnType<typeof createClassNamesConfig<ProgressClassNames>>;
51
- };
52
- }
@@ -1,5 +0,0 @@
1
- export { default as ProgressCircle } from "./progress-circle";
2
- export type {
3
- ProgressCircleProps,
4
- ProgressCircleClassNames
5
- } from "./progress-circle.types";
@@ -1,31 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- type ProgressCircleSizeStyles = {
4
- size: number;
5
- stroke: number;
6
- };
7
-
8
- const sizes: Record<RefraktorSize, ProgressCircleSizeStyles> = {
9
- xs: {
10
- size: 16,
11
- stroke: 2
12
- },
13
- sm: {
14
- size: 20,
15
- stroke: 2.5
16
- },
17
- md: {
18
- size: 24,
19
- stroke: 3
20
- },
21
- lg: {
22
- size: 32,
23
- stroke: 4
24
- },
25
- xl: {
26
- size: 40,
27
- stroke: 5
28
- }
29
- };
30
-
31
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
@@ -1,140 +0,0 @@
1
- import { createRef } from "react";
2
- import { describe, expect, it } from "vitest";
3
- import { render, screen, waitFor } from "../../vitest";
4
- import ProgressCircle from "./progress-circle";
5
-
6
- function getCircleMetrics(bar: SVGCircleElement) {
7
- const radius = Number(bar.getAttribute("r"));
8
- const circumference = 2 * Math.PI * radius;
9
- return { radius, circumference };
10
- }
11
-
12
- describe("@refraktor/core/ProgressCircle", () => {
13
- it("renders with determinate values", async () => {
14
- await render(<ProgressCircle value={45} aria-label="Upload progress" />);
15
-
16
- const root = screen.getByRole("progressbar", {
17
- name: "Upload progress"
18
- });
19
- const circles = root.querySelectorAll("circle");
20
- const bar = circles[1] as SVGCircleElement;
21
-
22
- expect(root).toHaveAttribute("aria-valuemin", "0");
23
- expect(root).toHaveAttribute("aria-valuemax", "100");
24
- expect(root).toHaveAttribute("aria-valuenow", "45");
25
-
26
- const { circumference } = getCircleMetrics(bar);
27
- const expectedOffset = circumference - (45 / 100) * circumference;
28
- expect(
29
- Number(bar.getAttribute("stroke-dashoffset"))
30
- ).toBeCloseTo(expectedOffset, 4);
31
- });
32
-
33
- it("forwards ref correctly", async () => {
34
- const ref = createRef<HTMLDivElement>();
35
-
36
- await render(<ProgressCircle ref={ref} aria-label="Progress" />);
37
-
38
- expect(ref.current).toBeInstanceOf(HTMLDivElement);
39
- expect(ref.current?.tagName).toBe("DIV");
40
- expect(ref.current).toHaveAttribute("role", "progressbar");
41
- });
42
-
43
- it("clamps values outside range", async () => {
44
- const { rerender } = await render(
45
- <ProgressCircle value={-20} aria-label="Clamped progress" />
46
- );
47
-
48
- let root = screen.getByRole("progressbar", { name: "Clamped progress" });
49
- let circles = root.querySelectorAll("circle");
50
- let bar = circles[1] as SVGCircleElement;
51
-
52
- expect(root).toHaveAttribute("aria-valuenow", "0");
53
-
54
- let { circumference } = getCircleMetrics(bar);
55
- expect(
56
- Number(bar.getAttribute("stroke-dashoffset"))
57
- ).toBeCloseTo(circumference, 4);
58
-
59
- rerender(<ProgressCircle value={180} aria-label="Clamped progress" />);
60
-
61
- await waitFor(() => {
62
- root = screen.getByRole("progressbar", { name: "Clamped progress" });
63
- circles = root.querySelectorAll("circle");
64
- bar = circles[1] as SVGCircleElement;
65
- expect(root).toHaveAttribute("aria-valuenow", "100");
66
- ({ circumference } = getCircleMetrics(bar));
67
- expect(
68
- Number(bar.getAttribute("stroke-dashoffset"))
69
- ).toBeCloseTo(0, 4);
70
- });
71
- });
72
-
73
- it("supports custom min and max", async () => {
74
- await render(
75
- <ProgressCircle
76
- value={25}
77
- min={20}
78
- max={40}
79
- aria-label="Custom range progress"
80
- />
81
- );
82
-
83
- const root = screen.getByRole("progressbar", {
84
- name: "Custom range progress"
85
- });
86
- const circles = root.querySelectorAll("circle");
87
- const bar = circles[1] as SVGCircleElement;
88
-
89
- expect(root).toHaveAttribute("aria-valuemin", "20");
90
- expect(root).toHaveAttribute("aria-valuemax", "40");
91
- expect(root).toHaveAttribute("aria-valuenow", "25");
92
-
93
- const { circumference } = getCircleMetrics(bar);
94
- const expectedOffset = circumference - (25 / 100) * circumference;
95
- expect(
96
- Number(bar.getAttribute("stroke-dashoffset"))
97
- ).toBeCloseTo(expectedOffset, 4);
98
- });
99
-
100
- it("supports indeterminate mode", async () => {
101
- await render(<ProgressCircle indeterminate aria-label="Loading progress" />);
102
-
103
- const root = screen.getByRole("progressbar", {
104
- name: "Loading progress"
105
- });
106
- const circles = root.querySelectorAll("circle");
107
- const bar = circles[1] as SVGCircleElement;
108
-
109
- expect(root).not.toHaveAttribute("aria-valuemin");
110
- expect(root).not.toHaveAttribute("aria-valuemax");
111
- expect(root).not.toHaveAttribute("aria-valuenow");
112
- expect(bar).toHaveClass("loader-spin");
113
- expect(bar.getAttribute("stroke-dasharray")).not.toBe("");
114
- });
115
-
116
- it("supports root and slot class names", async () => {
117
- await render(
118
- <ProgressCircle
119
- aria-label="Styled progress"
120
- className="custom-root"
121
- classNames={{
122
- svg: "custom-svg",
123
- track: "custom-track",
124
- bar: "custom-bar"
125
- }}
126
- />
127
- );
128
-
129
- const root = screen.getByRole("progressbar", { name: "Styled progress" });
130
- const svg = root.querySelector("svg") as SVGSVGElement;
131
- const circles = root.querySelectorAll("circle");
132
- const track = circles[0] as SVGCircleElement;
133
- const bar = circles[1] as SVGCircleElement;
134
-
135
- expect(root).toHaveClass("custom-root");
136
- expect(svg).toHaveClass("custom-svg");
137
- expect(track).toHaveClass("custom-track");
138
- expect(bar).toHaveClass("custom-bar");
139
- });
140
- });
@@ -1,124 +0,0 @@
1
- import { clamp, useId } 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 {
11
- ProgressCircleClassNames,
12
- ProgressCircleFactoryPayload,
13
- ProgressCircleProps
14
- } from "./progress-circle.types";
15
- import { getSize } from "./progress-circle.styles";
16
-
17
- const defaultProps = {
18
- value: 0,
19
- min: 0,
20
- max: 100,
21
- indeterminate: false,
22
- animated: true,
23
- size: "md"
24
- } satisfies Partial<ProgressCircleProps>;
25
-
26
- const ProgressCircle = factory<ProgressCircleFactoryPayload>((_props, ref) => {
27
- const { cx } = useTheme();
28
- const {
29
- id,
30
- value,
31
- min,
32
- max,
33
- indeterminate,
34
- animated,
35
- size,
36
- className,
37
- classNames,
38
- ...props
39
- } = useProps("ProgressCircle", defaultProps, _props);
40
- const classes = useClassNames("ProgressCircle", classNames);
41
-
42
- const _id = useId(id);
43
-
44
- const sizeStyles = getSize(size);
45
- const diameter = sizeStyles.size;
46
- const strokeWidth = sizeStyles.stroke;
47
- const radius = Math.max(0, diameter / 2 - strokeWidth / 2);
48
- const circumference = 2 * Math.PI * radius;
49
-
50
- const lowerBound = Math.min(min, max);
51
- const upperBound = Math.max(min, max);
52
- const clampedValue = clamp(value, lowerBound, upperBound);
53
-
54
- const percentage =
55
- upperBound === lowerBound
56
- ? 0
57
- : ((clampedValue - lowerBound) / (upperBound - lowerBound)) * 100;
58
-
59
- const strokeDashoffset =
60
- circumference - (percentage / 100) * circumference;
61
-
62
- return (
63
- <div
64
- {...props}
65
- ref={ref}
66
- id={_id}
67
- role="progressbar"
68
- aria-valuemin={indeterminate ? undefined : lowerBound}
69
- aria-valuemax={indeterminate ? undefined : upperBound}
70
- aria-valuenow={indeterminate ? undefined : clampedValue}
71
- className={cx(
72
- "inline-flex items-center justify-center",
73
- classes.root,
74
- className
75
- )}
76
- >
77
- <svg
78
- viewBox={`0 0 ${diameter} ${diameter}`}
79
- width={diameter}
80
- height={diameter}
81
- className={cx("block -rotate-90", classes.svg)}
82
- >
83
- <circle
84
- cx={diameter / 2}
85
- cy={diameter / 2}
86
- r={radius}
87
- fill="none"
88
- strokeWidth={strokeWidth}
89
- className={cx("stroke-[var(--refraktor-bg)]", classes.track)}
90
- />
91
-
92
- <circle
93
- cx={diameter / 2}
94
- cy={diameter / 2}
95
- r={radius}
96
- fill="none"
97
- strokeWidth={strokeWidth}
98
- strokeLinecap="round"
99
- strokeDasharray={
100
- indeterminate
101
- ? `${circumference * 0.4} ${circumference}`
102
- : circumference
103
- }
104
- strokeDashoffset={
105
- indeterminate ? circumference * 0.15 : strokeDashoffset
106
- }
107
- className={cx(
108
- "stroke-[var(--refraktor-primary)]",
109
- indeterminate && "loader-spin",
110
- animated && !indeterminate &&
111
- "transition-[stroke-dashoffset] duration-300 ease-out",
112
- classes.bar
113
- )}
114
- />
115
- </svg>
116
- </div>
117
- );
118
- });
119
-
120
- ProgressCircle.displayName = "@refraktor/core/ProgressCircle";
121
- ProgressCircle.configure = createComponentConfig<ProgressCircleProps>();
122
- ProgressCircle.classNames = createClassNamesConfig<ProgressCircleClassNames>();
123
-
124
- export default ProgressCircle;
@@ -1,52 +0,0 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
- import { RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- FactoryPayload
7
- } from "../../utils";
8
-
9
- export type ProgressCircleClassNames = {
10
- root?: string;
11
- svg?: string;
12
- track?: string;
13
- bar?: string;
14
- };
15
-
16
- export interface ProgressCircleProps
17
- extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
18
- /** Current progress value @default `0` */
19
- value?: number;
20
-
21
- /** Minimum progress value @default `0` */
22
- min?: number;
23
-
24
- /** Maximum progress value @default `100` */
25
- max?: number;
26
-
27
- /** Whether progress is indeterminate @default `false` */
28
- indeterminate?: boolean;
29
-
30
- /** Whether dash-offset transitions are animated @default `true` */
31
- animated?: boolean;
32
-
33
- /** Circle size @default `md` */
34
- size?: RefraktorSize;
35
-
36
- /** Used for editing root class name */
37
- className?: string;
38
-
39
- /** Used for styling different parts of the component */
40
- classNames?: ProgressCircleClassNames;
41
- }
42
-
43
- export interface ProgressCircleFactoryPayload extends FactoryPayload {
44
- props: ProgressCircleProps;
45
- ref: HTMLDivElement;
46
- compound: {
47
- configure: ReturnType<typeof createComponentConfig<ProgressCircleProps>>;
48
- classNames: ReturnType<
49
- typeof createClassNamesConfig<ProgressCircleClassNames>
50
- >;
51
- };
52
- }
@@ -1,10 +0,0 @@
1
- export { default as Radio } from "./radio";
2
- export { RadioGroup } from "./radio-group";
3
- export type {
4
- RadioProps,
5
- RadioClassNames,
6
- RadioGroupProps,
7
- RadioGroupClassNames,
8
- RadioLabelPosition,
9
- RadioGroupOrientation
10
- } from "./radio.types";
@@ -1 +0,0 @@
1
- export { default as RadioGroup } from "./radio-group";