@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,441 +0,0 @@
1
- import { useId } from "@refraktor/utils";
2
- import {
3
- createComponentConfig,
4
- polymorphicFactory,
5
- useProps
6
- } from "../../utils";
7
- import {
8
- TransitionDefinition,
9
- TransitionDirection,
10
- TransitionFactoryPayload,
11
- TransitionProps,
12
- TransitionState,
13
- TransitionTimingValue
14
- } from "./transition.types";
15
- import {
16
- CSSProperties,
17
- useCallback,
18
- useEffect,
19
- useMemo,
20
- useRef,
21
- useState
22
- } from "react";
23
- import transitions from "./transitions";
24
-
25
- const defaultProps = {
26
- duration: 200,
27
- delay: 0,
28
- easing: "cubic-bezier(0.4, 0, 0.2, 1)",
29
- transition: "fade",
30
- properties: "auto",
31
- keepMounted: false,
32
- appear: true,
33
- immediate: false,
34
- useGPU: true,
35
- reduceMotion: "respect",
36
- onEnterStart: () => {},
37
- onEnterEnd: () => {},
38
- onExitStart: () => {},
39
- onExitEnd: () => {},
40
- onStateChange: () => {}
41
- } satisfies Partial<TransitionProps>;
42
-
43
- const resolveTimingValue = <T,>(
44
- value: TransitionTimingValue<T> | undefined,
45
- direction: TransitionDirection,
46
- fallback: T
47
- ): T => {
48
- if (value == null) {
49
- return fallback;
50
- }
51
-
52
- if (
53
- typeof value === "object" &&
54
- !Array.isArray(value) &&
55
- value !== null &&
56
- ("enter" in value || "exit" in value)
57
- ) {
58
- return (
59
- (value as Partial<Record<TransitionDirection, T>>)[direction] ??
60
- fallback
61
- );
62
- }
63
-
64
- return value as T;
65
- };
66
-
67
- const prefersReducedMotionQuery = "(prefers-reduced-motion: reduce)";
68
-
69
- const resolveTransitionDefinition = (
70
- transition: TransitionProps["transition"]
71
- ): TransitionDefinition => {
72
- if (!transition || typeof transition === "string") {
73
- return transitions[(transition ?? "fade") as keyof typeof transitions];
74
- }
75
-
76
- return transition;
77
- };
78
-
79
- const collectTransitionProperties = (
80
- transitionDefinition: TransitionDefinition
81
- ): string[] => {
82
- if (transitionDefinition.properties?.length) {
83
- return transitionDefinition.properties;
84
- }
85
-
86
- return ["opacity", "transform"];
87
- };
88
-
89
- const Transition = polymorphicFactory<TransitionFactoryPayload>(
90
- (_props, ref) => {
91
- const {
92
- as,
93
- id,
94
- mounted,
95
- children,
96
- duration,
97
- delay,
98
- easing,
99
- transition,
100
- properties,
101
- keepMounted,
102
- appear,
103
- immediate,
104
- reduceMotion,
105
- onEnterStart,
106
- onEnterEnd,
107
- onExitStart,
108
- onExitEnd,
109
- onStateChange,
110
- useGPU,
111
- className,
112
- style,
113
- ...props
114
- } = useProps("Transition", defaultProps, _props);
115
-
116
- const Component = as ?? "div";
117
- const _id = useId(id);
118
-
119
- const [state, setState] = useState<TransitionState>(() => {
120
- if (mounted && !appear) {
121
- return "entered";
122
- }
123
-
124
- return mounted ? "entering" : "exited";
125
- });
126
- const [isRendered, setIsRendered] = useState(mounted || keepMounted);
127
- const [direction, setDirection] = useState<TransitionDirection>(
128
- mounted ? "enter" : "exit"
129
- );
130
- const [prefersReducedMotion, setPrefersReducedMotion] = useState(() => {
131
- if (
132
- typeof window === "undefined" ||
133
- typeof window.matchMedia !== "function"
134
- ) {
135
- return false;
136
- }
137
-
138
- return window.matchMedia(prefersReducedMotionQuery).matches;
139
- });
140
-
141
- const isInitialRender = useRef(true);
142
- const timeoutRef = useRef<number | null>(null);
143
- const rafRef = useRef<number | null>(null);
144
- const runIdRef = useRef(0);
145
-
146
- const clearScheduled = useCallback(() => {
147
- if (timeoutRef.current !== null) {
148
- window.clearTimeout(timeoutRef.current);
149
- timeoutRef.current = null;
150
- }
151
-
152
- if (rafRef.current !== null) {
153
- window.cancelAnimationFrame(rafRef.current);
154
- rafRef.current = null;
155
- }
156
- }, []);
157
-
158
- const setTransitionState = useCallback(
159
- (nextState: TransitionState) => {
160
- setState((previousState) => {
161
- if (previousState !== nextState) {
162
- onStateChange?.(nextState);
163
- }
164
-
165
- return nextState;
166
- });
167
- },
168
- [onStateChange]
169
- );
170
-
171
- useEffect(() => {
172
- if (
173
- reduceMotion !== "respect" ||
174
- typeof window.matchMedia !== "function"
175
- ) {
176
- return;
177
- }
178
-
179
- const mediaQuery = window.matchMedia(prefersReducedMotionQuery);
180
- setPrefersReducedMotion(mediaQuery.matches);
181
-
182
- const handleChange = (event: MediaQueryListEvent) => {
183
- setPrefersReducedMotion(event.matches);
184
- };
185
-
186
- mediaQuery.addEventListener("change", handleChange);
187
-
188
- return () => {
189
- mediaQuery.removeEventListener("change", handleChange);
190
- };
191
- }, [reduceMotion]);
192
-
193
- const shouldReduceMotion =
194
- immediate ||
195
- reduceMotion === "always" ||
196
- (reduceMotion === "respect" && prefersReducedMotion);
197
-
198
- const enterDuration = resolveTimingValue(duration, "enter", 200);
199
- const exitDuration = resolveTimingValue(duration, "exit", 200);
200
- const enterDelay = resolveTimingValue(delay, "enter", 0);
201
- const exitDelay = resolveTimingValue(delay, "exit", 0);
202
-
203
- const enterEasing = resolveTimingValue(
204
- easing,
205
- "enter",
206
- "cubic-bezier(0.4, 0, 0.2, 1)"
207
- );
208
- const exitEasing = resolveTimingValue(
209
- easing,
210
- "exit",
211
- "cubic-bezier(0.4, 0, 0.2, 1)"
212
- );
213
-
214
- useEffect(() => {
215
- runIdRef.current += 1;
216
- const runId = runIdRef.current;
217
- const isFirstRun = isInitialRender.current;
218
- isInitialRender.current = false;
219
-
220
- clearScheduled();
221
-
222
- if (mounted) {
223
- setDirection("enter");
224
- setIsRendered(true);
225
-
226
- if (isFirstRun && !appear) {
227
- setTransitionState("entered");
228
- return;
229
- }
230
-
231
- onEnterStart?.();
232
-
233
- if (shouldReduceMotion) {
234
- setTransitionState("entered");
235
- onEnterEnd?.();
236
- return;
237
- }
238
-
239
- setTransitionState("entering");
240
-
241
- rafRef.current = window.requestAnimationFrame(() => {
242
- // Second rAF ensures the browser has painted the enterFrom
243
- // styles before we move to entered, so the CSS transition fires.
244
- rafRef.current = window.requestAnimationFrame(() => {
245
- if (runIdRef.current !== runId) {
246
- return;
247
- }
248
-
249
- setTransitionState("entered");
250
-
251
- const waitTime = enterDuration + enterDelay;
252
-
253
- if (waitTime <= 0) {
254
- onEnterEnd?.();
255
- return;
256
- }
257
-
258
- timeoutRef.current = window.setTimeout(() => {
259
- if (runIdRef.current !== runId) {
260
- return;
261
- }
262
-
263
- onEnterEnd?.();
264
- }, waitTime);
265
- });
266
- });
267
-
268
- return;
269
- }
270
-
271
- if (isFirstRun) {
272
- setTransitionState("exited");
273
- setIsRendered(keepMounted);
274
- return;
275
- }
276
-
277
- setDirection("exit");
278
-
279
- if (!isRendered && !keepMounted) {
280
- return;
281
- }
282
-
283
- onExitStart?.();
284
-
285
- if (shouldReduceMotion) {
286
- setTransitionState("exited");
287
- onExitEnd?.();
288
-
289
- if (!keepMounted) {
290
- setIsRendered(false);
291
- }
292
-
293
- return;
294
- }
295
-
296
- setTransitionState("exiting");
297
-
298
- rafRef.current = window.requestAnimationFrame(() => {
299
- if (runIdRef.current !== runId) {
300
- return;
301
- }
302
-
303
- setTransitionState("exited");
304
-
305
- const waitTime = exitDuration + exitDelay;
306
-
307
- if (waitTime <= 0) {
308
- onExitEnd?.();
309
-
310
- if (!keepMounted) {
311
- setIsRendered(false);
312
- }
313
-
314
- return;
315
- }
316
-
317
- timeoutRef.current = window.setTimeout(() => {
318
- if (runIdRef.current !== runId) {
319
- return;
320
- }
321
-
322
- onExitEnd?.();
323
-
324
- if (!keepMounted) {
325
- setIsRendered(false);
326
- }
327
- }, waitTime);
328
- });
329
- }, [
330
- appear,
331
- clearScheduled,
332
- enterDelay,
333
- enterDuration,
334
- exitDelay,
335
- exitDuration,
336
- isRendered,
337
- keepMounted,
338
- mounted,
339
- onEnterEnd,
340
- onEnterStart,
341
- onExitEnd,
342
- onExitStart,
343
- setTransitionState,
344
- shouldReduceMotion
345
- ]);
346
-
347
- useEffect(() => {
348
- return () => {
349
- runIdRef.current += 1;
350
- clearScheduled();
351
- };
352
- }, [clearScheduled]);
353
-
354
- const transitionDefinition = useMemo(
355
- () => resolveTransitionDefinition(transition),
356
- [transition]
357
- );
358
-
359
- const resolvedProperties = useMemo(() => {
360
- if (properties === "auto") {
361
- return collectTransitionProperties(transitionDefinition);
362
- }
363
-
364
- return properties;
365
- }, [properties, transitionDefinition]);
366
-
367
- const currentStyle =
368
- state === "entering"
369
- ? transitionDefinition.enterFrom
370
- : state === "entered"
371
- ? transitionDefinition.enterTo
372
- : state === "exiting"
373
- ? transitionDefinition.exitFrom
374
- : transitionDefinition.exitTo;
375
-
376
- const activeDuration =
377
- direction === "enter" ? enterDuration : exitDuration;
378
- const activeDelay = direction === "enter" ? enterDelay : exitDelay;
379
- const activeEasing = direction === "enter" ? enterEasing : exitEasing;
380
-
381
- const effectiveDuration = shouldReduceMotion ? 0 : activeDuration;
382
- const effectiveDelay = shouldReduceMotion ? 0 : activeDelay;
383
-
384
- const transitionCSS = resolvedProperties.length
385
- ? resolvedProperties
386
- .map(
387
- (property) =>
388
- `${property} ${effectiveDuration}ms ${activeEasing} ${effectiveDelay}ms`
389
- )
390
- .join(", ")
391
- : "none";
392
-
393
- const mergedStyle: CSSProperties = {
394
- ...style,
395
- ...currentStyle,
396
- transition: transitionCSS,
397
- ...(useGPU && resolvedProperties.length > 0
398
- ? { willChange: resolvedProperties.join(", ") }
399
- : {})
400
- };
401
-
402
- const content =
403
- typeof children === "function" ? children(state) : children;
404
-
405
- if (!isRendered) {
406
- return null;
407
- }
408
-
409
- const mergedRef = (node: HTMLDivElement | null) => {
410
- if (!ref) {
411
- return;
412
- }
413
-
414
- if (typeof ref === "function") {
415
- ref(node);
416
- return;
417
- }
418
-
419
- (ref as { current: HTMLDivElement | null }).current = node;
420
- };
421
-
422
- return (
423
- <Component
424
- id={_id}
425
- ref={mergedRef}
426
- className={className}
427
- style={mergedStyle}
428
- data-transition-state={state}
429
- data-transition-direction={direction}
430
- {...props}
431
- >
432
- {content}
433
- </Component>
434
- );
435
- }
436
- );
437
-
438
- Transition.displayName = "@refraktor/core/Transition";
439
- Transition.configure = createComponentConfig<TransitionProps>();
440
-
441
- export default Transition;
@@ -1,97 +0,0 @@
1
- import { ComponentPropsWithoutRef, CSSProperties, ReactNode } from "react";
2
- import { createComponentConfig, PolymorphicFactoryPayload } from "../../utils";
3
-
4
- export type TransitionState = "entering" | "entered" | "exiting" | "exited";
5
- export type TransitionDirection = "enter" | "exit";
6
-
7
- export type TransitionPreset =
8
- | "fade"
9
- | "scale"
10
- | "slide-up"
11
- | "slide-down"
12
- | "slide-left"
13
- | "slide-right"
14
- | "zoom"
15
- | "collapse"
16
- | "blur"
17
- | "rotate";
18
-
19
- export type TransitionDefinition = {
20
- enterFrom?: CSSProperties;
21
- enterTo?: CSSProperties;
22
- exitFrom?: CSSProperties;
23
- exitTo?: CSSProperties;
24
- properties?: string[];
25
- };
26
-
27
- export type TransitionTimingValue<T> =
28
- | T
29
- | Partial<Record<TransitionDirection, T>>;
30
-
31
- export type TransitionMotionPreference = "respect" | "always" | "never";
32
-
33
- export interface TransitionProps
34
- extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
35
- /** Controls whether the component is mounted */
36
- mounted: boolean;
37
-
38
- /** Child element or render function */
39
- children: ReactNode | ((state: TransitionState) => ReactNode);
40
-
41
- /** Preset name or custom transition definition @default `fade` */
42
- transition?: TransitionPreset | TransitionDefinition;
43
-
44
- /** Enter/exit duration in milliseconds @default `200` */
45
- duration?: TransitionTimingValue<number>;
46
-
47
- /** Enter/exit delay in milliseconds @default `0` */
48
- delay?: TransitionTimingValue<number>;
49
-
50
- /** Enter/exit easing function @default `cubic-bezier(0.4, 0, 0.2, 1)` */
51
- easing?: TransitionTimingValue<string>;
52
-
53
- /** Transitioned CSS properties (`auto` uses transition definition metadata) @default `auto` */
54
- properties?: "auto" | string[];
55
-
56
- /** Keep element mounted after exit @default `false` */
57
- keepMounted?: boolean;
58
-
59
- /** Animate on initial mount @default `true` */
60
- appear?: boolean;
61
-
62
- /** Skip animations and jump to end states @default `false` */
63
- immediate?: boolean;
64
-
65
- /** Motion preference behavior @default `respect` */
66
- reduceMotion?: TransitionMotionPreference;
67
-
68
- /** Callback when entering starts */
69
- onEnterStart?: () => void;
70
-
71
- /** Callback when entering completes */
72
- onEnterEnd?: () => void;
73
-
74
- /** Callback when exiting starts */
75
- onExitStart?: () => void;
76
-
77
- /** Callback when exiting completes */
78
- onExitEnd?: () => void;
79
-
80
- /** Callback when transition state changes */
81
- onStateChange?: (state: TransitionState) => void;
82
-
83
- /** Used for editing root class name */
84
- className?: string;
85
-
86
- /** Whether to use GPU acceleration for the transition @default `true` */
87
- useGPU?: boolean;
88
- }
89
-
90
- export interface TransitionFactoryPayload extends PolymorphicFactoryPayload {
91
- props: TransitionProps;
92
- defaultRef: HTMLDivElement;
93
- defaultComponent: "div";
94
- compound: {
95
- configure: ReturnType<typeof createComponentConfig<TransitionProps>>;
96
- };
97
- }
@@ -1,140 +0,0 @@
1
- import { CSSProperties } from "react";
2
- import {
3
- TransitionDefinition,
4
- TransitionPreset
5
- } from "./transition.types";
6
-
7
- const NON_ANIMATABLE_PROPERTIES = new Set([
8
- "display",
9
- "position",
10
- "overflow",
11
- "overflow-x",
12
- "overflow-y",
13
- "pointer-events",
14
- "z-index"
15
- ]);
16
-
17
- const toKebabCase = (value: string): string =>
18
- value.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
19
-
20
- const collectProperties = (...styles: Array<CSSProperties | undefined>) => {
21
- const unique = new Set<string>();
22
-
23
- styles.forEach((style) => {
24
- if (!style) {
25
- return;
26
- }
27
-
28
- Object.keys(style).forEach((key) => {
29
- const property = toKebabCase(key);
30
-
31
- if (!NON_ANIMATABLE_PROPERTIES.has(property)) {
32
- unique.add(property);
33
- }
34
- });
35
- });
36
-
37
- return [...unique];
38
- };
39
-
40
- export type DefineTransitionInput = {
41
- enterFrom?: CSSProperties;
42
- enterTo?: CSSProperties;
43
- exitFrom?: CSSProperties;
44
- exitTo?: CSSProperties;
45
- properties?: "auto" | string[];
46
- };
47
-
48
- export function defineTransition({
49
- enterFrom = {},
50
- enterTo = {},
51
- exitFrom,
52
- exitTo,
53
- properties = "auto"
54
- }: DefineTransitionInput): TransitionDefinition {
55
- const resolvedExitFrom = exitFrom ?? enterTo;
56
- const resolvedExitTo = exitTo ?? enterFrom;
57
-
58
- return {
59
- enterFrom,
60
- enterTo,
61
- exitFrom: resolvedExitFrom,
62
- exitTo: resolvedExitTo,
63
- properties:
64
- properties === "auto"
65
- ? collectProperties(
66
- enterFrom,
67
- enterTo,
68
- resolvedExitFrom,
69
- resolvedExitTo
70
- )
71
- : properties
72
- };
73
- }
74
-
75
- const transitions: Record<TransitionPreset, TransitionDefinition> = {
76
- fade: defineTransition({
77
- enterFrom: { opacity: 0 },
78
- enterTo: { opacity: 1 },
79
- properties: ["opacity"]
80
- }),
81
- scale: defineTransition({
82
- enterFrom: { opacity: 0, transform: "scale(0.95)" },
83
- enterTo: { opacity: 1, transform: "scale(1)" },
84
- properties: ["opacity", "transform"]
85
- }),
86
- "slide-up": defineTransition({
87
- enterFrom: { opacity: 0, transform: "translateY(10px)" },
88
- enterTo: { opacity: 1, transform: "translateY(0)" },
89
- properties: ["opacity", "transform"]
90
- }),
91
- "slide-down": defineTransition({
92
- enterFrom: { opacity: 0, transform: "translateY(-10px)" },
93
- enterTo: { opacity: 1, transform: "translateY(0)" },
94
- properties: ["opacity", "transform"]
95
- }),
96
- "slide-left": defineTransition({
97
- enterFrom: { opacity: 0, transform: "translateX(10px)" },
98
- enterTo: { opacity: 1, transform: "translateX(0)" },
99
- properties: ["opacity", "transform"]
100
- }),
101
- "slide-right": defineTransition({
102
- enterFrom: { opacity: 0, transform: "translateX(-10px)" },
103
- enterTo: { opacity: 1, transform: "translateX(0)" },
104
- properties: ["opacity", "transform"]
105
- }),
106
- zoom: defineTransition({
107
- enterFrom: { opacity: 0, transform: "scale(0.8)" },
108
- enterTo: { opacity: 1, transform: "scale(1)" },
109
- properties: ["opacity", "transform"]
110
- }),
111
- collapse: defineTransition({
112
- enterFrom: {
113
- opacity: 0,
114
- transform: "scaleY(0)",
115
- transformOrigin: "top",
116
- maxHeight: "0px",
117
- overflow: "hidden"
118
- },
119
- enterTo: {
120
- opacity: 1,
121
- transform: "scaleY(1)",
122
- transformOrigin: "top",
123
- maxHeight: "1000px",
124
- overflow: "hidden"
125
- },
126
- properties: ["opacity", "transform", "max-height"]
127
- }),
128
- blur: defineTransition({
129
- enterFrom: { opacity: 0, filter: "blur(8px)" },
130
- enterTo: { opacity: 1, filter: "blur(0px)" },
131
- properties: ["opacity", "filter"]
132
- }),
133
- rotate: defineTransition({
134
- enterFrom: { opacity: 0, transform: "rotate(-10deg) scale(0.95)" },
135
- enterTo: { opacity: 1, transform: "rotate(0deg) scale(1)" },
136
- properties: ["opacity", "transform"]
137
- })
138
- };
139
-
140
- export default transitions;
@@ -1,25 +0,0 @@
1
- import { IconProps } from "./types";
2
-
3
- const CheckIcon = ({ size = 20, className, ...props }: IconProps) => {
4
- return (
5
- <svg
6
- viewBox="0 0 24 24"
7
- fill="none"
8
- width={size}
9
- height={size}
10
- className={className}
11
- xmlns="http://www.w3.org/2000/svg"
12
- {...props}
13
- >
14
- <path
15
- d="M5 12.5L9.5 17L19 7.5"
16
- stroke="currentColor"
17
- strokeWidth="2.5"
18
- strokeLinecap="round"
19
- strokeLinejoin="round"
20
- />
21
- </svg>
22
- );
23
- };
24
-
25
- export default CheckIcon;