@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,62 +0,0 @@
1
- import { 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
- BadgeClassNames,
12
- BadgeFactoryPayload,
13
- BadgeProps
14
- } from "./badge.types";
15
- import { getSize, getVariant } from "./badge.styles";
16
-
17
- const defaultProps = {
18
- size: "xs",
19
- radius: "default",
20
- variant: "default"
21
- } satisfies Partial<BadgeProps>;
22
-
23
- const Badge = factory<BadgeFactoryPayload>((_props, ref) => {
24
- const { cx, getRadius } = useTheme();
25
- const {
26
- children,
27
- id,
28
- size,
29
- radius,
30
- variant,
31
- className,
32
- classNames,
33
- ...props
34
- } = useProps("Badge", defaultProps, _props);
35
- const classes = useClassNames("Badge", classNames);
36
-
37
- const _id = useId(id);
38
-
39
- return (
40
- <div
41
- id={_id}
42
- ref={ref}
43
- className={cx(
44
- "inline-flex items-center justify-center w-fit",
45
- getSize(size),
46
- getRadius(radius),
47
- getVariant(variant),
48
- classes.root,
49
- className
50
- )}
51
- {...props}
52
- >
53
- {children}
54
- </div>
55
- );
56
- });
57
-
58
- Badge.displayName = "@refraktor/core/Badge";
59
- Badge.configure = createComponentConfig<BadgeProps>();
60
- Badge.classNames = createClassNamesConfig<BadgeClassNames>();
61
-
62
- export default Badge;
@@ -1,40 +0,0 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
- import type {
3
- createClassNamesConfig,
4
- createComponentConfig,
5
- FactoryPayload
6
- } from "../../utils";
7
- import { RefraktorRadius, RefraktorSize } from "../../theme";
8
-
9
- export type BadgeVariant = "default" | "outline";
10
-
11
- export type BadgeClassNames = {
12
- root?: string;
13
- content?: string;
14
- };
15
-
16
- export interface BadgeProps extends ComponentPropsWithoutRef<"div"> {
17
- /** The variant of the badge @default `default` */
18
- variant?: BadgeVariant;
19
-
20
- /** The size of the badge @default `xs` */
21
- size?: RefraktorSize;
22
-
23
- /** The radius of the badge @default `md` */
24
- radius?: RefraktorRadius;
25
-
26
- /** Used for editing root class name */
27
- className?: string;
28
-
29
- /** Used for styling different parts of the component */
30
- classNames?: BadgeClassNames;
31
- }
32
-
33
- export interface BadgeFactoryPayload extends FactoryPayload {
34
- props: BadgeProps;
35
- ref: HTMLDivElement;
36
- compound: {
37
- configure: ReturnType<typeof createComponentConfig<BadgeProps>>;
38
- classNames: ReturnType<typeof createClassNamesConfig<BadgeClassNames>>;
39
- };
40
- }
@@ -1,2 +0,0 @@
1
- export { default as Badge } from "./badge";
2
- export type { BadgeProps, BadgeClassNames } from "./badge.types";
@@ -1,55 +0,0 @@
1
- import { RefraktorSize } from "../../theme";
2
-
3
- type BreadcrumbsSizeStyles = {
4
- list: string;
5
- item: string;
6
- label: string;
7
- separator: string;
8
- collapse: string;
9
- iconSize: number;
10
- };
11
-
12
- const sizes: Record<RefraktorSize, BreadcrumbsSizeStyles> = {
13
- xs: {
14
- list: "gap-1",
15
- item: "gap-1",
16
- label: "text-xs",
17
- separator: "mx-1",
18
- collapse: "h-5 min-w-5 px-1 text-xs",
19
- iconSize: 12
20
- },
21
- sm: {
22
- list: "gap-1",
23
- item: "gap-1",
24
- label: "text-xs",
25
- separator: "mx-1",
26
- collapse: "h-6 min-w-6 px-1.5 text-xs",
27
- iconSize: 14
28
- },
29
- md: {
30
- list: "gap-1.5",
31
- item: "gap-1.5",
32
- label: "text-sm",
33
- separator: "mx-1.5",
34
- collapse: "h-7 min-w-7 px-2 text-sm",
35
- iconSize: 16
36
- },
37
- lg: {
38
- list: "gap-2",
39
- item: "gap-2",
40
- label: "text-base",
41
- separator: "mx-2",
42
- collapse: "h-8 min-w-8 px-2.5 text-base",
43
- iconSize: 18
44
- },
45
- xl: {
46
- list: "gap-2.5",
47
- item: "gap-2.5",
48
- label: "text-lg",
49
- separator: "mx-2.5",
50
- collapse: "h-9 min-w-9 px-3 text-lg",
51
- iconSize: 20
52
- }
53
- };
54
-
55
- export const getSize = (size: RefraktorSize = "md") => sizes[size];
@@ -1,136 +0,0 @@
1
- import { render as rtlRender } from "@testing-library/react";
2
- import { describe, expect, it, vi } from "vitest";
3
- import { ThemeProvider } from "../../theme";
4
- import { render, screen, userEvent } from "../../vitest";
5
- import Breadcrumbs from "./breadcrumbs";
6
-
7
- const items = [
8
- { label: "Home", href: "/" },
9
- { label: "Workspace", href: "/workspace" },
10
- { label: "Projects", href: "/workspace/projects" },
11
- { label: "Refraktor", href: "/workspace/projects/refraktor" },
12
- { label: "Components", href: "/workspace/projects/refraktor/components" },
13
- { label: "Breadcrumbs" }
14
- ];
15
-
16
- describe("@refraktor/core/Breadcrumbs", () => {
17
- it("renders navigation, links and current page", async () => {
18
- await render(<Breadcrumbs items={items.slice(0, 3)} maxItems={0} />);
19
-
20
- expect(
21
- screen.getByRole("navigation", { name: "Breadcrumb" })
22
- ).toBeInTheDocument();
23
- expect(screen.getByRole("link", { name: "Home" })).toHaveAttribute(
24
- "href",
25
- "/"
26
- );
27
- expect(screen.getByText("Projects")).toHaveAttribute(
28
- "aria-current",
29
- "page"
30
- );
31
- });
32
-
33
- it("collapses and expands middle items", async () => {
34
- const user = userEvent.setup();
35
- const onExpandedChange = vi.fn();
36
-
37
- await render(
38
- <Breadcrumbs
39
- items={items}
40
- maxItems={4}
41
- onExpandedChange={onExpandedChange}
42
- />
43
- );
44
-
45
- expect(screen.getByRole("button", { name: /show full breadcrumb path/i })).toBeInTheDocument();
46
- expect(screen.queryByText("Projects")).not.toBeInTheDocument();
47
-
48
- await user.click(
49
- screen.getByRole("button", { name: /show full breadcrumb path/i })
50
- );
51
-
52
- expect(onExpandedChange).toHaveBeenCalledWith(true);
53
- expect(screen.getByText("Projects")).toBeInTheDocument();
54
- expect(
55
- screen.queryByRole("button", { name: /show full breadcrumb path/i })
56
- ).not.toBeInTheDocument();
57
- });
58
-
59
- it("supports itemsBeforeCollapse and itemsAfterCollapse", async () => {
60
- await render(
61
- <Breadcrumbs
62
- items={items}
63
- maxItems={4}
64
- itemsBeforeCollapse={2}
65
- itemsAfterCollapse={2}
66
- />
67
- );
68
-
69
- expect(screen.getByText("Home")).toBeInTheDocument();
70
- expect(screen.getByText("Workspace")).toBeInTheDocument();
71
- expect(screen.getByText("Components")).toBeInTheDocument();
72
- expect(screen.getByText("Breadcrumbs")).toBeInTheDocument();
73
- expect(screen.queryByText("Projects")).not.toBeInTheDocument();
74
- });
75
-
76
- it("supports controlled expanded mode", async () => {
77
- await render(<Breadcrumbs items={items} maxItems={3} expanded />);
78
-
79
- expect(screen.getByText("Projects")).toBeInTheDocument();
80
- expect(
81
- screen.queryByRole("button", { name: /show full breadcrumb path/i })
82
- ).not.toBeInTheDocument();
83
- });
84
-
85
- it("supports custom separator", async () => {
86
- await render(<Breadcrumbs items={items.slice(0, 3)} separator="/" />);
87
-
88
- expect(screen.getAllByText("/")).toHaveLength(2);
89
- });
90
-
91
- it("supports root and slot class names", async () => {
92
- const { container } = await render(
93
- <Breadcrumbs
94
- items={items}
95
- maxItems={4}
96
- className="custom-root"
97
- classNames={{
98
- list: "custom-list",
99
- item: "custom-item",
100
- link: "custom-link",
101
- current: "custom-current",
102
- separator: "custom-separator",
103
- collapse: "custom-collapse"
104
- }}
105
- />
106
- );
107
-
108
- const root = container.firstElementChild as HTMLElement;
109
-
110
- expect(root).toHaveClass("custom-root");
111
- expect(root.querySelector("ol")).toHaveClass("custom-list");
112
- expect(root.querySelector("li")).toHaveClass("custom-item");
113
- expect(screen.getByRole("link", { name: "Home" })).toHaveClass(
114
- "custom-link"
115
- );
116
- expect(root.querySelector('[aria-current="page"]')).toHaveClass(
117
- "custom-current"
118
- );
119
- expect(
120
- screen.getByRole("button", { name: /show full breadcrumb path/i })
121
- ).toHaveClass("custom-collapse");
122
- expect(root.querySelector("span[aria-hidden='true']")).toHaveClass(
123
- "custom-separator"
124
- );
125
- });
126
-
127
- it("returns null when items array is empty", () => {
128
- const { container } = rtlRender(
129
- <ThemeProvider>
130
- <Breadcrumbs items={[]} />
131
- </ThemeProvider>
132
- );
133
-
134
- expect(container.firstChild).toBeNull();
135
- });
136
- });
@@ -1,199 +0,0 @@
1
- import { useId, useUncontrolled } from "@refraktor/utils";
2
- import { ChevronIcon } from "../../icons";
3
- import { useTheme } from "../../theme";
4
- import {
5
- createClassNamesConfig,
6
- createComponentConfig,
7
- factory,
8
- useClassNames,
9
- useProps
10
- } from "../../utils";
11
- import { getSize } from "./breadcrumbs.styles";
12
- import {
13
- BreadcrumbsClassNames,
14
- BreadcrumbsFactoryPayload,
15
- BreadcrumbsProps
16
- } from "./breadcrumbs.types";
17
- import { buildBreadcrumbsRange } from "./breadcrumbs.utils";
18
-
19
- const defaultProps = {
20
- maxItems: 4,
21
- itemsBeforeCollapse: 1,
22
- itemsAfterCollapse: 1,
23
- defaultExpanded: false,
24
- expandLabel: "Show full breadcrumb path",
25
- size: "md",
26
- radius: "default"
27
- } satisfies Partial<BreadcrumbsProps>;
28
-
29
- const Breadcrumbs = factory<BreadcrumbsFactoryPayload>((_props, ref) => {
30
- const { cx, getRadius } = useTheme();
31
- const {
32
- id,
33
- items,
34
- maxItems,
35
- itemsBeforeCollapse,
36
- itemsAfterCollapse,
37
- expanded,
38
- defaultExpanded,
39
- onExpandedChange,
40
- expandLabel,
41
- separator,
42
- size,
43
- radius,
44
- className,
45
- classNames,
46
- ...props
47
- } = useProps("Breadcrumbs", defaultProps, _props);
48
- const classes = useClassNames("Breadcrumbs", classNames);
49
- const _id = useId(id);
50
-
51
- const [isExpanded, setIsExpanded] = useUncontrolled<boolean>({
52
- value: expanded,
53
- defaultValue: defaultExpanded,
54
- finalValue: false,
55
- onChange: onExpandedChange
56
- });
57
-
58
- const sizeStyles = getSize(size);
59
- const visibleItems = buildBreadcrumbsRange({
60
- total: items.length,
61
- maxItems,
62
- itemsBeforeCollapse,
63
- itemsAfterCollapse,
64
- expanded: isExpanded
65
- });
66
-
67
- if (items.length === 0) {
68
- return null;
69
- }
70
-
71
- const resolvedSeparator =
72
- separator !== undefined ? (
73
- separator
74
- ) : (
75
- <ChevronIcon direction="right" size={sizeStyles.iconSize} />
76
- );
77
-
78
- return (
79
- <nav
80
- {...props}
81
- ref={ref}
82
- id={_id}
83
- aria-label={props["aria-label"] ?? "Breadcrumb"}
84
- className={cx("w-full", classes.root, className)}
85
- >
86
- <ol
87
- className={cx(
88
- "flex flex-wrap items-center",
89
- sizeStyles.list,
90
- classes.list
91
- )}
92
- >
93
- {visibleItems.map((rangeItem, index) => {
94
- const showSeparator = index < visibleItems.length - 1;
95
- const content = (() => {
96
- if (rangeItem === "collapse") {
97
- return (
98
- <button
99
- type="button"
100
- aria-label={expandLabel}
101
- className={cx(
102
- "inline-flex items-center justify-center select-none outline-none transition-colors",
103
- "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--refraktor-primary)]",
104
- "text-[var(--refraktor-text-secondary)] hover:bg-[var(--refraktor-bg-hover)] hover:text-[var(--refraktor-text)]",
105
- sizeStyles.collapse,
106
- getRadius(radius),
107
- classes.collapse
108
- )}
109
- onClick={() => setIsExpanded(true)}
110
- >
111
- ...
112
- </button>
113
- );
114
- }
115
-
116
- const item = items[rangeItem];
117
- const isCurrent = rangeItem === items.length - 1;
118
- const baseLabelClass = cx(
119
- "inline-flex min-w-0 items-center truncate",
120
- sizeStyles.label
121
- );
122
-
123
- if (!isCurrent && item.href) {
124
- return (
125
- <a
126
- href={item.href}
127
- target={item.target}
128
- rel={item.rel}
129
- aria-label={item.ariaLabel}
130
- className={cx(
131
- baseLabelClass,
132
- "outline-none transition-colors",
133
- "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--refraktor-primary)]",
134
- "text-[var(--refraktor-text-secondary)] hover:text-[var(--refraktor-text)]",
135
- classes.link
136
- )}
137
- >
138
- {item.label}
139
- </a>
140
- );
141
- }
142
-
143
- return (
144
- <span
145
- aria-label={item.ariaLabel}
146
- aria-current={isCurrent ? "page" : undefined}
147
- className={cx(
148
- baseLabelClass,
149
- isCurrent
150
- ? "font-medium text-[var(--refraktor-text)]"
151
- : "text-[var(--refraktor-text-secondary)]",
152
- isCurrent ? classes.current : classes.link
153
- )}
154
- >
155
- {item.label}
156
- </span>
157
- );
158
- })();
159
-
160
- return (
161
- <li
162
- key={
163
- rangeItem === "collapse"
164
- ? "collapse"
165
- : `item-${rangeItem}`
166
- }
167
- className={cx(
168
- "inline-flex min-w-0 items-center",
169
- sizeStyles.item,
170
- classes.item
171
- )}
172
- >
173
- {content}
174
-
175
- {showSeparator && (
176
- <span
177
- aria-hidden="true"
178
- className={cx(
179
- "inline-flex items-center text-[var(--refraktor-text-tertiary)]",
180
- sizeStyles.separator,
181
- classes.separator
182
- )}
183
- >
184
- {resolvedSeparator}
185
- </span>
186
- )}
187
- </li>
188
- );
189
- })}
190
- </ol>
191
- </nav>
192
- );
193
- });
194
-
195
- Breadcrumbs.displayName = "@refraktor/core/Breadcrumbs";
196
- Breadcrumbs.configure = createComponentConfig<BreadcrumbsProps>();
197
- Breadcrumbs.classNames = createClassNamesConfig<BreadcrumbsClassNames>();
198
-
199
- export default Breadcrumbs;
@@ -1,78 +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
-
9
- export type BreadcrumbsItem = {
10
- label: ReactNode;
11
- href?: string;
12
- target?: ComponentPropsWithoutRef<"a">["target"];
13
- rel?: ComponentPropsWithoutRef<"a">["rel"];
14
- ariaLabel?: string;
15
- };
16
-
17
- export type BreadcrumbsClassNames = {
18
- root?: string;
19
- list?: string;
20
- item?: string;
21
- link?: string;
22
- current?: string;
23
- separator?: string;
24
- collapse?: string;
25
- };
26
-
27
- export interface BreadcrumbsProps
28
- extends Omit<ComponentPropsWithoutRef<"nav">, "children"> {
29
- /** Breadcrumb items in hierarchical order */
30
- items: BreadcrumbsItem[];
31
-
32
- /** Collapse items when amount exceeds this number. Use `0` to disable @default `4` */
33
- maxItems?: number;
34
-
35
- /** Amount of visible items before collapsed section @default `1` */
36
- itemsBeforeCollapse?: number;
37
-
38
- /** Amount of visible items after collapsed section @default `1` */
39
- itemsAfterCollapse?: number;
40
-
41
- /** Collapse state (controlled) */
42
- expanded?: boolean;
43
-
44
- /** Initial collapse state (uncontrolled) @default `false` */
45
- defaultExpanded?: boolean;
46
-
47
- /** Callback called when collapse state changes */
48
- onExpandedChange?: (expanded: boolean) => void;
49
-
50
- /** Accessible label for collapse control @default `Show full breadcrumb path` */
51
- expandLabel?: string;
52
-
53
- /** Separator between items */
54
- separator?: ReactNode;
55
-
56
- /** Size of breadcrumb text and controls @default `md` */
57
- size?: RefraktorSize;
58
-
59
- /** Radius of collapse control @default `default` */
60
- radius?: RefraktorRadius;
61
-
62
- /** Used for editing root class name */
63
- className?: string;
64
-
65
- /** Used for styling different parts of the component */
66
- classNames?: BreadcrumbsClassNames;
67
- }
68
-
69
- export interface BreadcrumbsFactoryPayload extends FactoryPayload {
70
- props: BreadcrumbsProps;
71
- ref: HTMLElement;
72
- compound: {
73
- configure: ReturnType<typeof createComponentConfig<BreadcrumbsProps>>;
74
- classNames: ReturnType<
75
- typeof createClassNamesConfig<BreadcrumbsClassNames>
76
- >;
77
- };
78
- }
@@ -1,70 +0,0 @@
1
- export type BreadcrumbsRangeItem = number | "collapse";
2
-
3
- export type BreadcrumbsRangeOptions = {
4
- total: number;
5
- maxItems: number;
6
- itemsBeforeCollapse: number;
7
- itemsAfterCollapse: number;
8
- expanded: boolean;
9
- };
10
-
11
- function range(start: number, end: number) {
12
- if (end < start) {
13
- return [];
14
- }
15
-
16
- const length = end - start + 1;
17
-
18
- return Array.from({ length }, (_, index) => start + index);
19
- }
20
-
21
- function toSafeInteger(value: number, fallback: number, minimum = 0) {
22
- if (!Number.isFinite(value)) {
23
- return fallback;
24
- }
25
-
26
- return Math.max(minimum, Math.trunc(value));
27
- }
28
-
29
- export function buildBreadcrumbsRange(
30
- options: BreadcrumbsRangeOptions
31
- ): BreadcrumbsRangeItem[] {
32
- const total = toSafeInteger(options.total, 0, 0);
33
-
34
- if (total <= 0) {
35
- return [];
36
- }
37
-
38
- const all = range(0, total - 1);
39
-
40
- if (options.expanded) {
41
- return all;
42
- }
43
-
44
- const maxItems = toSafeInteger(options.maxItems, 0, 0);
45
-
46
- if (maxItems === 0 || total <= maxItems) {
47
- return all;
48
- }
49
-
50
- const itemsBeforeCollapse = Math.min(
51
- toSafeInteger(options.itemsBeforeCollapse, 1, 1),
52
- total - 1
53
- );
54
- const itemsAfterCollapse = Math.min(
55
- toSafeInteger(options.itemsAfterCollapse, 1, 1),
56
- total - itemsBeforeCollapse
57
- );
58
-
59
- const hiddenItems =
60
- total - itemsBeforeCollapse - Math.max(itemsAfterCollapse, 1);
61
-
62
- if (hiddenItems <= 1) {
63
- return all;
64
- }
65
-
66
- const start = range(0, itemsBeforeCollapse - 1);
67
- const end = range(total - itemsAfterCollapse, total - 1);
68
-
69
- return [...start, "collapse", ...end];
70
- }
@@ -1,6 +0,0 @@
1
- export { default as Breadcrumbs } from "./breadcrumbs";
2
- export type {
3
- BreadcrumbsProps,
4
- BreadcrumbsItem,
5
- BreadcrumbsClassNames
6
- } from "./breadcrumbs.types";
@@ -1,28 +0,0 @@
1
- import { ButtonSize, ButtonVariant } from "./button.types";
2
-
3
- const sizes: Record<ButtonSize, string> = {
4
- xs: "text-xs px-1.5 h-5 gap-1",
5
- sm: "text-xs px-2 h-6 gap-1.5",
6
- md: "text-sm px-2.5 h-8 gap-2",
7
- lg: "text-base px-3 h-10 gap-2.5",
8
- xl: "text-lg px-4 h-12 gap-3",
9
- "icon-xs": "size-5 shrink-0",
10
- "icon-sm": "size-6 shrink-0",
11
- "icon-md": "size-8 shrink-0",
12
- "icon-lg": "size-10 shrink-0",
13
- "icon-xl": "size-12 shrink-0"
14
- };
15
-
16
- export const getSize = (size: ButtonSize = "md") => sizes[size];
17
-
18
- const variants: Record<ButtonVariant, string> = {
19
- default:
20
- "bg-[var(--refraktor-bg)] text-[var(--refraktor-text)] hover:bg-[var(--refraktor-bg-hover)]",
21
- filled: "bg-[var(--refraktor-primary)] text-[var(--refraktor-primary-text)] hover:bg-[var(--refraktor-primary-hover)]",
22
- outline:
23
- "text-[var(--refraktor-text)] border border-[var(--refraktor-border)] hover:border-[var(--refraktor-border-hover)]",
24
- ghost: "bg-transparent text-[var(--refraktor-text)] hover:bg-[var(--refraktor-bg-hover)]"
25
- };
26
-
27
- export const getVariant = (variant: ButtonVariant = "default") =>
28
- variants[variant];