@refraktor/core 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/build/components/button/button.styles.js +5 -5
  3. package/build/components/chip/chip-group/chip-group.d.ts +4 -0
  4. package/build/components/chip/chip-group/chip-group.d.ts.map +1 -0
  5. package/build/components/chip/chip-group/chip-group.js +43 -0
  6. package/build/components/chip/chip-group/index.d.ts +2 -0
  7. package/build/components/chip/chip-group/index.d.ts.map +1 -0
  8. package/build/components/chip/chip-group/index.js +1 -0
  9. package/build/components/chip/chip.context.d.ts +15 -0
  10. package/build/components/chip/chip.context.d.ts.map +1 -0
  11. package/build/components/chip/chip.context.js +2 -0
  12. package/build/components/chip/chip.d.ts +4 -0
  13. package/build/components/chip/chip.d.ts.map +1 -0
  14. package/build/components/chip/chip.js +85 -0
  15. package/build/components/chip/chip.styles.d.ts +5 -0
  16. package/build/components/chip/chip.styles.d.ts.map +1 -0
  17. package/build/components/chip/chip.styles.js +19 -0
  18. package/build/components/chip/chip.test.d.ts +2 -0
  19. package/build/components/chip/chip.test.d.ts.map +1 -0
  20. package/build/components/chip/chip.test.js +107 -0
  21. package/build/components/chip/chip.types.d.ts +95 -0
  22. package/build/components/chip/chip.types.d.ts.map +1 -0
  23. package/build/components/chip/chip.types.js +1 -0
  24. package/build/components/chip/index.d.ts +4 -0
  25. package/build/components/chip/index.d.ts.map +1 -0
  26. package/build/components/chip/index.js +2 -0
  27. package/build/components/combobox/combobox-dropdown/combobox-dropdown.d.ts +4 -0
  28. package/build/components/combobox/combobox-dropdown/combobox-dropdown.d.ts.map +1 -0
  29. package/build/components/combobox/combobox-dropdown/combobox-dropdown.js +21 -0
  30. package/build/components/combobox/combobox-dropdown/index.d.ts +2 -0
  31. package/build/components/combobox/combobox-dropdown/index.d.ts.map +1 -0
  32. package/build/components/combobox/combobox-dropdown/index.js +1 -0
  33. package/build/components/combobox/combobox-group/combobox-group.d.ts +4 -0
  34. package/build/components/combobox/combobox-group/combobox-group.d.ts.map +1 -0
  35. package/build/components/combobox/combobox-group/combobox-group.js +15 -0
  36. package/build/components/combobox/combobox-group/index.d.ts +2 -0
  37. package/build/components/combobox/combobox-group/index.d.ts.map +1 -0
  38. package/build/components/combobox/combobox-group/index.js +1 -0
  39. package/build/components/combobox/combobox-input/combobox-input.d.ts +4 -0
  40. package/build/components/combobox/combobox-input/combobox-input.d.ts.map +1 -0
  41. package/build/components/combobox/combobox-input/combobox-input.js +101 -0
  42. package/build/components/combobox/combobox-input/index.d.ts +2 -0
  43. package/build/components/combobox/combobox-input/index.d.ts.map +1 -0
  44. package/build/components/combobox/combobox-input/index.js +1 -0
  45. package/build/components/combobox/combobox-option/combobox-option.d.ts +4 -0
  46. package/build/components/combobox/combobox-option/combobox-option.d.ts.map +1 -0
  47. package/build/components/combobox/combobox-option/combobox-option.js +86 -0
  48. package/build/components/combobox/combobox-option/index.d.ts +2 -0
  49. package/build/components/combobox/combobox-option/index.d.ts.map +1 -0
  50. package/build/components/combobox/combobox-option/index.js +1 -0
  51. package/build/components/combobox/combobox-root/combobox-root.d.ts +4 -0
  52. package/build/components/combobox/combobox-root/combobox-root.d.ts.map +1 -0
  53. package/build/components/combobox/combobox-root/combobox-root.js +282 -0
  54. package/build/components/combobox/combobox-root/index.d.ts +2 -0
  55. package/build/components/combobox/combobox-root/index.d.ts.map +1 -0
  56. package/build/components/combobox/combobox-root/index.js +1 -0
  57. package/build/components/combobox/combobox.context.d.ts +73 -0
  58. package/build/components/combobox/combobox.context.d.ts.map +1 -0
  59. package/build/components/combobox/combobox.context.js +50 -0
  60. package/build/components/combobox/combobox.d.ts +4 -0
  61. package/build/components/combobox/combobox.d.ts.map +1 -0
  62. package/build/components/combobox/combobox.js +31 -0
  63. package/build/components/combobox/combobox.test.d.ts +2 -0
  64. package/build/components/combobox/combobox.test.d.ts.map +1 -0
  65. package/build/components/combobox/combobox.test.js +104 -0
  66. package/build/components/combobox/combobox.types.d.ts +205 -0
  67. package/build/components/combobox/combobox.types.d.ts.map +1 -0
  68. package/build/components/combobox/combobox.types.js +1 -0
  69. package/build/components/combobox/index.d.ts +8 -0
  70. package/build/components/combobox/index.d.ts.map +1 -0
  71. package/build/components/combobox/index.js +6 -0
  72. package/build/components/combobox/use-combobox.d.ts +32 -0
  73. package/build/components/combobox/use-combobox.d.ts.map +1 -0
  74. package/build/components/combobox/use-combobox.js +80 -0
  75. package/build/components/drawer/drawer-body/drawer-body.d.ts +4 -0
  76. package/build/components/drawer/drawer-body/drawer-body.d.ts.map +1 -0
  77. package/build/components/drawer/drawer-body/drawer-body.js +11 -0
  78. package/build/components/drawer/drawer-body/index.d.ts +2 -0
  79. package/build/components/drawer/drawer-body/index.d.ts.map +1 -0
  80. package/build/components/drawer/drawer-body/index.js +1 -0
  81. package/build/components/drawer/drawer-content/drawer-content.d.ts.map +1 -1
  82. package/build/components/drawer/drawer-content/drawer-content.js +9 -6
  83. package/build/components/drawer/drawer-overlay/drawer-overlay.d.ts.map +1 -1
  84. package/build/components/drawer/drawer-overlay/drawer-overlay.js +4 -4
  85. package/build/components/drawer/drawer-root/drawer-root.d.ts.map +1 -1
  86. package/build/components/drawer/drawer-root/drawer-root.js +8 -9
  87. package/build/components/drawer/drawer.context.d.ts +2 -1
  88. package/build/components/drawer/drawer.context.d.ts.map +1 -1
  89. package/build/components/drawer/drawer.d.ts.map +1 -1
  90. package/build/components/drawer/drawer.js +5 -3
  91. package/build/components/drawer/drawer.test.js +55 -16
  92. package/build/components/drawer/drawer.types.d.ts +29 -3
  93. package/build/components/drawer/drawer.types.d.ts.map +1 -1
  94. package/build/components/drawer/index.d.ts +2 -1
  95. package/build/components/drawer/index.d.ts.map +1 -1
  96. package/build/components/drawer/index.js +1 -0
  97. package/build/components/drawer/use-drawer.d.ts +8 -1
  98. package/build/components/drawer/use-drawer.d.ts.map +1 -1
  99. package/build/components/drawer/use-drawer.js +25 -38
  100. package/build/components/file-input/file-input.d.ts +4 -0
  101. package/build/components/file-input/file-input.d.ts.map +1 -0
  102. package/build/components/file-input/file-input.js +88 -0
  103. package/build/components/file-input/file-input.test.d.ts +2 -0
  104. package/build/components/file-input/file-input.test.d.ts.map +1 -0
  105. package/build/components/file-input/file-input.test.js +74 -0
  106. package/build/components/file-input/file-input.types.d.ts +46 -0
  107. package/build/components/file-input/file-input.types.d.ts.map +1 -0
  108. package/build/components/file-input/file-input.types.js +1 -0
  109. package/build/components/file-input/file-input.utils.d.ts +11 -0
  110. package/build/components/file-input/file-input.utils.d.ts.map +1 -0
  111. package/build/components/file-input/file-input.utils.js +67 -0
  112. package/build/components/file-input/file-input.utils.test.d.ts +2 -0
  113. package/build/components/file-input/file-input.utils.test.d.ts.map +1 -0
  114. package/build/components/file-input/file-input.utils.test.js +27 -0
  115. package/build/components/file-input/index.d.ts +3 -0
  116. package/build/components/file-input/index.d.ts.map +1 -0
  117. package/build/components/file-input/index.js +2 -0
  118. package/build/components/for/for.d.ts +8 -0
  119. package/build/components/for/for.d.ts.map +1 -0
  120. package/build/components/for/for.js +32 -0
  121. package/build/components/for/for.test.d.ts +2 -0
  122. package/build/components/for/for.test.d.ts.map +1 -0
  123. package/build/components/for/for.test.js +31 -0
  124. package/build/components/for/for.types.d.ts +33 -0
  125. package/build/components/for/for.types.d.ts.map +1 -0
  126. package/build/components/for/for.types.js +1 -0
  127. package/build/components/for/index.d.ts +3 -0
  128. package/build/components/for/index.d.ts.map +1 -0
  129. package/build/components/for/index.js +1 -0
  130. package/build/components/index.d.ts +6 -0
  131. package/build/components/index.d.ts.map +1 -1
  132. package/build/components/index.js +6 -0
  133. package/build/components/modal/index.d.ts +2 -1
  134. package/build/components/modal/index.d.ts.map +1 -1
  135. package/build/components/modal/index.js +1 -0
  136. package/build/components/modal/modal-body/index.d.ts +2 -0
  137. package/build/components/modal/modal-body/index.d.ts.map +1 -0
  138. package/build/components/modal/modal-body/index.js +1 -0
  139. package/build/components/modal/modal-body/modal-body.d.ts +4 -0
  140. package/build/components/modal/modal-body/modal-body.d.ts.map +1 -0
  141. package/build/components/modal/modal-body/modal-body.js +11 -0
  142. package/build/components/modal/modal-content/modal-content.d.ts.map +1 -1
  143. package/build/components/modal/modal-content/modal-content.js +13 -5
  144. package/build/components/modal/modal-header/modal-header.js +2 -2
  145. package/build/components/modal/modal-overlay/modal-overlay.d.ts.map +1 -1
  146. package/build/components/modal/modal-overlay/modal-overlay.js +4 -4
  147. package/build/components/modal/modal-root/modal-root.d.ts.map +1 -1
  148. package/build/components/modal/modal-root/modal-root.js +12 -9
  149. package/build/components/modal/modal.context.d.ts +5 -2
  150. package/build/components/modal/modal.context.d.ts.map +1 -1
  151. package/build/components/modal/modal.d.ts.map +1 -1
  152. package/build/components/modal/modal.js +5 -3
  153. package/build/components/modal/modal.test.js +78 -13
  154. package/build/components/modal/modal.types.d.ts +34 -5
  155. package/build/components/modal/modal.types.d.ts.map +1 -1
  156. package/build/components/modal/use-modal.d.ts +8 -1
  157. package/build/components/modal/use-modal.d.ts.map +1 -1
  158. package/build/components/modal/use-modal.js +25 -38
  159. package/build/components/password-input/index.d.ts +3 -0
  160. package/build/components/password-input/index.d.ts.map +1 -0
  161. package/build/components/password-input/index.js +2 -0
  162. package/build/components/password-input/password-input.d.ts +4 -0
  163. package/build/components/password-input/password-input.d.ts.map +1 -0
  164. package/build/components/password-input/password-input.js +32 -0
  165. package/build/components/password-input/password-input.test.d.ts +2 -0
  166. package/build/components/password-input/password-input.test.d.ts.map +1 -0
  167. package/build/components/password-input/password-input.test.js +47 -0
  168. package/build/components/password-input/password-input.types.d.ts +24 -0
  169. package/build/components/password-input/password-input.types.d.ts.map +1 -0
  170. package/build/components/password-input/password-input.types.js +1 -0
  171. package/build/components/pin-input/index.d.ts +3 -0
  172. package/build/components/pin-input/index.d.ts.map +1 -0
  173. package/build/components/pin-input/index.js +2 -0
  174. package/build/components/pin-input/pin-input.d.ts +4 -0
  175. package/build/components/pin-input/pin-input.d.ts.map +1 -0
  176. package/build/components/pin-input/pin-input.js +245 -0
  177. package/build/components/pin-input/pin-input.test.d.ts +2 -0
  178. package/build/components/pin-input/pin-input.test.d.ts.map +1 -0
  179. package/build/components/pin-input/pin-input.test.js +87 -0
  180. package/build/components/pin-input/pin-input.types.d.ts +44 -0
  181. package/build/components/pin-input/pin-input.types.d.ts.map +1 -0
  182. package/build/components/pin-input/pin-input.types.js +1 -0
  183. package/build/components/scroll-area/index.d.ts +3 -0
  184. package/build/components/scroll-area/index.d.ts.map +1 -0
  185. package/build/components/scroll-area/index.js +1 -0
  186. package/build/components/scroll-area/scroll-area.d.ts +4 -0
  187. package/build/components/scroll-area/scroll-area.d.ts.map +1 -0
  188. package/build/components/scroll-area/scroll-area.js +30 -0
  189. package/build/components/scroll-area/scroll-area.test.d.ts +2 -0
  190. package/build/components/scroll-area/scroll-area.test.d.ts.map +1 -0
  191. package/build/components/scroll-area/scroll-area.test.js +39 -0
  192. package/build/components/scroll-area/scroll-area.types.d.ts +25 -0
  193. package/build/components/scroll-area/scroll-area.types.d.ts.map +1 -0
  194. package/build/components/scroll-area/scroll-area.types.js +1 -0
  195. package/build/components/segmented-control/segmented-control.d.ts.map +1 -1
  196. package/build/components/segmented-control/segmented-control.js +3 -3
  197. package/build/components/segmented-control/segmented-control.styles.js +13 -13
  198. package/build/components/segmented-control/segmented-control.test.js +11 -0
  199. package/build/components/segmented-control/segmented-control.types.d.ts +2 -0
  200. package/build/components/segmented-control/segmented-control.types.d.ts.map +1 -1
  201. package/build/icons/eye-off.d.ts +4 -0
  202. package/build/icons/eye-off.d.ts.map +1 -0
  203. package/build/icons/eye-off.js +5 -0
  204. package/build/icons/eye.d.ts +4 -0
  205. package/build/icons/eye.d.ts.map +1 -0
  206. package/build/icons/eye.js +5 -0
  207. package/build/icons/index.d.ts +2 -0
  208. package/build/icons/index.d.ts.map +1 -1
  209. package/build/icons/index.js +2 -0
  210. package/build/style.css +1 -1
  211. package/package.json +2 -2
  212. package/src/components/button/button.styles.ts +5 -5
  213. package/src/components/chip/chip-group/chip-group.tsx +107 -0
  214. package/src/components/chip/chip-group/index.ts +1 -0
  215. package/src/components/chip/chip.context.ts +15 -0
  216. package/src/components/chip/chip.styles.ts +36 -0
  217. package/src/components/chip/chip.test.tsx +197 -0
  218. package/src/components/chip/chip.tsx +208 -0
  219. package/src/components/chip/chip.types.ts +134 -0
  220. package/src/components/chip/index.ts +10 -0
  221. package/src/components/drawer/drawer-body/drawer-body.tsx +29 -0
  222. package/src/components/drawer/drawer-body/index.ts +1 -0
  223. package/src/components/drawer/drawer-content/drawer-content.tsx +63 -26
  224. package/src/components/drawer/drawer-overlay/drawer-overlay.tsx +6 -5
  225. package/src/components/drawer/drawer-root/drawer-root.tsx +17 -18
  226. package/src/components/drawer/drawer.context.ts +2 -1
  227. package/src/components/drawer/drawer.test.tsx +144 -36
  228. package/src/components/drawer/drawer.tsx +31 -3
  229. package/src/components/drawer/drawer.types.ts +37 -3
  230. package/src/components/drawer/index.ts +2 -0
  231. package/src/components/drawer/use-drawer.ts +44 -51
  232. package/src/components/file-input/file-input.test.tsx +134 -0
  233. package/src/components/file-input/file-input.tsx +224 -0
  234. package/src/components/file-input/file-input.types.ts +78 -0
  235. package/src/components/file-input/file-input.utils.test.ts +36 -0
  236. package/src/components/file-input/file-input.utils.ts +130 -0
  237. package/src/components/file-input/index.ts +2 -0
  238. package/src/components/for/for.test.tsx +66 -0
  239. package/src/components/for/for.tsx +53 -0
  240. package/src/components/for/for.types.ts +40 -0
  241. package/src/components/for/index.ts +2 -0
  242. package/src/components/index.ts +6 -0
  243. package/src/components/menu/menu-dropdown/menu-dropdown.tsx +220 -220
  244. package/src/components/menu/menu-sub-dropdown/menu-sub-dropdown.tsx +221 -221
  245. package/src/components/modal/index.ts +4 -1
  246. package/src/components/modal/modal-body/index.ts +1 -0
  247. package/src/components/modal/modal-body/modal-body.tsx +29 -0
  248. package/src/components/modal/modal-content/modal-content.tsx +71 -24
  249. package/src/components/modal/modal-header/modal-header.tsx +2 -2
  250. package/src/components/modal/modal-overlay/modal-overlay.tsx +46 -45
  251. package/src/components/modal/modal-root/modal-root.tsx +22 -17
  252. package/src/components/modal/modal.context.ts +5 -2
  253. package/src/components/modal/modal.test.tsx +234 -64
  254. package/src/components/modal/modal.tsx +36 -4
  255. package/src/components/modal/modal.types.ts +49 -8
  256. package/src/components/modal/use-modal.ts +44 -51
  257. package/src/components/password-input/index.ts +2 -0
  258. package/src/components/password-input/password-input.test.tsx +72 -0
  259. package/src/components/password-input/password-input.tsx +85 -0
  260. package/src/components/password-input/password-input.types.ts +30 -0
  261. package/src/components/pin-input/index.ts +2 -0
  262. package/src/components/pin-input/pin-input.test.tsx +149 -0
  263. package/src/components/pin-input/pin-input.tsx +473 -0
  264. package/src/components/pin-input/pin-input.types.ts +78 -0
  265. package/src/components/scroll-area/index.ts +6 -0
  266. package/src/components/scroll-area/scroll-area.test.tsx +72 -0
  267. package/src/components/scroll-area/scroll-area.tsx +70 -0
  268. package/src/components/scroll-area/scroll-area.types.ts +37 -0
  269. package/src/components/segmented-control/segmented-control.styles.ts +13 -13
  270. package/src/components/segmented-control/segmented-control.test.tsx +18 -0
  271. package/src/components/segmented-control/segmented-control.tsx +11 -1
  272. package/src/components/segmented-control/segmented-control.types.ts +3 -0
  273. package/src/components/select/select-dropdown/select-dropdown.tsx +299 -299
  274. package/src/components/select/select-root/select-root.tsx +333 -333
  275. package/src/components/select/select-trigger/select-trigger.tsx +123 -123
  276. package/src/components/select/select.context.ts +140 -140
  277. package/src/components/select/select.test.tsx +190 -190
  278. package/src/components/select/select.types.ts +272 -272
  279. package/src/components/select/use-select.ts +170 -170
  280. package/src/icons/eye-off.tsx +30 -0
  281. package/src/icons/eye.tsx +24 -0
  282. package/src/icons/index.ts +2 -0
  283. package/src/style.css +14 -8
  284. package/tsconfig.tsbuildinfo +1 -1
@@ -1,272 +1,272 @@
1
- import type { ComponentPropsWithoutRef, ReactNode } from "react";
2
- import type {
3
- FlipOptions,
4
- InlineOptions,
5
- Placement,
6
- ShiftOptions
7
- } from "@floating-ui/react";
8
- import type { RefraktorRadius, RefraktorSize } from "../../theme";
9
- import {
10
- createClassNamesConfig,
11
- createComponentConfig,
12
- FactoryPayload
13
- } from "../../utils";
14
- import type { TransitionProps } from "../transition";
15
- import type { InputVariant } from "../input";
16
- import type { SelectRoot } from "./select-root";
17
- import type { SelectTrigger } from "./select-trigger";
18
- import type { SelectDropdown } from "./select-dropdown";
19
- import type { SelectGroup } from "./select-group";
20
- import type { SelectItem } from "./select-item";
21
-
22
- export type SelectClassNames = {
23
- root?: string;
24
- trigger?: string;
25
- triggerInput?: string;
26
- triggerIcon?: string;
27
- dropdown?: string;
28
- search?: string;
29
- searchInput?: string;
30
- options?: string;
31
- group?: string;
32
- groupLabel?: string;
33
- item?: string;
34
- itemLabel?: string;
35
- itemCheck?: string;
36
- empty?: string;
37
- };
38
-
39
- export type SelectPositioning = {
40
- /** The placement of the dropdown relative to the trigger @default `bottom-start` */
41
- placement?: Placement;
42
-
43
- /** Offset distance from the trigger in pixels @default `4` */
44
- offset?: number;
45
- };
46
-
47
- export type SelectMiddlewares = {
48
- shift?: boolean | ShiftOptions;
49
- flip?: boolean | FlipOptions;
50
- inline?: boolean | InlineOptions;
51
- };
52
-
53
- export interface SelectItemData {
54
- /** Option value */
55
- value: string;
56
-
57
- /** Option label */
58
- label: ReactNode;
59
-
60
- /** Optional searchable text for non-string labels */
61
- textValue?: string;
62
-
63
- /** Whether the option is disabled */
64
- disabled?: boolean;
65
- }
66
-
67
- export interface SelectGroupData {
68
- /** Group label */
69
- label?: ReactNode;
70
-
71
- /** Group items */
72
- items: SelectItemData[];
73
- }
74
-
75
- export type SelectData = SelectItemData | SelectGroupData;
76
-
77
- export interface SelectRootProps
78
- extends Omit<
79
- ComponentPropsWithoutRef<"div">,
80
- "value" | "defaultValue" | "onChange"
81
- > {
82
- /** Children containing select subcomponents */
83
- children: ReactNode;
84
-
85
- /** Label text */
86
- label?: ReactNode;
87
-
88
- /** Description text */
89
- description?: ReactNode;
90
-
91
- /** Error message */
92
- error?: ReactNode;
93
-
94
- /** Whether the field is required */
95
- required?: boolean;
96
-
97
- /** Display an asterisk next to the label */
98
- withAsterisk?: boolean;
99
-
100
- /** Selected value (controlled) */
101
- value?: string | null;
102
-
103
- /** Initial selected value (uncontrolled) */
104
- defaultValue?: string | null;
105
-
106
- /** Callback called when selected value changes */
107
- onChange?: (value: string | null) => void;
108
-
109
- /** Dropdown open state (controlled) */
110
- opened?: boolean;
111
-
112
- /** Initial dropdown open state (uncontrolled) */
113
- defaultOpened?: boolean;
114
-
115
- /** Callback called when dropdown open state changes */
116
- onOpenedChange?: (opened: boolean) => void;
117
-
118
- /** Positioning settings */
119
- positioning?: SelectPositioning;
120
-
121
- /** Floating middleware settings */
122
- middlewares?: SelectMiddlewares;
123
-
124
- /** Whether select is disabled @default `false` */
125
- disabled?: boolean;
126
-
127
- /** Whether to render searchable input inside dropdown @default `false` */
128
- searchable?: boolean;
129
-
130
- /** Search query (controlled) */
131
- searchValue?: string;
132
-
133
- /** Initial search query (uncontrolled) */
134
- defaultSearchValue?: string;
135
-
136
- /** Callback called when search query changes */
137
- onSearchChange?: (value: string) => void;
138
-
139
- /** Trigger placeholder text @default `Select option` */
140
- placeholder?: string;
141
-
142
- /** Search input placeholder @default `Search...` */
143
- searchPlaceholder?: string;
144
-
145
- /** Content rendered when no options match @default `No options` */
146
- nothingFound?: ReactNode;
147
-
148
- /** Trigger and search input size @default `md` */
149
- size?: RefraktorSize;
150
-
151
- /** Trigger and search input radius @default `default` */
152
- radius?: RefraktorRadius;
153
-
154
- /** Trigger and search input variant @default `default` */
155
- variant?: InputVariant;
156
-
157
- /** Whether to render dropdown in portal @default `true` */
158
- withinPortal?: boolean;
159
-
160
- /** Whether to close on click outside @default `true` */
161
- closeOnClickOutside?: boolean;
162
-
163
- /** Whether to close on Escape key @default `true` */
164
- closeOnEscape?: boolean;
165
-
166
- /** Transition props for dropdown, uses Transition internally */
167
- transitionProps?: Omit<TransitionProps, "children" | "mounted">;
168
-
169
- /** Used for editing root class name */
170
- className?: string;
171
-
172
- /** Used for styling different parts of the component */
173
- classNames?: SelectClassNames;
174
- }
175
-
176
- export interface SelectTriggerProps extends ComponentPropsWithoutRef<"div"> {
177
- /** Trigger placeholder override */
178
- placeholder?: string;
179
-
180
- /** Optional custom right section */
181
- rightSection?: ReactNode;
182
-
183
- /** Used for editing root class name */
184
- className?: string;
185
- }
186
-
187
- export interface SelectDropdownProps extends ComponentPropsWithoutRef<"div"> {
188
- /** Content displayed inside dropdown */
189
- children: ReactNode;
190
-
191
- /** Used for editing root class name */
192
- className?: string;
193
- }
194
-
195
- export interface SelectGroupProps extends ComponentPropsWithoutRef<"div"> {
196
- /** Group label */
197
- label?: ReactNode;
198
-
199
- /** Group content */
200
- children: ReactNode;
201
-
202
- /** Used for editing root class name */
203
- className?: string;
204
- }
205
-
206
- export interface SelectItemProps
207
- extends Omit<ComponentPropsWithoutRef<"button">, "value" | "onSelect"> {
208
- /** Option value */
209
- value: string;
210
-
211
- /** Option content */
212
- children: ReactNode;
213
-
214
- /** Callback called when option is selected */
215
- onSelect?: (value: string) => void;
216
-
217
- /** Optional searchable text for non-string children */
218
- textValue?: string;
219
-
220
- /** Whether option is disabled */
221
- disabled?: boolean;
222
-
223
- /** Used for editing root class name */
224
- className?: string;
225
- }
226
-
227
- export interface SelectProps extends Omit<SelectRootProps, "children"> {
228
- /** Compound children. If provided, data-based rendering is skipped */
229
- children?: ReactNode;
230
-
231
- /** Data used for built-in rendering mode */
232
- data?: SelectData[];
233
- }
234
-
235
- export interface SelectFactoryPayload extends FactoryPayload {
236
- props: SelectProps;
237
- ref: HTMLDivElement;
238
- compound: {
239
- configure: ReturnType<typeof createComponentConfig<SelectProps>>;
240
- classNames: ReturnType<typeof createClassNamesConfig<SelectClassNames>>;
241
- Root: typeof SelectRoot;
242
- Trigger: typeof SelectTrigger;
243
- Dropdown: typeof SelectDropdown;
244
- Group: typeof SelectGroup;
245
- Item: typeof SelectItem;
246
- };
247
- }
248
-
249
- export interface SelectRootFactoryPayload extends FactoryPayload {
250
- props: SelectRootProps;
251
- ref: HTMLDivElement;
252
- }
253
-
254
- export interface SelectTriggerFactoryPayload extends FactoryPayload {
255
- props: SelectTriggerProps;
256
- ref: HTMLDivElement;
257
- }
258
-
259
- export interface SelectDropdownFactoryPayload extends FactoryPayload {
260
- props: SelectDropdownProps;
261
- ref: HTMLDivElement;
262
- }
263
-
264
- export interface SelectGroupFactoryPayload extends FactoryPayload {
265
- props: SelectGroupProps;
266
- ref: HTMLDivElement;
267
- }
268
-
269
- export interface SelectItemFactoryPayload extends FactoryPayload {
270
- props: SelectItemProps;
271
- ref: HTMLButtonElement;
272
- }
1
+ import type { ComponentPropsWithoutRef, ReactNode } from "react";
2
+ import type {
3
+ FlipOptions,
4
+ InlineOptions,
5
+ Placement,
6
+ ShiftOptions
7
+ } from "@floating-ui/react";
8
+ import type { RefraktorRadius, RefraktorSize } from "../../theme";
9
+ import {
10
+ createClassNamesConfig,
11
+ createComponentConfig,
12
+ FactoryPayload
13
+ } from "../../utils";
14
+ import type { TransitionProps } from "../transition";
15
+ import type { InputVariant } from "../input";
16
+ import type { SelectRoot } from "./select-root";
17
+ import type { SelectTrigger } from "./select-trigger";
18
+ import type { SelectDropdown } from "./select-dropdown";
19
+ import type { SelectGroup } from "./select-group";
20
+ import type { SelectItem } from "./select-item";
21
+
22
+ export type SelectClassNames = {
23
+ root?: string;
24
+ trigger?: string;
25
+ triggerInput?: string;
26
+ triggerIcon?: string;
27
+ dropdown?: string;
28
+ search?: string;
29
+ searchInput?: string;
30
+ options?: string;
31
+ group?: string;
32
+ groupLabel?: string;
33
+ item?: string;
34
+ itemLabel?: string;
35
+ itemCheck?: string;
36
+ empty?: string;
37
+ };
38
+
39
+ export type SelectPositioning = {
40
+ /** The placement of the dropdown relative to the trigger @default `bottom-start` */
41
+ placement?: Placement;
42
+
43
+ /** Offset distance from the trigger in pixels @default `4` */
44
+ offset?: number;
45
+ };
46
+
47
+ export type SelectMiddlewares = {
48
+ shift?: boolean | ShiftOptions;
49
+ flip?: boolean | FlipOptions;
50
+ inline?: boolean | InlineOptions;
51
+ };
52
+
53
+ export interface SelectItemData {
54
+ /** Option value */
55
+ value: string;
56
+
57
+ /** Option label */
58
+ label: ReactNode;
59
+
60
+ /** Optional searchable text for non-string labels */
61
+ textValue?: string;
62
+
63
+ /** Whether the option is disabled */
64
+ disabled?: boolean;
65
+ }
66
+
67
+ export interface SelectGroupData {
68
+ /** Group label */
69
+ label?: ReactNode;
70
+
71
+ /** Group items */
72
+ items: SelectItemData[];
73
+ }
74
+
75
+ export type SelectData = SelectItemData | SelectGroupData;
76
+
77
+ export interface SelectRootProps
78
+ extends Omit<
79
+ ComponentPropsWithoutRef<"div">,
80
+ "value" | "defaultValue" | "onChange"
81
+ > {
82
+ /** Children containing select subcomponents */
83
+ children: ReactNode;
84
+
85
+ /** Label text */
86
+ label?: ReactNode;
87
+
88
+ /** Description text */
89
+ description?: ReactNode;
90
+
91
+ /** Error message */
92
+ error?: ReactNode;
93
+
94
+ /** Whether the field is required */
95
+ required?: boolean;
96
+
97
+ /** Display an asterisk next to the label */
98
+ withAsterisk?: boolean;
99
+
100
+ /** Selected value (controlled) */
101
+ value?: string | null;
102
+
103
+ /** Initial selected value (uncontrolled) */
104
+ defaultValue?: string | null;
105
+
106
+ /** Callback called when selected value changes */
107
+ onChange?: (value: string | null) => void;
108
+
109
+ /** Dropdown open state (controlled) */
110
+ opened?: boolean;
111
+
112
+ /** Initial dropdown open state (uncontrolled) */
113
+ defaultOpened?: boolean;
114
+
115
+ /** Callback called when dropdown open state changes */
116
+ onOpenedChange?: (opened: boolean) => void;
117
+
118
+ /** Positioning settings */
119
+ positioning?: SelectPositioning;
120
+
121
+ /** Floating middleware settings */
122
+ middlewares?: SelectMiddlewares;
123
+
124
+ /** Whether select is disabled @default `false` */
125
+ disabled?: boolean;
126
+
127
+ /** Whether to render searchable input inside dropdown @default `false` */
128
+ searchable?: boolean;
129
+
130
+ /** Search query (controlled) */
131
+ searchValue?: string;
132
+
133
+ /** Initial search query (uncontrolled) */
134
+ defaultSearchValue?: string;
135
+
136
+ /** Callback called when search query changes */
137
+ onSearchChange?: (value: string) => void;
138
+
139
+ /** Trigger placeholder text @default `Select option` */
140
+ placeholder?: string;
141
+
142
+ /** Search input placeholder @default `Search...` */
143
+ searchPlaceholder?: string;
144
+
145
+ /** Content rendered when no options match @default `No options` */
146
+ nothingFound?: ReactNode;
147
+
148
+ /** Trigger and search input size @default `md` */
149
+ size?: RefraktorSize;
150
+
151
+ /** Trigger and search input radius @default `default` */
152
+ radius?: RefraktorRadius;
153
+
154
+ /** Trigger and search input variant @default `default` */
155
+ variant?: InputVariant;
156
+
157
+ /** Whether to render dropdown in portal @default `true` */
158
+ withinPortal?: boolean;
159
+
160
+ /** Whether to close on click outside @default `true` */
161
+ closeOnClickOutside?: boolean;
162
+
163
+ /** Whether to close on Escape key @default `true` */
164
+ closeOnEscape?: boolean;
165
+
166
+ /** Transition props for dropdown, uses Transition internally */
167
+ transitionProps?: Omit<TransitionProps, "children" | "mounted">;
168
+
169
+ /** Used for editing root class name */
170
+ className?: string;
171
+
172
+ /** Used for styling different parts of the component */
173
+ classNames?: SelectClassNames;
174
+ }
175
+
176
+ export interface SelectTriggerProps extends ComponentPropsWithoutRef<"div"> {
177
+ /** Trigger placeholder override */
178
+ placeholder?: string;
179
+
180
+ /** Optional custom right section */
181
+ rightSection?: ReactNode;
182
+
183
+ /** Used for editing root class name */
184
+ className?: string;
185
+ }
186
+
187
+ export interface SelectDropdownProps extends ComponentPropsWithoutRef<"div"> {
188
+ /** Content displayed inside dropdown */
189
+ children: ReactNode;
190
+
191
+ /** Used for editing root class name */
192
+ className?: string;
193
+ }
194
+
195
+ export interface SelectGroupProps extends ComponentPropsWithoutRef<"div"> {
196
+ /** Group label */
197
+ label?: ReactNode;
198
+
199
+ /** Group content */
200
+ children: ReactNode;
201
+
202
+ /** Used for editing root class name */
203
+ className?: string;
204
+ }
205
+
206
+ export interface SelectItemProps
207
+ extends Omit<ComponentPropsWithoutRef<"button">, "value" | "onSelect"> {
208
+ /** Option value */
209
+ value: string;
210
+
211
+ /** Option content */
212
+ children: ReactNode;
213
+
214
+ /** Callback called when option is selected */
215
+ onSelect?: (value: string) => void;
216
+
217
+ /** Optional searchable text for non-string children */
218
+ textValue?: string;
219
+
220
+ /** Whether option is disabled */
221
+ disabled?: boolean;
222
+
223
+ /** Used for editing root class name */
224
+ className?: string;
225
+ }
226
+
227
+ export interface SelectProps extends Omit<SelectRootProps, "children"> {
228
+ /** Compound children. If provided, data-based rendering is skipped */
229
+ children?: ReactNode;
230
+
231
+ /** Data used for built-in rendering mode */
232
+ data?: SelectData[];
233
+ }
234
+
235
+ export interface SelectFactoryPayload extends FactoryPayload {
236
+ props: SelectProps;
237
+ ref: HTMLDivElement;
238
+ compound: {
239
+ configure: ReturnType<typeof createComponentConfig<SelectProps>>;
240
+ classNames: ReturnType<typeof createClassNamesConfig<SelectClassNames>>;
241
+ Root: typeof SelectRoot;
242
+ Trigger: typeof SelectTrigger;
243
+ Dropdown: typeof SelectDropdown;
244
+ Group: typeof SelectGroup;
245
+ Item: typeof SelectItem;
246
+ };
247
+ }
248
+
249
+ export interface SelectRootFactoryPayload extends FactoryPayload {
250
+ props: SelectRootProps;
251
+ ref: HTMLDivElement;
252
+ }
253
+
254
+ export interface SelectTriggerFactoryPayload extends FactoryPayload {
255
+ props: SelectTriggerProps;
256
+ ref: HTMLDivElement;
257
+ }
258
+
259
+ export interface SelectDropdownFactoryPayload extends FactoryPayload {
260
+ props: SelectDropdownProps;
261
+ ref: HTMLDivElement;
262
+ }
263
+
264
+ export interface SelectGroupFactoryPayload extends FactoryPayload {
265
+ props: SelectGroupProps;
266
+ ref: HTMLDivElement;
267
+ }
268
+
269
+ export interface SelectItemFactoryPayload extends FactoryPayload {
270
+ props: SelectItemProps;
271
+ ref: HTMLButtonElement;
272
+ }