@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,203 +0,0 @@
1
- import { useId, useUncontrolled } from "@refraktor/utils";
2
- import { useCallback, useEffect, useMemo } from "react";
3
- import { useTheme } from "../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../utils";
11
- import {
12
- AccordionProvider,
13
- getNavigableAccordionItems,
14
- useAccordionItemsRegistry
15
- } from "./accordion.context";
16
- import { AccordionControl } from "./accordion-control";
17
- import { AccordionItem } from "./accordion-item";
18
- import { AccordionPanel } from "./accordion-panel";
19
- import {
20
- AccordionClassNames,
21
- AccordionFactoryPayload,
22
- AccordionProps,
23
- AccordionValue
24
- } from "./accordion.types";
25
-
26
- const defaultProps = {
27
- multiple: false,
28
- collapsible: true,
29
- keepMounted: false,
30
- size: "md",
31
- radius: "default",
32
- variant: "default"
33
- } satisfies Partial<AccordionProps>;
34
-
35
- const toDomSafeValue = (value: string) =>
36
- encodeURIComponent(value).replace(/%/g, "-");
37
-
38
- const normalizeOpenValues = (
39
- value: AccordionValue | undefined,
40
- multiple: boolean
41
- ) => {
42
- if (Array.isArray(value)) {
43
- const uniqueValues = Array.from(new Set(value.filter(Boolean)));
44
-
45
- if (!multiple) {
46
- return uniqueValues.slice(0, 1);
47
- }
48
-
49
- return uniqueValues;
50
- }
51
-
52
- if (typeof value === "string" && value.length > 0) {
53
- return [value];
54
- }
55
-
56
- return [];
57
- };
58
-
59
- const Accordion = factory<AccordionFactoryPayload>((_props, ref) => {
60
- const { cx } = useTheme();
61
- const {
62
- id,
63
- children,
64
- value,
65
- defaultValue,
66
- onChange,
67
- multiple,
68
- collapsible,
69
- keepMounted,
70
- size,
71
- radius,
72
- variant,
73
- className,
74
- classNames,
75
- ...props
76
- } = useProps("Accordion", defaultProps, _props);
77
- const classes = useClassNames("Accordion", classNames);
78
- const _id = useId(id);
79
-
80
- const [activeValue, setActiveValue, isControlled] =
81
- useUncontrolled<AccordionValue>({
82
- value,
83
- defaultValue,
84
- finalValue: multiple ? [] : null,
85
- onChange
86
- });
87
-
88
- const openValues = useMemo(
89
- () => normalizeOpenValues(activeValue, multiple),
90
- [activeValue, multiple]
91
- );
92
-
93
- const { registerItem, getItems } = useAccordionItemsRegistry();
94
-
95
- useEffect(() => {
96
- if (multiple || collapsible || openValues.length > 0 || isControlled) {
97
- return;
98
- }
99
-
100
- const firstItem = getNavigableAccordionItems(getItems())[0];
101
-
102
- if (firstItem) {
103
- setActiveValue(firstItem.value);
104
- }
105
- }, [
106
- multiple,
107
- collapsible,
108
- openValues.length,
109
- isControlled,
110
- getItems,
111
- setActiveValue
112
- ]);
113
-
114
- const toggleItem = useCallback(
115
- (itemValue: string) => {
116
- const isOpen = openValues.includes(itemValue);
117
-
118
- if (multiple) {
119
- const nextValues = isOpen
120
- ? openValues.filter((value) => value !== itemValue)
121
- : [...openValues, itemValue];
122
-
123
- setActiveValue(nextValues);
124
- return;
125
- }
126
-
127
- if (isOpen) {
128
- if (collapsible) {
129
- setActiveValue(null);
130
- }
131
-
132
- return;
133
- }
134
-
135
- setActiveValue(itemValue);
136
- },
137
- [multiple, collapsible, openValues, setActiveValue]
138
- );
139
-
140
- const isItemOpen = useCallback(
141
- (itemValue: string) => openValues.includes(itemValue),
142
- [openValues]
143
- );
144
-
145
- const getControlId = useCallback(
146
- (itemValue: string) => `${_id}-control-${toDomSafeValue(itemValue)}`,
147
- [_id]
148
- );
149
-
150
- const getPanelId = useCallback(
151
- (itemValue: string) => `${_id}-panel-${toDomSafeValue(itemValue)}`,
152
- [_id]
153
- );
154
-
155
- const getStyles = useCallback(
156
- (part: keyof AccordionClassNames) => classes[part],
157
- [classes]
158
- );
159
-
160
- return (
161
- <AccordionProvider
162
- value={{
163
- openValues,
164
- multiple,
165
- collapsible,
166
- keepMounted,
167
- size,
168
- radius,
169
- variant,
170
- toggleItem,
171
- isItemOpen,
172
- registerItem,
173
- getItems,
174
- getControlId,
175
- getPanelId,
176
- getStyles
177
- }}
178
- >
179
- <div
180
- ref={ref}
181
- id={_id}
182
- className={cx(
183
- "w-full flex flex-col",
184
- variant === "separated" ? "gap-2" : "gap-0",
185
- classes.root,
186
- className
187
- )}
188
- {...props}
189
- >
190
- {children}
191
- </div>
192
- </AccordionProvider>
193
- );
194
- });
195
-
196
- Accordion.displayName = "@refraktor/core/Accordion";
197
- Accordion.configure = createComponentConfig<AccordionProps>();
198
- Accordion.classNames = createClassNamesConfig<AccordionClassNames>();
199
- Accordion.Item = AccordionItem;
200
- Accordion.Control = AccordionControl;
201
- Accordion.Panel = AccordionPanel;
202
-
203
- export default Accordion;
@@ -1,126 +0,0 @@
1
- import { ComponentPropsWithoutRef, ReactNode } from "react";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- FactoryPayload
7
- } from "../../utils";
8
- import { AccordionControl } from "./accordion-control";
9
- import { AccordionItem } from "./accordion-item";
10
- import { AccordionPanel } from "./accordion-panel";
11
-
12
- export type AccordionValue = string | null | string[];
13
- export type AccordionVariant = "default" | "separated";
14
-
15
- export type AccordionClassNames = {
16
- root?: string;
17
- item?: string;
18
- control?: string;
19
- chevron?: string;
20
- panel?: string;
21
- };
22
-
23
- export interface AccordionProps
24
- extends Omit<
25
- ComponentPropsWithoutRef<"div">,
26
- "onChange" | "value" | "defaultValue"
27
- > {
28
- /** Children containing accordion subcomponents */
29
- children: ReactNode;
30
-
31
- /** Opened value(s) (controlled) */
32
- value?: AccordionValue;
33
-
34
- /** Initial opened value(s) (uncontrolled) */
35
- defaultValue?: AccordionValue;
36
-
37
- /** Callback called when opened value(s) change */
38
- onChange?: (value: AccordionValue) => void;
39
-
40
- /** Allow multiple opened items @default `false` */
41
- multiple?: boolean;
42
-
43
- /** Allow closing opened item in single mode @default `true` */
44
- collapsible?: boolean;
45
-
46
- /** Keep closed panels mounted @default `false` */
47
- keepMounted?: boolean;
48
-
49
- /** Size of control/panel spacing @default `md` */
50
- size?: RefraktorSize;
51
-
52
- /** Radius applied to separated items @default `default` */
53
- radius?: RefraktorRadius;
54
-
55
- /** Visual variant @default `default` */
56
- variant?: AccordionVariant;
57
-
58
- /** Used for editing root class name */
59
- className?: string;
60
-
61
- /** Used for styling different parts of the component */
62
- classNames?: AccordionClassNames;
63
- }
64
-
65
- export interface AccordionItemProps extends ComponentPropsWithoutRef<"div"> {
66
- /** Unique item value */
67
- value: string;
68
-
69
- /** Item content (Control + Panel) */
70
- children: ReactNode;
71
-
72
- /** Whether item is disabled @default `false` */
73
- disabled?: boolean;
74
-
75
- /** Used for editing root class name */
76
- className?: string;
77
- }
78
-
79
- export interface AccordionControlProps
80
- extends Omit<ComponentPropsWithoutRef<"button">, "children"> {
81
- /** Trigger label/content */
82
- children: ReactNode;
83
-
84
- /** Optional chevron content */
85
- chevron?: ReactNode;
86
-
87
- /** Used for editing root class name */
88
- className?: string;
89
- }
90
-
91
- export interface AccordionPanelProps extends ComponentPropsWithoutRef<"div"> {
92
- /** Panel content */
93
- children: ReactNode;
94
-
95
- /** Used for editing root class name */
96
- className?: string;
97
- }
98
-
99
- export interface AccordionFactoryPayload extends FactoryPayload {
100
- props: AccordionProps;
101
- ref: HTMLDivElement;
102
- compound: {
103
- configure: ReturnType<typeof createComponentConfig<AccordionProps>>;
104
- classNames: ReturnType<
105
- typeof createClassNamesConfig<AccordionClassNames>
106
- >;
107
- Item: typeof AccordionItem;
108
- Control: typeof AccordionControl;
109
- Panel: typeof AccordionPanel;
110
- };
111
- }
112
-
113
- export interface AccordionItemFactoryPayload extends FactoryPayload {
114
- props: AccordionItemProps;
115
- ref: HTMLDivElement;
116
- }
117
-
118
- export interface AccordionControlFactoryPayload extends FactoryPayload {
119
- props: AccordionControlProps;
120
- ref: HTMLButtonElement;
121
- }
122
-
123
- export interface AccordionPanelFactoryPayload extends FactoryPayload {
124
- props: AccordionPanelProps;
125
- ref: HTMLDivElement;
126
- }
@@ -1,17 +0,0 @@
1
- export { default as Accordion } from "./accordion";
2
- export { AccordionItem } from "./accordion-item";
3
- export { AccordionControl } from "./accordion-control";
4
- export { AccordionPanel } from "./accordion-panel";
5
- export type {
6
- AccordionProps,
7
- AccordionItemProps,
8
- AccordionControlProps,
9
- AccordionPanelProps,
10
- AccordionClassNames,
11
- AccordionVariant,
12
- AccordionValue,
13
- AccordionFactoryPayload,
14
- AccordionItemFactoryPayload,
15
- AccordionControlFactoryPayload,
16
- AccordionPanelFactoryPayload
17
- } from "./accordion.types";
@@ -1,73 +0,0 @@
1
- import { useId } from "@refraktor/utils";
2
- import { Children, cloneElement, isValidElement } from "react";
3
- import { useTheme } from "../../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../../utils";
11
- import {
12
- AvatarGroupClassNames,
13
- AvatarGroupFactoryPayload,
14
- AvatarGroupProps
15
- } from "../avatar.types";
16
- import Avatar from "../avatar";
17
-
18
- const defaultProps = {
19
- spacing: -8,
20
- limit: 5
21
- } satisfies Partial<AvatarGroupProps>;
22
-
23
- const AvatarGroup = factory<AvatarGroupFactoryPayload>((_props, ref) => {
24
- const { cx } = useTheme();
25
- const { id, children, spacing, limit, className, classNames, ...props } =
26
- useProps("AvatarGroup", defaultProps, _props);
27
- const classes = useClassNames("AvatarGroup", classNames);
28
-
29
- const _id = useId(id);
30
-
31
- const childArray = Children.toArray(children);
32
- const visibleChildren = limit ? childArray.slice(0, limit) : childArray;
33
- const remainingCount = limit ? Math.max(0, childArray.length - limit) : 0;
34
-
35
- return (
36
- <div
37
- ref={ref}
38
- id={_id}
39
- className={cx("inline-flex items-center", classes.root, className)}
40
- {...props}
41
- >
42
- {visibleChildren.map((child, index) => {
43
- if (!isValidElement(child)) return null;
44
-
45
- return cloneElement(child as any, {
46
- key: index,
47
- style: {
48
- marginLeft: index === 0 ? 0 : spacing,
49
- zIndex: visibleChildren.length - index,
50
- ...((child.props as any).style || {})
51
- },
52
- className: (child.props as any).className
53
- });
54
- })}
55
-
56
- {remainingCount > 0 && (
57
- <Avatar
58
- initials={`+${remainingCount}`}
59
- style={{
60
- marginLeft: spacing,
61
- zIndex: 0
62
- }}
63
- />
64
- )}
65
- </div>
66
- );
67
- });
68
-
69
- AvatarGroup.displayName = "@refraktor/core/AvatarGroup";
70
- AvatarGroup.configure = createComponentConfig<AvatarGroupProps>();
71
- AvatarGroup.classNames = createClassNamesConfig<AvatarGroupClassNames>();
72
-
73
- export default AvatarGroup;
@@ -1 +0,0 @@
1
- export { default as AvatarGroup } from "./avatar-group";
@@ -1,11 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- const sizes: Record<RefraktorSize, string> = {
4
- xs: "size-6 text-xs",
5
- sm: "size-8 text-sm",
6
- md: "size-10 text-base",
7
- lg: "size-12 text-lg",
8
- xl: "size-16 text-xl"
9
- };
10
-
11
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
@@ -1,142 +0,0 @@
1
- import { useId } from "@refraktor/utils";
2
- import { useState, useEffect } from "react";
3
- import { useTheme } from "../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../utils";
11
- import {
12
- AvatarClassNames,
13
- AvatarFactoryPayload,
14
- AvatarProps
15
- } from "./avatar.types";
16
- import { getSize } from "./avatar.styles";
17
- import { AvatarGroup } from "./avatar-group";
18
- import { UserIcon } from "../../icons";
19
-
20
- const defaultProps = {
21
- size: "md",
22
- radius: "full"
23
- } satisfies Partial<AvatarProps>;
24
-
25
- function getInitials(name: string): string {
26
- const parts = name.trim().split(/\s+/).filter(Boolean);
27
-
28
- if (parts.length === 0) return "";
29
- if (parts.length === 1) {
30
- return parts[0].slice(0, 2).toUpperCase();
31
- }
32
-
33
- return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
34
- }
35
-
36
- const Avatar = factory<AvatarFactoryPayload>((_props, ref) => {
37
- const { cx, getRadius } = useTheme();
38
- const {
39
- id,
40
- src,
41
- alt,
42
- name,
43
- initials,
44
- fallback,
45
- size,
46
- radius,
47
- className,
48
- classNames,
49
- ...props
50
- } = useProps("Avatar", defaultProps, _props);
51
- const classes = useClassNames("Avatar", classNames);
52
-
53
- const _id = useId(id);
54
-
55
- const [imageStatus, setImageStatus] = useState<
56
- "loading" | "loaded" | "error"
57
- >(src ? "loading" : "error");
58
-
59
- useEffect(() => {
60
- if (src) {
61
- setImageStatus("loading");
62
- } else {
63
- setImageStatus("error");
64
- }
65
- }, [src]);
66
-
67
- const handleImageLoad = () => {
68
- setImageStatus("loaded");
69
- };
70
-
71
- const handleImageError = () => {
72
- setImageStatus("error");
73
- };
74
-
75
- const displayInitials = initials || (name ? getInitials(name) : null);
76
-
77
- const showImage = src && imageStatus !== "error";
78
-
79
- const showInitials = !showImage && displayInitials;
80
-
81
- const showFallback = !showImage && !showInitials;
82
-
83
- return (
84
- <div
85
- ref={ref}
86
- id={_id}
87
- className={cx(
88
- "relative inline-flex items-center justify-center overflow-hidden shrink-0",
89
- "bg-[var(--refraktor-bg-hover)]",
90
- getSize(size),
91
- getRadius(radius),
92
- classes.root,
93
- className
94
- )}
95
- {...props}
96
- >
97
- {showImage && (
98
- <img
99
- src={src}
100
- alt={alt || name || "Avatar"}
101
- onLoad={handleImageLoad}
102
- onError={handleImageError}
103
- className={cx(
104
- "w-full h-full object-cover",
105
- imageStatus === "loading" && "opacity-0",
106
- imageStatus === "loaded" &&
107
- "opacity-100 transition-opacity duration-200",
108
- classes.image
109
- )}
110
- />
111
- )}
112
-
113
- {showInitials && (
114
- <span
115
- className={cx("font-medium select-none", classes.initials)}
116
- aria-label={name || alt}
117
- >
118
- {displayInitials}
119
- </span>
120
- )}
121
-
122
- {showFallback && (
123
- <span
124
- className={cx(
125
- "text-[var(--refraktor-text-muted)] flex items-center justify-center",
126
- classes.fallback
127
- )}
128
- aria-label="Avatar"
129
- >
130
- {fallback || <UserIcon size={24} />}
131
- </span>
132
- )}
133
- </div>
134
- );
135
- });
136
-
137
- Avatar.displayName = "@refraktor/core/Avatar";
138
- Avatar.configure = createComponentConfig<AvatarProps>();
139
- Avatar.classNames = createClassNamesConfig<AvatarClassNames>();
140
- Avatar.Group = AvatarGroup;
141
-
142
- export default Avatar;
@@ -1,86 +0,0 @@
1
- import { ComponentPropsWithoutRef, ReactNode } from "react";
2
- import { RefraktorRadius, RefraktorSize } from "../../theme";
3
- import {
4
- createClassNamesConfig,
5
- createComponentConfig,
6
- FactoryPayload
7
- } from "../../utils";
8
- import { AvatarGroup } from "./avatar-group";
9
-
10
- export type AvatarClassNames = {
11
- root?: string;
12
- image?: string;
13
- initials?: string;
14
- fallback?: string;
15
- };
16
-
17
- export interface AvatarProps extends ComponentPropsWithoutRef<"div"> {
18
- /** Image source URL */
19
- src?: string | null;
20
-
21
- /** Alt text for the image */
22
- alt?: string;
23
-
24
- /** Name used to generate initials (e.g., "John Doe" -> "JD") */
25
- name?: string;
26
-
27
- /** Custom initials to display (overrides name-based initials) */
28
- initials?: string;
29
-
30
- /** Custom fallback element when no image or initials */
31
- fallback?: ReactNode;
32
-
33
- /** The size of the avatar @default `md` */
34
- size?: RefraktorSize;
35
-
36
- /** The radius of the avatar @default `full` */
37
- radius?: RefraktorRadius;
38
-
39
- /** Used for editing root class name */
40
- className?: string;
41
-
42
- /** Used for styling different parts of the component */
43
- classNames?: AvatarClassNames;
44
- }
45
-
46
- export interface AvatarFactoryPayload extends FactoryPayload {
47
- props: AvatarProps;
48
- ref: HTMLDivElement;
49
- compound: {
50
- configure: ReturnType<typeof createComponentConfig<AvatarProps>>;
51
- classNames: ReturnType<typeof createClassNamesConfig<AvatarClassNames>>;
52
- Group: typeof AvatarGroup;
53
- };
54
- }
55
-
56
- export type AvatarGroupClassNames = {
57
- root?: string;
58
- };
59
-
60
- export interface AvatarGroupProps extends ComponentPropsWithoutRef<"div"> {
61
- /** Avatar components to render */
62
- children: ReactNode;
63
-
64
- /** Spacing between avatars (negative value creates overlap) @default `-8` */
65
- spacing?: number;
66
-
67
- /** Maximum number of avatars to display @default `5` */
68
- limit?: number;
69
-
70
- /** Used for editing root class name */
71
- className?: string;
72
-
73
- /** Used for styling different parts of the component */
74
- classNames?: AvatarGroupClassNames;
75
- }
76
-
77
- export interface AvatarGroupFactoryPayload extends FactoryPayload {
78
- props: AvatarGroupProps;
79
- ref: HTMLDivElement;
80
- compound: {
81
- configure: ReturnType<typeof createComponentConfig<AvatarGroupProps>>;
82
- classNames: ReturnType<
83
- typeof createClassNamesConfig<AvatarGroupClassNames>
84
- >;
85
- };
86
- }
@@ -1,8 +0,0 @@
1
- export { default as Avatar } from "./avatar";
2
- export { AvatarGroup } from "./avatar-group";
3
- export type {
4
- AvatarProps,
5
- AvatarClassNames,
6
- AvatarGroupProps,
7
- AvatarGroupClassNames
8
- } from "./avatar.types";
@@ -1,21 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
- import { BadgeVariant } from "./badge.types";
3
-
4
- const sizes: Record<RefraktorSize, string> = {
5
- xs: "text-xs px-1.5 py-0.5",
6
- sm: "text-xs px-2 py-0.5",
7
- md: "text-sm px-2.5 py-0.5",
8
- lg: "text-base px-3 py-0.5",
9
- xl: "text-lg px-3.5 py-0.5"
10
- };
11
-
12
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
13
-
14
- const variants: Record<BadgeVariant, string> = {
15
- default: "bg-[var(--refraktor-bg)] text-[var(--refraktor-text)]",
16
- outline:
17
- "border border-[var(--refraktor-border)] text-[var(--refraktor-text)]"
18
- };
19
-
20
- export const getVariant = (variant: BadgeVariant = "default") =>
21
- variants[variant];