@codefast/ui 0.3.13-canary.3 → 0.3.13-canary.4

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 (367) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/components/accordion.d.mts +37 -0
  3. package/dist/components/accordion.mjs +53 -0
  4. package/dist/components/alert-dialog.d.mts +74 -0
  5. package/dist/components/alert-dialog.mjs +92 -0
  6. package/dist/components/alert.d.mts +30 -0
  7. package/dist/components/alert.mjs +49 -0
  8. package/dist/components/aspect-ratio.d.mts +10 -0
  9. package/dist/components/aspect-ratio.mjs +12 -0
  10. package/dist/components/avatar.d.mts +21 -0
  11. package/dist/components/avatar.mjs +28 -0
  12. package/dist/components/badge.d.mts +24 -0
  13. package/dist/components/badge.mjs +56 -0
  14. package/dist/components/breadcrumb.d.mts +44 -0
  15. package/dist/components/breadcrumb.mjs +67 -0
  16. package/dist/components/button-group.d.mts +34 -0
  17. package/dist/components/button-group.mjs +53 -0
  18. package/dist/components/button.d.mts +38 -0
  19. package/dist/components/button.mjs +99 -0
  20. package/dist/components/calendar.d.mts +27 -0
  21. package/dist/components/calendar.mjs +114 -0
  22. package/dist/components/card.d.mts +41 -0
  23. package/dist/components/card.mjs +55 -0
  24. package/dist/components/carousel.d.mts +68 -0
  25. package/dist/components/carousel.mjs +135 -0
  26. package/dist/components/chart.d.mts +93 -0
  27. package/dist/components/chart.mjs +189 -0
  28. package/dist/components/checkbox-cards.d.mts +17 -0
  29. package/dist/components/checkbox-cards.mjs +30 -0
  30. package/dist/components/checkbox-group.d.mts +16 -0
  31. package/dist/components/checkbox-group.mjs +27 -0
  32. package/dist/components/checkbox.d.mts +11 -0
  33. package/dist/components/checkbox.mjs +20 -0
  34. package/dist/components/collapsible.d.mts +18 -0
  35. package/dist/components/collapsible.mjs +24 -0
  36. package/dist/components/command.d.mts +57 -0
  37. package/dist/components/command.mjs +92 -0
  38. package/dist/components/context-menu.d.mts +91 -0
  39. package/dist/components/context-menu.mjs +122 -0
  40. package/dist/components/dialog.d.mts +65 -0
  41. package/dist/components/dialog.mjs +93 -0
  42. package/dist/components/drawer.d.mts +65 -0
  43. package/dist/components/drawer.mjs +78 -0
  44. package/dist/components/dropdown-menu.d.mts +92 -0
  45. package/dist/components/dropdown-menu.mjs +129 -0
  46. package/dist/components/empty.d.mts +44 -0
  47. package/dist/components/empty.mjs +64 -0
  48. package/dist/components/field.d.mts +79 -0
  49. package/dist/components/field.mjs +132 -0
  50. package/dist/components/form.d.mts +48 -0
  51. package/dist/components/form.mjs +92 -0
  52. package/dist/components/hover-card.d.mts +26 -0
  53. package/dist/components/hover-card.mjs +35 -0
  54. package/dist/components/input-group.d.mts +61 -0
  55. package/dist/components/input-group.mjs +142 -0
  56. package/dist/components/input-number.d.mts +28 -0
  57. package/dist/components/input-number.mjs +61 -0
  58. package/dist/components/input-otp.d.mts +29 -0
  59. package/dist/components/input-otp.mjs +48 -0
  60. package/dist/components/input-password.d.mts +13 -0
  61. package/dist/components/input-password.mjs +38 -0
  62. package/dist/components/input-search.d.mts +20 -0
  63. package/dist/components/input-search.mjs +50 -0
  64. package/dist/components/input.d.mts +11 -0
  65. package/dist/components/input.mjs +14 -0
  66. package/dist/components/item.d.mts +82 -0
  67. package/dist/components/item.mjs +137 -0
  68. package/dist/components/kbd.d.mts +15 -0
  69. package/dist/components/kbd.mjs +19 -0
  70. package/dist/components/label.d.mts +11 -0
  71. package/dist/components/label.mjs +14 -0
  72. package/dist/components/menubar.d.mts +100 -0
  73. package/dist/components/menubar.mjs +133 -0
  74. package/dist/components/native-select.d.mts +19 -0
  75. package/dist/components/native-select.mjs +34 -0
  76. package/dist/components/navigation-menu.d.mts +44 -0
  77. package/dist/components/navigation-menu.mjs +79 -0
  78. package/dist/components/pagination.d.mts +46 -0
  79. package/dist/components/pagination.mjs +71 -0
  80. package/dist/components/popover.d.mts +30 -0
  81. package/dist/components/popover.mjs +41 -0
  82. package/dist/components/progress-circle.d.mts +124 -0
  83. package/dist/components/progress-circle.mjs +120 -0
  84. package/dist/components/progress.d.mts +12 -0
  85. package/dist/components/progress.mjs +19 -0
  86. package/dist/components/{radio-cards.d.ts → radio-cards.d.mts} +10 -5
  87. package/dist/components/radio-cards.mjs +29 -0
  88. package/dist/components/radio-group.d.mts +16 -0
  89. package/dist/components/radio-group.mjs +25 -0
  90. package/dist/components/radio.d.mts +14 -0
  91. package/dist/components/radio.mjs +16 -0
  92. package/dist/components/resizable.d.mts +23 -0
  93. package/dist/components/resizable.mjs +32 -0
  94. package/dist/components/scroll-area.d.mts +40 -0
  95. package/dist/components/scroll-area.mjs +101 -0
  96. package/dist/components/select.d.mts +62 -0
  97. package/dist/components/select.mjs +101 -0
  98. package/dist/components/separator.d.mts +32 -0
  99. package/dist/components/separator.mjs +45 -0
  100. package/dist/components/sheet.d.mts +75 -0
  101. package/dist/components/sheet.mjs +134 -0
  102. package/dist/components/sidebar.d.mts +195 -0
  103. package/dist/components/sidebar.mjs +375 -0
  104. package/dist/components/skeleton.d.mts +10 -0
  105. package/dist/components/skeleton.mjs +12 -0
  106. package/dist/components/slider.d.mts +15 -0
  107. package/dist/components/slider.mjs +40 -0
  108. package/dist/components/sonner.d.mts +10 -0
  109. package/dist/components/sonner.mjs +21 -0
  110. package/dist/components/spinner.d.mts +14 -0
  111. package/dist/components/spinner.mjs +40 -0
  112. package/dist/components/switch.d.mts +11 -0
  113. package/dist/components/switch.mjs +18 -0
  114. package/dist/components/table.d.mts +45 -0
  115. package/dist/components/table.mjs +65 -0
  116. package/dist/components/tabs.d.mts +26 -0
  117. package/dist/components/tabs.mjs +35 -0
  118. package/dist/components/textarea.d.mts +10 -0
  119. package/dist/components/textarea.mjs +12 -0
  120. package/dist/components/toggle-group.d.mts +30 -0
  121. package/dist/components/toggle-group.mjs +53 -0
  122. package/dist/components/toggle.d.mts +28 -0
  123. package/dist/components/toggle.mjs +53 -0
  124. package/dist/components/tooltip.d.mts +30 -0
  125. package/dist/components/tooltip.mjs +42 -0
  126. package/dist/hooks/{use-animated-value.d.ts → use-animated-value.d.mts} +4 -2
  127. package/dist/hooks/use-animated-value.mjs +62 -0
  128. package/dist/hooks/{use-copy-to-clipboard.d.ts → use-copy-to-clipboard.d.mts} +11 -6
  129. package/dist/hooks/use-copy-to-clipboard.mjs +43 -0
  130. package/dist/hooks/{use-is-mobile.d.ts → use-is-mobile.d.mts} +4 -2
  131. package/dist/hooks/use-is-mobile.mjs +26 -0
  132. package/dist/hooks/{use-media-query.d.ts → use-media-query.d.mts} +4 -2
  133. package/dist/hooks/use-media-query.mjs +50 -0
  134. package/dist/hooks/{use-mutation-observer.d.ts → use-mutation-observer.d.mts} +6 -3
  135. package/dist/hooks/use-mutation-observer.mjs +41 -0
  136. package/dist/hooks/use-pagination.d.mts +44 -0
  137. package/dist/hooks/use-pagination.mjs +107 -0
  138. package/dist/index.d.mts +69 -0
  139. package/dist/index.mjs +69 -0
  140. package/dist/lib/utils.d.mts +13 -0
  141. package/dist/lib/utils.mjs +10 -0
  142. package/dist/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/clsx.d.mts +6 -0
  143. package/dist/primitives/checkbox-group.d.mts +144 -0
  144. package/dist/primitives/checkbox-group.mjs +126 -0
  145. package/dist/primitives/input-number.d.mts +73 -0
  146. package/dist/primitives/input-number.mjs +514 -0
  147. package/dist/primitives/input.d.mts +72 -0
  148. package/dist/primitives/input.mjs +75 -0
  149. package/dist/primitives/progress-circle.d.mts +146 -0
  150. package/dist/primitives/progress-circle.mjs +178 -0
  151. package/package.json +164 -170
  152. package/dist/components/accordion.d.ts +0 -19
  153. package/dist/components/accordion.d.ts.map +0 -1
  154. package/dist/components/accordion.js +0 -26
  155. package/dist/components/alert-dialog.d.ts +0 -39
  156. package/dist/components/alert-dialog.d.ts.map +0 -1
  157. package/dist/components/alert-dialog.js +0 -39
  158. package/dist/components/alert.d.ts +0 -19
  159. package/dist/components/alert.d.ts.map +0 -1
  160. package/dist/components/alert.js +0 -41
  161. package/dist/components/aspect-ratio.d.ts +0 -7
  162. package/dist/components/aspect-ratio.d.ts.map +0 -1
  163. package/dist/components/aspect-ratio.js +0 -10
  164. package/dist/components/avatar.d.ts +0 -11
  165. package/dist/components/avatar.d.ts.map +0 -1
  166. package/dist/components/avatar.js +0 -17
  167. package/dist/components/badge.d.ts +0 -18
  168. package/dist/components/badge.d.ts.map +0 -1
  169. package/dist/components/badge.js +0 -59
  170. package/dist/components/breadcrumb.d.ts +0 -22
  171. package/dist/components/breadcrumb.d.ts.map +0 -1
  172. package/dist/components/breadcrumb.js +0 -31
  173. package/dist/components/button-group.d.ts +0 -20
  174. package/dist/components/button-group.d.ts.map +0 -1
  175. package/dist/components/button-group.js +0 -48
  176. package/dist/components/button.d.ts +0 -29
  177. package/dist/components/button.d.ts.map +0 -1
  178. package/dist/components/button.js +0 -92
  179. package/dist/components/calendar.d.ts +0 -13
  180. package/dist/components/calendar.d.ts.map +0 -1
  181. package/dist/components/calendar.js +0 -104
  182. package/dist/components/card.d.ts +0 -18
  183. package/dist/components/card.d.ts.map +0 -1
  184. package/dist/components/card.js +0 -27
  185. package/dist/components/carousel.d.ts +0 -38
  186. package/dist/components/carousel.d.ts.map +0 -1
  187. package/dist/components/carousel.js +0 -103
  188. package/dist/components/chart.d.ts +0 -58
  189. package/dist/components/chart.d.ts.map +0 -1
  190. package/dist/components/chart.js +0 -198
  191. package/dist/components/checkbox-cards.d.ts +0 -11
  192. package/dist/components/checkbox-cards.d.ts.map +0 -1
  193. package/dist/components/checkbox-cards.js +0 -16
  194. package/dist/components/checkbox-group.d.ts +0 -9
  195. package/dist/components/checkbox-group.d.ts.map +0 -1
  196. package/dist/components/checkbox-group.js +0 -15
  197. package/dist/components/checkbox.d.ts +0 -7
  198. package/dist/components/checkbox.d.ts.map +0 -1
  199. package/dist/components/checkbox.js +0 -12
  200. package/dist/components/collapsible.d.ts +0 -11
  201. package/dist/components/collapsible.d.ts.map +0 -1
  202. package/dist/components/collapsible.js +0 -16
  203. package/dist/components/command.d.ts +0 -26
  204. package/dist/components/command.d.ts.map +0 -1
  205. package/dist/components/command.js +0 -41
  206. package/dist/components/context-menu.d.ts +0 -42
  207. package/dist/components/context-menu.d.ts.map +0 -1
  208. package/dist/components/context-menu.js +0 -54
  209. package/dist/components/dialog.d.ts +0 -35
  210. package/dist/components/dialog.d.ts.map +0 -1
  211. package/dist/components/dialog.js +0 -41
  212. package/dist/components/drawer.d.ts +0 -34
  213. package/dist/components/drawer.d.ts.map +0 -1
  214. package/dist/components/drawer.js +0 -36
  215. package/dist/components/dropdown-menu.d.ts +0 -42
  216. package/dist/components/dropdown-menu.d.ts.map +0 -1
  217. package/dist/components/dropdown-menu.js +0 -54
  218. package/dist/components/empty.d.ts +0 -23
  219. package/dist/components/empty.d.ts.map +0 -1
  220. package/dist/components/empty.js +0 -47
  221. package/dist/components/field.d.ts +0 -42
  222. package/dist/components/field.d.ts.map +0 -1
  223. package/dist/components/field.js +0 -85
  224. package/dist/components/form.d.ts +0 -27
  225. package/dist/components/form.d.ts.map +0 -1
  226. package/dist/components/form.js +0 -76
  227. package/dist/components/hover-card.d.ts +0 -13
  228. package/dist/components/hover-card.d.ts.map +0 -1
  229. package/dist/components/hover-card.js +0 -20
  230. package/dist/components/input-group.d.ts +0 -37
  231. package/dist/components/input-group.d.ts.map +0 -1
  232. package/dist/components/input-group.js +0 -127
  233. package/dist/components/input-number.d.ts +0 -8
  234. package/dist/components/input-number.d.ts.map +0 -1
  235. package/dist/components/input-number.js +0 -20
  236. package/dist/components/input-otp.d.ts +0 -16
  237. package/dist/components/input-otp.d.ts.map +0 -1
  238. package/dist/components/input-otp.js +0 -25
  239. package/dist/components/input-password.d.ts +0 -7
  240. package/dist/components/input-password.d.ts.map +0 -1
  241. package/dist/components/input-password.js +0 -17
  242. package/dist/components/input-search.d.ts +0 -11
  243. package/dist/components/input-search.d.ts.map +0 -1
  244. package/dist/components/input-search.js +0 -22
  245. package/dist/components/input.d.ts +0 -6
  246. package/dist/components/input.d.ts.map +0 -1
  247. package/dist/components/input.js +0 -10
  248. package/dist/components/item.d.ts +0 -46
  249. package/dist/components/item.d.ts.map +0 -1
  250. package/dist/components/item.js +0 -94
  251. package/dist/components/kbd.d.ts +0 -8
  252. package/dist/components/kbd.d.ts.map +0 -1
  253. package/dist/components/kbd.js +0 -12
  254. package/dist/components/label.d.ts +0 -7
  255. package/dist/components/label.d.ts.map +0 -1
  256. package/dist/components/label.js +0 -11
  257. package/dist/components/menubar.d.ts +0 -44
  258. package/dist/components/menubar.d.ts.map +0 -1
  259. package/dist/components/menubar.js +0 -57
  260. package/dist/components/native-select.d.ts +0 -10
  261. package/dist/components/native-select.d.ts.map +0 -1
  262. package/dist/components/native-select.js +0 -16
  263. package/dist/components/navigation-menu.d.ts +0 -21
  264. package/dist/components/navigation-menu.d.ts.map +0 -1
  265. package/dist/components/navigation-menu.js +0 -43
  266. package/dist/components/pagination.d.ts +0 -26
  267. package/dist/components/pagination.d.ts.map +0 -1
  268. package/dist/components/pagination.js +0 -29
  269. package/dist/components/popover.d.ts +0 -15
  270. package/dist/components/popover.d.ts.map +0 -1
  271. package/dist/components/popover.js +0 -23
  272. package/dist/components/progress-circle.d.ts +0 -107
  273. package/dist/components/progress-circle.d.ts.map +0 -1
  274. package/dist/components/progress-circle.js +0 -83
  275. package/dist/components/progress.d.ts +0 -7
  276. package/dist/components/progress.d.ts.map +0 -1
  277. package/dist/components/progress.js +0 -13
  278. package/dist/components/radio-cards.d.ts.map +0 -1
  279. package/dist/components/radio-cards.js +0 -15
  280. package/dist/components/radio-group.d.ts +0 -9
  281. package/dist/components/radio-group.d.ts.map +0 -1
  282. package/dist/components/radio-group.js +0 -14
  283. package/dist/components/radio.d.ts +0 -8
  284. package/dist/components/radio.d.ts.map +0 -1
  285. package/dist/components/radio.js +0 -11
  286. package/dist/components/resizable.d.ts +0 -13
  287. package/dist/components/resizable.d.ts.map +0 -1
  288. package/dist/components/resizable.js +0 -18
  289. package/dist/components/scroll-area.d.ts +0 -28
  290. package/dist/components/scroll-area.d.ts.map +0 -1
  291. package/dist/components/scroll-area.js +0 -77
  292. package/dist/components/select.d.ts +0 -29
  293. package/dist/components/select.d.ts.map +0 -1
  294. package/dist/components/select.js +0 -49
  295. package/dist/components/separator.d.ts +0 -23
  296. package/dist/components/separator.d.ts.map +0 -1
  297. package/dist/components/separator.js +0 -36
  298. package/dist/components/sheet.d.ts +0 -43
  299. package/dist/components/sheet.d.ts.map +0 -1
  300. package/dist/components/sheet.js +0 -90
  301. package/dist/components/sidebar.d.ts +0 -102
  302. package/dist/components/sidebar.d.ts.map +0 -1
  303. package/dist/components/sidebar.js +0 -241
  304. package/dist/components/skeleton.d.ts +0 -6
  305. package/dist/components/skeleton.d.ts.map +0 -1
  306. package/dist/components/skeleton.js +0 -9
  307. package/dist/components/slider.d.ts +0 -7
  308. package/dist/components/slider.d.ts.map +0 -1
  309. package/dist/components/slider.js +0 -18
  310. package/dist/components/sonner.d.ts +0 -8
  311. package/dist/components/sonner.d.ts.map +0 -1
  312. package/dist/components/sonner.js +0 -18
  313. package/dist/components/spinner.d.ts +0 -8
  314. package/dist/components/spinner.d.ts.map +0 -1
  315. package/dist/components/spinner.js +0 -27
  316. package/dist/components/switch.d.ts +0 -7
  317. package/dist/components/switch.d.ts.map +0 -1
  318. package/dist/components/switch.js +0 -11
  319. package/dist/components/table.d.ts +0 -20
  320. package/dist/components/table.d.ts.map +0 -1
  321. package/dist/components/table.js +0 -30
  322. package/dist/components/tabs.d.ts +0 -13
  323. package/dist/components/tabs.d.ts.map +0 -1
  324. package/dist/components/tabs.js +0 -20
  325. package/dist/components/textarea.d.ts +0 -6
  326. package/dist/components/textarea.d.ts.map +0 -1
  327. package/dist/components/textarea.js +0 -9
  328. package/dist/components/toggle-group.d.ts +0 -16
  329. package/dist/components/toggle-group.d.ts.map +0 -1
  330. package/dist/components/toggle-group.js +0 -35
  331. package/dist/components/toggle.d.ts +0 -21
  332. package/dist/components/toggle.d.ts.map +0 -1
  333. package/dist/components/toggle.js +0 -49
  334. package/dist/components/tooltip.d.ts +0 -15
  335. package/dist/components/tooltip.d.ts.map +0 -1
  336. package/dist/components/tooltip.js +0 -23
  337. package/dist/hooks/use-animated-value.d.ts.map +0 -1
  338. package/dist/hooks/use-animated-value.js +0 -71
  339. package/dist/hooks/use-copy-to-clipboard.d.ts.map +0 -1
  340. package/dist/hooks/use-copy-to-clipboard.js +0 -46
  341. package/dist/hooks/use-is-mobile.d.ts.map +0 -1
  342. package/dist/hooks/use-is-mobile.js +0 -23
  343. package/dist/hooks/use-media-query.d.ts.map +0 -1
  344. package/dist/hooks/use-media-query.js +0 -53
  345. package/dist/hooks/use-mutation-observer.d.ts.map +0 -1
  346. package/dist/hooks/use-mutation-observer.js +0 -40
  347. package/dist/hooks/use-pagination.d.ts +0 -37
  348. package/dist/hooks/use-pagination.d.ts.map +0 -1
  349. package/dist/hooks/use-pagination.js +0 -107
  350. package/dist/index.d.ts +0 -131
  351. package/dist/index.d.ts.map +0 -1
  352. package/dist/index.js +0 -68
  353. package/dist/lib/utils.d.ts +0 -10
  354. package/dist/lib/utils.d.ts.map +0 -1
  355. package/dist/lib/utils.js +0 -10
  356. package/dist/primitives/checkbox-group.d.ts +0 -123
  357. package/dist/primitives/checkbox-group.d.ts.map +0 -1
  358. package/dist/primitives/checkbox-group.js +0 -112
  359. package/dist/primitives/input-number.d.ts +0 -63
  360. package/dist/primitives/input-number.d.ts.map +0 -1
  361. package/dist/primitives/input-number.js +0 -458
  362. package/dist/primitives/input.d.ts +0 -67
  363. package/dist/primitives/input.d.ts.map +0 -1
  364. package/dist/primitives/input.js +0 -76
  365. package/dist/primitives/progress-circle.d.ts +0 -116
  366. package/dist/primitives/progress-circle.d.ts.map +0 -1
  367. package/dist/primitives/progress-circle.js +0 -163
@@ -0,0 +1,146 @@
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import * as _$_radix_ui_react_context0 from "@radix-ui/react-context";
3
+ import { Scope } from "@radix-ui/react-context";
4
+
5
+ //#region src/primitives/progress-circle.d.ts
6
+ type ScopedProps<P> = P & {
7
+ __scopeProgressCircle?: Scope;
8
+ };
9
+ /**
10
+ * Defines color thresholds based on progress values
11
+ */
12
+ interface Threshold {
13
+ /**
14
+ * Background color to be applied
15
+ */
16
+ background: string;
17
+ /**
18
+ * Foreground color to be applied
19
+ */
20
+ color: string;
21
+ /**
22
+ * The value at which this threshold becomes active
23
+ */
24
+ value: number;
25
+ }
26
+ declare const createProgressCircleScope: _$_radix_ui_react_context0.CreateScope;
27
+ interface ProgressCircleProviderProps {
28
+ /** React children to be rendered inside the progress circle */
29
+ children: ReactNode;
30
+ /** Custom function to format the numeric value for display */
31
+ formatValue?: (value: number) => string;
32
+ /** Unique identifier for the progress circle component */
33
+ id?: string;
34
+ /** Maximum value of the progress (defaults to 100) */
35
+ max?: number;
36
+ /** Minimum value of the progress (defaults to 0) */
37
+ min?: number;
38
+ /** Size of the progress circle in pixels */
39
+ size?: number;
40
+ /** Starting angle of the progress circle in degrees (0 = top) */
41
+ startAngle?: number;
42
+ /** Width of the progress circle's stroke in pixels */
43
+ strokeWidth?: number;
44
+ /** Array of threshold configurations for different value ranges */
45
+ thresholds?: Threshold[];
46
+ /** Current progress value (null for indeterminate state) */
47
+ value?: null | number;
48
+ }
49
+ /**
50
+ * Provides context for the ProgressCircle component
51
+ *
52
+ * Manages calculations for rendering the circular progress indicator,
53
+ * including value clamping, sizing, thresholds, and indeterminate state.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <ProgressCircleProvider
58
+ * value={75}
59
+ * min={0}
60
+ * max={100}
61
+ * size={64}
62
+ * thresholds={[
63
+ * { value: 30, color: 'red', background: 'pink' },
64
+ * { value: 70, color: 'yellow', background: 'lightyellow' },
65
+ * { value: 100, color: 'green', background: 'lightgreen' }
66
+ * ]}
67
+ * >
68
+ * <ProgressCircleSVG>
69
+ * <ProgressCircleIndicator />
70
+ * <ProgressCircleTrack />
71
+ * </ProgressCircleSVG>
72
+ * <ProgressCircleValue />
73
+ * </ProgressCircleProvider>
74
+ * ```
75
+ */
76
+ declare function ProgressCircleProvider({
77
+ __scopeProgressCircle,
78
+ children,
79
+ formatValue,
80
+ id: propertyId,
81
+ max,
82
+ min,
83
+ size,
84
+ startAngle,
85
+ strokeWidth,
86
+ thresholds,
87
+ value
88
+ }: ScopedProps<ProgressCircleProviderProps>): ReactNode;
89
+ type ProgressCircleProps = ComponentProps<"div">;
90
+ /**
91
+ * Root component for the progress circle
92
+ *
93
+ * Serves as a wrapper for other progress circle components.
94
+ */
95
+ declare function ProgressCircle({
96
+ __scopeProgressCircle,
97
+ ...props
98
+ }: ScopedProps<ProgressCircleProps>): ReactNode;
99
+ type ProgressCircleSVGProps = ComponentProps<"svg">;
100
+ /**
101
+ * SVG container for the progress circle
102
+ *
103
+ * Renders the SVG with accessibility attributes and supports indeterminate state.
104
+ */
105
+ declare function ProgressCircleSVG({
106
+ __scopeProgressCircle,
107
+ ...props
108
+ }: ScopedProps<ProgressCircleSVGProps>): ReactNode;
109
+ type ProgressCircleTrackProps = ComponentProps<"circle">;
110
+ /**
111
+ * Background circle for the progress indicator
112
+ *
113
+ * Renders the static track of the progress circle.
114
+ */
115
+ declare function ProgressCircleTrack({
116
+ __scopeProgressCircle,
117
+ ...props
118
+ }: ScopedProps<ProgressCircleTrackProps>): ReactNode;
119
+ type ProgressCircleIndicatorProps = ComponentProps<"circle">;
120
+ /**
121
+ * Foreground circle showing progress
122
+ *
123
+ * Renders the dynamic progress indicator with stroke dash properties.
124
+ */
125
+ declare function ProgressCircleIndicator({
126
+ __scopeProgressCircle,
127
+ ...props
128
+ }: ScopedProps<ProgressCircleIndicatorProps>): ReactNode;
129
+ interface ProgressCircleValueProps extends Omit<ComponentProps<"div">, "children"> {
130
+ children?: ((context: {
131
+ value: number | undefined;
132
+ valueText: string;
133
+ }) => ReactNode) | ReactNode;
134
+ }
135
+ /**
136
+ * Displays the current progress value
137
+ *
138
+ * Supports custom content or default value text rendering.
139
+ */
140
+ declare function ProgressCircleValue({
141
+ __scopeProgressCircle,
142
+ children,
143
+ ...props
144
+ }: ScopedProps<ProgressCircleValueProps>): ReactNode;
145
+ //#endregion
146
+ export { ProgressCircleIndicator as Indicator, ProgressCircleIndicator, ProgressCircle, ProgressCircle as Root, type ProgressCircleIndicatorProps, type ProgressCircleProps, ProgressCircleProvider, ProgressCircleProvider as Provider, type ProgressCircleProviderProps, ProgressCircleSVG, ProgressCircleSVG as SVG, type ProgressCircleSVGProps, ProgressCircleTrack, ProgressCircleTrack as Track, type ProgressCircleTrackProps, ProgressCircleValue, ProgressCircleValue as Value, type ProgressCircleValueProps, createProgressCircleScope };
@@ -0,0 +1,178 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useId, useMemo } from "react";
4
+ import { createContextScope } from "@radix-ui/react-context";
5
+ //#region src/primitives/progress-circle.tsx
6
+ const PROGRESS_CIRCLE_PROVIDER_NAME = "ProgressCircleProvider";
7
+ const [createProgressCircleContext, createProgressCircleScope] = createContextScope(PROGRESS_CIRCLE_PROVIDER_NAME);
8
+ const [ProgressCircleContextProvider, useProgressCircleContext] = createProgressCircleContext(PROGRESS_CIRCLE_PROVIDER_NAME);
9
+ /**
10
+ * Provides context for the ProgressCircle component
11
+ *
12
+ * Manages calculations for rendering the circular progress indicator,
13
+ * including value clamping, sizing, thresholds, and indeterminate state.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <ProgressCircleProvider
18
+ * value={75}
19
+ * min={0}
20
+ * max={100}
21
+ * size={64}
22
+ * thresholds={[
23
+ * { value: 30, color: 'red', background: 'pink' },
24
+ * { value: 70, color: 'yellow', background: 'lightyellow' },
25
+ * { value: 100, color: 'green', background: 'lightgreen' }
26
+ * ]}
27
+ * >
28
+ * <ProgressCircleSVG>
29
+ * <ProgressCircleIndicator />
30
+ * <ProgressCircleTrack />
31
+ * </ProgressCircleSVG>
32
+ * <ProgressCircleValue />
33
+ * </ProgressCircleProvider>
34
+ * ```
35
+ */
36
+ function ProgressCircleProvider({ __scopeProgressCircle, children, formatValue, id: propertyId, max = 100, min = 0, size = 48, startAngle = -90, strokeWidth = 4, thresholds, value }) {
37
+ const uniqueId = useId();
38
+ const id = propertyId ?? uniqueId;
39
+ const validSize = Math.max(0, size);
40
+ const validStrokeWidth = Math.max(0, strokeWidth);
41
+ const validStartAngle = startAngle % 360;
42
+ let validMin = min;
43
+ let validMax = max;
44
+ if (validMin > validMax) [validMin, validMax] = [validMax, validMin];
45
+ const clampedValue = value === null || value === void 0 ? void 0 : clamp(validMin, validMax, value);
46
+ const range = validMax - validMin;
47
+ const percentage = clampedValue !== void 0 && range > 0 ? (clampedValue - validMin) / range * 100 : 0;
48
+ const valueText = clampedValue !== void 0 && formatValue ? formatValue(clampedValue) : `${Math.round(percentage).toString()}%`;
49
+ const sortedThresholds = useMemo(() => thresholds && thresholds.length > 0 ? [...thresholds].toSorted((a, b) => a.value - b.value) : [], [thresholds]);
50
+ const threshold = useMemo(() => {
51
+ if (clampedValue === void 0) return;
52
+ for (const sortedThreshold of sortedThresholds) if (clampedValue <= sortedThreshold.value) return sortedThreshold;
53
+ return sortedThresholds.at(-1);
54
+ }, [sortedThresholds, clampedValue]);
55
+ const center = validSize / 2;
56
+ const radius = Math.max(0, center - validStrokeWidth / 2);
57
+ const circumference = 2 * Math.PI * radius;
58
+ const strokeDashoffset = circumference - percentage / 100 * circumference;
59
+ const rotationTransform = `rotate(${validStartAngle.toString()}, 0, 0)`;
60
+ return /* @__PURE__ */ jsx(ProgressCircleContextProvider, {
61
+ center,
62
+ circumference,
63
+ clampedValue,
64
+ id,
65
+ max: validMax,
66
+ min: validMin,
67
+ radius,
68
+ rotationTransform,
69
+ scope: __scopeProgressCircle,
70
+ size: validSize,
71
+ strokeDashoffset,
72
+ strokeWidth: validStrokeWidth,
73
+ threshold,
74
+ value: value ?? 0,
75
+ valueText,
76
+ children
77
+ });
78
+ }
79
+ /**
80
+ * Root component for the progress circle
81
+ *
82
+ * Serves as a wrapper for other progress circle components.
83
+ */
84
+ function ProgressCircle({ __scopeProgressCircle, ...props }) {
85
+ return /* @__PURE__ */ jsx("div", { ...props });
86
+ }
87
+ const PROGRESS_CIRCLE_SVG_NAME = "ProgressCircleSVG";
88
+ /**
89
+ * SVG container for the progress circle
90
+ *
91
+ * Renders the SVG with accessibility attributes and supports indeterminate state.
92
+ */
93
+ function ProgressCircleSVG({ __scopeProgressCircle, ...props }) {
94
+ const { clampedValue, id, max, min, size, valueText } = useProgressCircleContext(PROGRESS_CIRCLE_SVG_NAME, __scopeProgressCircle);
95
+ return /* @__PURE__ */ jsx("svg", {
96
+ "aria-label": "Progress",
97
+ "aria-valuemax": max,
98
+ "aria-valuemin": min,
99
+ "aria-valuenow": clampedValue,
100
+ "aria-valuetext": clampedValue === void 0 ? void 0 : valueText,
101
+ height: size,
102
+ id,
103
+ role: "progressbar",
104
+ viewBox: `0 0 ${size.toString()} ${size.toString()}`,
105
+ width: size,
106
+ ...props
107
+ });
108
+ }
109
+ const PROGRESS_CIRCLE_TRACK_NAME = "ProgressCircleTrack";
110
+ /**
111
+ * Background circle for the progress indicator
112
+ *
113
+ * Renders the static track of the progress circle.
114
+ */
115
+ function ProgressCircleTrack({ __scopeProgressCircle, ...props }) {
116
+ const { center, radius, strokeWidth, threshold } = useProgressCircleContext(PROGRESS_CIRCLE_TRACK_NAME, __scopeProgressCircle);
117
+ return /* @__PURE__ */ jsx("circle", {
118
+ cx: center,
119
+ cy: center,
120
+ fill: "transparent",
121
+ r: radius,
122
+ stroke: threshold?.background ?? "currentColor",
123
+ strokeWidth,
124
+ ...props
125
+ });
126
+ }
127
+ const PROGRESS_CIRCLE_INDICATOR_NAME = "ProgressCircleIndicator";
128
+ /**
129
+ * Foreground circle showing progress
130
+ *
131
+ * Renders the dynamic progress indicator with stroke dash properties.
132
+ */
133
+ function ProgressCircleIndicator({ __scopeProgressCircle, ...props }) {
134
+ const { center, circumference, radius, rotationTransform, strokeDashoffset, strokeWidth, threshold } = useProgressCircleContext(PROGRESS_CIRCLE_INDICATOR_NAME, __scopeProgressCircle);
135
+ return /* @__PURE__ */ jsx("circle", {
136
+ cx: center,
137
+ cy: center,
138
+ fill: "transparent",
139
+ r: radius,
140
+ stroke: threshold?.color ?? "currentColor",
141
+ strokeDasharray: circumference,
142
+ strokeDashoffset,
143
+ strokeLinecap: "round",
144
+ strokeWidth,
145
+ transform: rotationTransform,
146
+ ...props
147
+ });
148
+ }
149
+ const PROGRESS_CIRCLE_VALUE_NAME = "ProgressCircleValue";
150
+ /**
151
+ * Displays the current progress value
152
+ *
153
+ * Supports custom content or default value text rendering.
154
+ */
155
+ function ProgressCircleValue({ __scopeProgressCircle, children, ...props }) {
156
+ const { clampedValue, valueText } = useProgressCircleContext(PROGRESS_CIRCLE_VALUE_NAME, __scopeProgressCircle);
157
+ if (typeof children === "function") return children({
158
+ value: clampedValue,
159
+ valueText
160
+ });
161
+ return /* @__PURE__ */ jsx("div", {
162
+ ...props,
163
+ children: children ?? valueText
164
+ });
165
+ }
166
+ /**
167
+ * Clamps a value within a specified min/max range
168
+ *
169
+ * @param min - Minimum value
170
+ * @param max - Maximum value
171
+ * @param value - Value to clamp
172
+ * @returns Clamped value
173
+ */
174
+ function clamp(min, max, value) {
175
+ return Math.min(max, Math.max(min, value));
176
+ }
177
+ //#endregion
178
+ export { ProgressCircleIndicator as Indicator, ProgressCircleIndicator, ProgressCircle, ProgressCircle as Root, ProgressCircleProvider, ProgressCircleProvider as Provider, ProgressCircleSVG, ProgressCircleSVG as SVG, ProgressCircleTrack, ProgressCircleTrack as Track, ProgressCircleValue, ProgressCircleValue as Value, createProgressCircleScope };