@limonify/zest-ui 0.3.2 → 0.4.0

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 (381) hide show
  1. package/README.md +3 -0
  2. package/lib/alert-dialog/index.parts.d.ts +1 -1
  3. package/lib/alert-dialog/index.parts.d.ts.map +1 -1
  4. package/lib/alert-dialog/index.parts.js.map +1 -1
  5. package/lib/autocomplete/handle.d.ts +15 -0
  6. package/lib/autocomplete/handle.d.ts.map +1 -0
  7. package/lib/autocomplete/handle.js +12 -0
  8. package/lib/autocomplete/handle.js.map +1 -0
  9. package/lib/autocomplete/index.d.ts +1 -0
  10. package/lib/autocomplete/index.d.ts.map +1 -1
  11. package/lib/autocomplete/index.parts.d.ts +1 -0
  12. package/lib/autocomplete/index.parts.d.ts.map +1 -1
  13. package/lib/autocomplete/index.parts.js +3 -1
  14. package/lib/autocomplete/index.parts.js.map +1 -1
  15. package/lib/autocomplete/root/AutocompleteRoot.d.ts +55 -16
  16. package/lib/autocomplete/root/AutocompleteRoot.d.ts.map +1 -1
  17. package/lib/autocomplete/root/AutocompleteRoot.js +2 -18
  18. package/lib/autocomplete/root/AutocompleteRoot.js.map +1 -1
  19. package/lib/avatar/fallback/AvatarFallback.d.ts.map +1 -1
  20. package/lib/avatar/fallback/AvatarFallback.js +3 -1
  21. package/lib/avatar/fallback/AvatarFallback.js.map +1 -1
  22. package/lib/avatar/image/AvatarImage.d.ts.map +1 -1
  23. package/lib/avatar/image/AvatarImage.js +5 -0
  24. package/lib/avatar/image/AvatarImage.js.map +1 -1
  25. package/lib/checkbox/root/CheckboxRoot.d.ts.map +1 -1
  26. package/lib/checkbox/root/CheckboxRoot.js +9 -4
  27. package/lib/checkbox/root/CheckboxRoot.js.map +1 -1
  28. package/lib/combobox/backdrop/ComboboxBackdrop.d.ts.map +1 -1
  29. package/lib/combobox/backdrop/ComboboxBackdrop.js +10 -4
  30. package/lib/combobox/backdrop/ComboboxBackdrop.js.map +1 -1
  31. package/lib/combobox/empty/ComboboxEmpty.d.ts.map +1 -1
  32. package/lib/combobox/empty/ComboboxEmpty.js +4 -1
  33. package/lib/combobox/empty/ComboboxEmpty.js.map +1 -1
  34. package/lib/combobox/index.d.ts +2 -0
  35. package/lib/combobox/index.d.ts.map +1 -1
  36. package/lib/combobox/index.js +3 -1
  37. package/lib/combobox/index.js.map +1 -1
  38. package/lib/combobox/index.parts.d.ts +1 -0
  39. package/lib/combobox/index.parts.d.ts.map +1 -1
  40. package/lib/combobox/index.parts.js +4 -1
  41. package/lib/combobox/index.parts.js.map +1 -1
  42. package/lib/combobox/input/ComboboxInput.d.ts +24 -3
  43. package/lib/combobox/input/ComboboxInput.d.ts.map +1 -1
  44. package/lib/combobox/input/ComboboxInput.js +65 -11
  45. package/lib/combobox/input/ComboboxInput.js.map +1 -1
  46. package/lib/combobox/item/ComboboxItem.d.ts +11 -1
  47. package/lib/combobox/item/ComboboxItem.d.ts.map +1 -1
  48. package/lib/combobox/item/ComboboxItem.js +9 -6
  49. package/lib/combobox/item/ComboboxItem.js.map +1 -1
  50. package/lib/combobox/list/ComboboxList.d.ts +1 -1
  51. package/lib/combobox/list/ComboboxList.d.ts.map +1 -1
  52. package/lib/combobox/list/ComboboxList.js +4 -1
  53. package/lib/combobox/list/ComboboxList.js.map +1 -1
  54. package/lib/combobox/popup/ComboboxPopup.d.ts +26 -0
  55. package/lib/combobox/popup/ComboboxPopup.d.ts.map +1 -1
  56. package/lib/combobox/popup/ComboboxPopup.js +18 -2
  57. package/lib/combobox/popup/ComboboxPopup.js.map +1 -1
  58. package/lib/combobox/portal/ComboboxPortal.d.ts.map +1 -1
  59. package/lib/combobox/portal/ComboboxPortal.js +8 -4
  60. package/lib/combobox/portal/ComboboxPortal.js.map +1 -1
  61. package/lib/combobox/portal/ComboboxPortalContext.d.ts +4 -0
  62. package/lib/combobox/portal/ComboboxPortalContext.d.ts.map +1 -0
  63. package/lib/combobox/portal/ComboboxPortalContext.js +48 -0
  64. package/lib/combobox/portal/ComboboxPortalContext.js.map +1 -0
  65. package/lib/combobox/positioner/ComboboxPositioner.d.ts +7 -2
  66. package/lib/combobox/positioner/ComboboxPositioner.d.ts.map +1 -1
  67. package/lib/combobox/positioner/ComboboxPositioner.js +61 -6
  68. package/lib/combobox/positioner/ComboboxPositioner.js.map +1 -1
  69. package/lib/combobox/positioner/ComboboxPositionerContext.d.ts +9 -0
  70. package/lib/combobox/positioner/ComboboxPositionerContext.d.ts.map +1 -0
  71. package/lib/combobox/positioner/ComboboxPositionerContext.js +48 -0
  72. package/lib/combobox/positioner/ComboboxPositionerContext.js.map +1 -0
  73. package/lib/combobox/root/ComboboxItemsContext.d.ts +18 -0
  74. package/lib/combobox/root/ComboboxItemsContext.d.ts.map +1 -0
  75. package/lib/combobox/root/ComboboxItemsContext.js +55 -0
  76. package/lib/combobox/root/ComboboxItemsContext.js.map +1 -0
  77. package/lib/combobox/root/ComboboxRoot.d.ts +77 -21
  78. package/lib/combobox/root/ComboboxRoot.d.ts.map +1 -1
  79. package/lib/combobox/root/ComboboxRoot.js +4 -23
  80. package/lib/combobox/root/ComboboxRoot.js.map +1 -1
  81. package/lib/combobox/root/ComboboxRootContext.d.ts +4 -54
  82. package/lib/combobox/root/ComboboxRootContext.d.ts.map +1 -1
  83. package/lib/combobox/root/ComboboxRootContext.js.map +1 -1
  84. package/lib/combobox/root/ComboboxTransitionContext.d.ts +8 -0
  85. package/lib/combobox/root/ComboboxTransitionContext.d.ts.map +1 -0
  86. package/lib/combobox/root/ComboboxTransitionContext.js +44 -0
  87. package/lib/combobox/root/ComboboxTransitionContext.js.map +1 -0
  88. package/lib/combobox/root/useRenderComboboxRoot.d.ts +39 -0
  89. package/lib/combobox/root/useRenderComboboxRoot.d.ts.map +1 -0
  90. package/lib/combobox/root/useRenderComboboxRoot.js +136 -0
  91. package/lib/combobox/root/useRenderComboboxRoot.js.map +1 -0
  92. package/lib/combobox/store/ComboboxHandle.d.ts +42 -0
  93. package/lib/combobox/store/ComboboxHandle.d.ts.map +1 -0
  94. package/lib/combobox/store/ComboboxHandle.js +65 -0
  95. package/lib/combobox/store/ComboboxHandle.js.map +1 -0
  96. package/lib/combobox/store/ComboboxStore.d.ts +147 -0
  97. package/lib/combobox/store/ComboboxStore.d.ts.map +1 -0
  98. package/lib/combobox/store/ComboboxStore.js +127 -0
  99. package/lib/combobox/store/ComboboxStore.js.map +1 -0
  100. package/lib/combobox/value/ComboboxValue.d.ts.map +1 -1
  101. package/lib/combobox/value/ComboboxValue.js +2 -1
  102. package/lib/combobox/value/ComboboxValue.js.map +1 -1
  103. package/lib/context-menu/positioner/ContextMenuPositioner.d.ts +19 -3
  104. package/lib/context-menu/positioner/ContextMenuPositioner.d.ts.map +1 -1
  105. package/lib/context-menu/positioner/ContextMenuPositioner.js +56 -7
  106. package/lib/context-menu/positioner/ContextMenuPositioner.js.map +1 -1
  107. package/lib/context-menu/root/ContextMenuRoot.d.ts +8 -0
  108. package/lib/context-menu/root/ContextMenuRoot.d.ts.map +1 -1
  109. package/lib/dialog/backdrop/DialogBackdrop.d.ts +9 -0
  110. package/lib/dialog/backdrop/DialogBackdrop.d.ts.map +1 -1
  111. package/lib/dialog/backdrop/DialogBackdrop.js +3 -1
  112. package/lib/dialog/backdrop/DialogBackdrop.js.map +1 -1
  113. package/lib/dialog/popup/DialogPopup.d.ts +9 -0
  114. package/lib/dialog/popup/DialogPopup.d.ts.map +1 -1
  115. package/lib/dialog/popup/DialogPopup.js +2 -2
  116. package/lib/dialog/popup/DialogPopup.js.map +1 -1
  117. package/lib/dialog/popup/useDialogPopupProps.d.ts +2 -0
  118. package/lib/dialog/popup/useDialogPopupProps.d.ts.map +1 -1
  119. package/lib/dialog/popup/useDialogPopupProps.js +4 -0
  120. package/lib/dialog/popup/useDialogPopupProps.js.map +1 -1
  121. package/lib/dialog/root/DialogNestingContext.d.ts +20 -0
  122. package/lib/dialog/root/DialogNestingContext.d.ts.map +1 -0
  123. package/lib/dialog/root/DialogNestingContext.js +53 -0
  124. package/lib/dialog/root/DialogNestingContext.js.map +1 -0
  125. package/lib/dialog/root/useRenderDialogRoot.d.ts.map +1 -1
  126. package/lib/dialog/root/useRenderDialogRoot.js +26 -2
  127. package/lib/dialog/root/useRenderDialogRoot.js.map +1 -1
  128. package/lib/dialog/store/DialogStore.d.ts +19 -2
  129. package/lib/dialog/store/DialogStore.d.ts.map +1 -1
  130. package/lib/dialog/store/DialogStore.js +14 -2
  131. package/lib/dialog/store/DialogStore.js.map +1 -1
  132. package/lib/drawer/index.parts.d.ts +1 -1
  133. package/lib/drawer/index.parts.d.ts.map +1 -1
  134. package/lib/drawer/index.parts.js.map +1 -1
  135. package/lib/drawer/popup/DrawerPopup.d.ts +9 -0
  136. package/lib/drawer/popup/DrawerPopup.d.ts.map +1 -1
  137. package/lib/drawer/popup/DrawerPopup.js +3 -1
  138. package/lib/drawer/popup/DrawerPopup.js.map +1 -1
  139. package/lib/filter/index.d.ts +2 -0
  140. package/lib/filter/index.d.ts.map +1 -0
  141. package/lib/filter/index.js +6 -0
  142. package/lib/filter/index.js.map +1 -0
  143. package/lib/filter/useFilter.d.ts +45 -0
  144. package/lib/filter/useFilter.d.ts.map +1 -0
  145. package/lib/filter/useFilter.js +96 -0
  146. package/lib/filter/useFilter.js.map +1 -0
  147. package/lib/index.d.ts +1 -0
  148. package/lib/index.d.ts.map +1 -1
  149. package/lib/index.js +1 -0
  150. package/lib/index.js.map +1 -1
  151. package/lib/internals/field/useFieldControlRegistration.d.ts +25 -6
  152. package/lib/internals/field/useFieldControlRegistration.d.ts.map +1 -1
  153. package/lib/internals/field/useFieldControlRegistration.js +93 -6
  154. package/lib/internals/field/useFieldControlRegistration.js.map +1 -1
  155. package/lib/menu/popup/MenuPopup.d.ts +10 -0
  156. package/lib/menu/popup/MenuPopup.d.ts.map +1 -1
  157. package/lib/menu/popup/MenuPopup.js +10 -1
  158. package/lib/menu/popup/MenuPopup.js.map +1 -1
  159. package/lib/menu/positioner/MenuPositioner.d.ts +10 -0
  160. package/lib/menu/positioner/MenuPositioner.d.ts.map +1 -1
  161. package/lib/menu/positioner/MenuPositioner.js +9 -1
  162. package/lib/menu/positioner/MenuPositioner.js.map +1 -1
  163. package/lib/menu/store/MenuStore.d.ts +11 -0
  164. package/lib/menu/store/MenuStore.d.ts.map +1 -1
  165. package/lib/menu/store/MenuStore.js +4 -0
  166. package/lib/menu/store/MenuStore.js.map +1 -1
  167. package/lib/menu/submenu-trigger/MenuSubmenuTrigger.d.ts.map +1 -1
  168. package/lib/menu/submenu-trigger/MenuSubmenuTrigger.js +3 -0
  169. package/lib/menu/submenu-trigger/MenuSubmenuTrigger.js.map +1 -1
  170. package/lib/menu/trigger/MenuTrigger.d.ts.map +1 -1
  171. package/lib/menu/trigger/MenuTrigger.js +4 -1
  172. package/lib/menu/trigger/MenuTrigger.js.map +1 -1
  173. package/lib/meter/indicator/MeterIndicator.d.ts +2 -1
  174. package/lib/meter/indicator/MeterIndicator.d.ts.map +1 -1
  175. package/lib/meter/indicator/MeterIndicator.js +1 -2
  176. package/lib/meter/indicator/MeterIndicator.js.map +1 -1
  177. package/lib/meter/label/MeterLabel.d.ts +2 -1
  178. package/lib/meter/label/MeterLabel.d.ts.map +1 -1
  179. package/lib/meter/label/MeterLabel.js +1 -2
  180. package/lib/meter/label/MeterLabel.js.map +1 -1
  181. package/lib/meter/root/MeterRoot.d.ts +21 -0
  182. package/lib/meter/root/MeterRoot.d.ts.map +1 -1
  183. package/lib/meter/root/MeterRoot.js +2 -2
  184. package/lib/meter/root/MeterRoot.js.map +1 -1
  185. package/lib/meter/root/MeterRootContext.d.ts +5 -0
  186. package/lib/meter/root/MeterRootContext.d.ts.map +1 -1
  187. package/lib/meter/root/MeterRootContext.js.map +1 -1
  188. package/lib/meter/track/MeterTrack.d.ts +2 -1
  189. package/lib/meter/track/MeterTrack.d.ts.map +1 -1
  190. package/lib/meter/track/MeterTrack.js +1 -2
  191. package/lib/meter/track/MeterTrack.js.map +1 -1
  192. package/lib/meter/value/MeterValue.d.ts +2 -1
  193. package/lib/meter/value/MeterValue.d.ts.map +1 -1
  194. package/lib/meter/value/MeterValue.js +1 -2
  195. package/lib/meter/value/MeterValue.js.map +1 -1
  196. package/lib/number-field/input/NumberFieldInput.d.ts.map +1 -1
  197. package/lib/number-field/input/NumberFieldInput.js +11 -2
  198. package/lib/number-field/input/NumberFieldInput.js.map +1 -1
  199. package/lib/number-field/root/NumberFieldRoot.d.ts.map +1 -1
  200. package/lib/number-field/root/NumberFieldRoot.js +5 -2
  201. package/lib/number-field/root/NumberFieldRoot.js.map +1 -1
  202. package/lib/otp-field/input/OTPFieldInput.d.ts.map +1 -1
  203. package/lib/otp-field/input/OTPFieldInput.js +4 -0
  204. package/lib/otp-field/input/OTPFieldInput.js.map +1 -1
  205. package/lib/otp-field/root/OTPFieldRoot.d.ts.map +1 -1
  206. package/lib/otp-field/root/OTPFieldRoot.js +20 -2
  207. package/lib/otp-field/root/OTPFieldRoot.js.map +1 -1
  208. package/lib/popover/popup/PopoverPopup.d.ts +10 -0
  209. package/lib/popover/popup/PopoverPopup.d.ts.map +1 -1
  210. package/lib/popover/popup/PopoverPopup.js +10 -1
  211. package/lib/popover/popup/PopoverPopup.js.map +1 -1
  212. package/lib/popover/positioner/PopoverPositioner.d.ts +10 -0
  213. package/lib/popover/positioner/PopoverPositioner.d.ts.map +1 -1
  214. package/lib/popover/positioner/PopoverPositioner.js +4 -0
  215. package/lib/popover/positioner/PopoverPositioner.js.map +1 -1
  216. package/lib/popover/store/PopoverStore.d.ts +11 -0
  217. package/lib/popover/store/PopoverStore.d.ts.map +1 -1
  218. package/lib/popover/store/PopoverStore.js +4 -0
  219. package/lib/popover/store/PopoverStore.js.map +1 -1
  220. package/lib/popover/trigger/PopoverTrigger.d.ts.map +1 -1
  221. package/lib/popover/trigger/PopoverTrigger.js +4 -1
  222. package/lib/popover/trigger/PopoverTrigger.js.map +1 -1
  223. package/lib/progress/root/ProgressRoot.d.ts +21 -0
  224. package/lib/progress/root/ProgressRoot.d.ts.map +1 -1
  225. package/lib/progress/root/ProgressRoot.js +1 -1
  226. package/lib/progress/root/ProgressRoot.js.map +1 -1
  227. package/lib/radio-group/RadioGroup.d.ts.map +1 -1
  228. package/lib/radio-group/RadioGroup.js +5 -2
  229. package/lib/radio-group/RadioGroup.js.map +1 -1
  230. package/lib/select/backdrop/SelectBackdrop.d.ts.map +1 -1
  231. package/lib/select/backdrop/SelectBackdrop.js +3 -0
  232. package/lib/select/backdrop/SelectBackdrop.js.map +1 -1
  233. package/lib/select/index.parts.d.ts +1 -0
  234. package/lib/select/index.parts.d.ts.map +1 -1
  235. package/lib/select/index.parts.js +4 -1
  236. package/lib/select/index.parts.js.map +1 -1
  237. package/lib/select/popup/SelectPopup.d.ts +8 -0
  238. package/lib/select/popup/SelectPopup.d.ts.map +1 -1
  239. package/lib/select/popup/SelectPopup.js +10 -1
  240. package/lib/select/popup/SelectPopup.js.map +1 -1
  241. package/lib/select/positioner/SelectPositioner.d.ts +4 -0
  242. package/lib/select/positioner/SelectPositioner.d.ts.map +1 -1
  243. package/lib/select/positioner/SelectPositioner.js +2 -0
  244. package/lib/select/positioner/SelectPositioner.js.map +1 -1
  245. package/lib/select/root/SelectRoot.d.ts +45 -4
  246. package/lib/select/root/SelectRoot.d.ts.map +1 -1
  247. package/lib/select/root/SelectRoot.js +43 -5
  248. package/lib/select/root/SelectRoot.js.map +1 -1
  249. package/lib/select/store/SelectHandle.d.ts +42 -0
  250. package/lib/select/store/SelectHandle.d.ts.map +1 -0
  251. package/lib/select/store/SelectHandle.js +69 -0
  252. package/lib/select/store/SelectHandle.js.map +1 -0
  253. package/lib/select/store/SelectStore.d.ts +28 -0
  254. package/lib/select/store/SelectStore.d.ts.map +1 -1
  255. package/lib/select/store/SelectStore.js +15 -1
  256. package/lib/select/store/SelectStore.js.map +1 -1
  257. package/lib/select/trigger/SelectTrigger.d.ts +18 -3
  258. package/lib/select/trigger/SelectTrigger.d.ts.map +1 -1
  259. package/lib/select/trigger/SelectTrigger.js +49 -4
  260. package/lib/select/trigger/SelectTrigger.js.map +1 -1
  261. package/lib/slider/root/SliderRoot.d.ts.map +1 -1
  262. package/lib/slider/root/SliderRoot.js +9 -1
  263. package/lib/slider/root/SliderRoot.js.map +1 -1
  264. package/lib/slider/thumb/SliderThumb.d.ts.map +1 -1
  265. package/lib/slider/thumb/SliderThumb.js +10 -2
  266. package/lib/slider/thumb/SliderThumb.js.map +1 -1
  267. package/lib/switch/root/SwitchRoot.d.ts.map +1 -1
  268. package/lib/switch/root/SwitchRoot.js +6 -2
  269. package/lib/switch/root/SwitchRoot.js.map +1 -1
  270. package/lib/tabs/tab/TabsTab.d.ts +2 -10
  271. package/lib/tabs/tab/TabsTab.d.ts.map +1 -1
  272. package/lib/tooltip/popup/TooltipPopup.d.ts +10 -0
  273. package/lib/tooltip/popup/TooltipPopup.d.ts.map +1 -1
  274. package/lib/tooltip/popup/TooltipPopup.js +10 -1
  275. package/lib/tooltip/popup/TooltipPopup.js.map +1 -1
  276. package/lib/tooltip/positioner/TooltipPositioner.d.ts +10 -0
  277. package/lib/tooltip/positioner/TooltipPositioner.d.ts.map +1 -1
  278. package/lib/tooltip/positioner/TooltipPositioner.js +4 -0
  279. package/lib/tooltip/positioner/TooltipPositioner.js.map +1 -1
  280. package/lib/tooltip/store/TooltipStore.d.ts +11 -0
  281. package/lib/tooltip/store/TooltipStore.d.ts.map +1 -1
  282. package/lib/tooltip/store/TooltipStore.js +11 -1
  283. package/lib/tooltip/store/TooltipStore.js.map +1 -1
  284. package/lib/tooltip/trigger/TooltipTrigger.d.ts.map +1 -1
  285. package/lib/tooltip/trigger/TooltipTrigger.js +4 -1
  286. package/lib/tooltip/trigger/TooltipTrigger.js.map +1 -1
  287. package/package.json +1 -1
  288. package/src/alert-dialog/index.parts.ts +1 -1
  289. package/src/autocomplete/handle.ts +18 -0
  290. package/src/autocomplete/index.parts.ts +1 -0
  291. package/src/autocomplete/index.ts +1 -0
  292. package/src/autocomplete/root/AutocompleteRoot.tsx +65 -50
  293. package/src/avatar/fallback/AvatarFallback.tsx +3 -1
  294. package/src/avatar/image/AvatarImage.tsx +5 -0
  295. package/src/checkbox/root/CheckboxRoot.tsx +7 -2
  296. package/src/combobox/backdrop/ComboboxBackdrop.tsx +10 -3
  297. package/src/combobox/empty/ComboboxEmpty.tsx +5 -1
  298. package/src/combobox/index.parts.ts +1 -0
  299. package/src/combobox/index.ts +2 -0
  300. package/src/combobox/input/ComboboxInput.tsx +112 -27
  301. package/src/combobox/item/ComboboxItem.tsx +24 -6
  302. package/src/combobox/list/ComboboxList.tsx +7 -2
  303. package/src/combobox/popup/ComboboxPopup.tsx +44 -2
  304. package/src/combobox/portal/ComboboxPortal.tsx +19 -13
  305. package/src/combobox/portal/ComboboxPortalContext.ts +15 -0
  306. package/src/combobox/positioner/ComboboxPositioner.tsx +45 -10
  307. package/src/combobox/positioner/ComboboxPositionerContext.ts +23 -0
  308. package/src/combobox/root/ComboboxItemsContext.ts +32 -0
  309. package/src/combobox/root/ComboboxRoot.tsx +94 -56
  310. package/src/combobox/root/ComboboxRootContext.ts +3 -54
  311. package/src/combobox/root/ComboboxTransitionContext.ts +15 -0
  312. package/src/combobox/root/useRenderComboboxRoot.tsx +189 -0
  313. package/src/combobox/store/ComboboxHandle.ts +64 -0
  314. package/src/combobox/store/ComboboxStore.ts +249 -0
  315. package/src/combobox/value/ComboboxValue.tsx +2 -1
  316. package/src/context-menu/positioner/ContextMenuPositioner.tsx +90 -10
  317. package/src/context-menu/root/ContextMenuRoot.tsx +8 -0
  318. package/src/dialog/backdrop/DialogBackdrop.tsx +12 -1
  319. package/src/dialog/popup/DialogPopup.tsx +11 -2
  320. package/src/dialog/popup/useDialogPopupProps.ts +4 -0
  321. package/src/dialog/root/DialogNestingContext.ts +27 -0
  322. package/src/dialog/root/useRenderDialogRoot.tsx +37 -2
  323. package/src/dialog/store/DialogStore.ts +24 -2
  324. package/src/drawer/index.parts.ts +1 -1
  325. package/src/drawer/popup/DrawerPopup.tsx +12 -1
  326. package/src/filter/index.ts +5 -0
  327. package/src/filter/useFilter.ts +95 -0
  328. package/src/index.ts +1 -0
  329. package/src/internals/field/useFieldControlRegistration.ts +86 -6
  330. package/src/menu/popup/MenuPopup.tsx +20 -1
  331. package/src/menu/positioner/MenuPositioner.tsx +19 -1
  332. package/src/menu/store/MenuStore.ts +13 -0
  333. package/src/menu/submenu-trigger/MenuSubmenuTrigger.tsx +3 -0
  334. package/src/menu/trigger/MenuTrigger.tsx +5 -2
  335. package/src/meter/indicator/MeterIndicator.tsx +3 -4
  336. package/src/meter/label/MeterLabel.tsx +3 -4
  337. package/src/meter/root/MeterRoot.tsx +29 -4
  338. package/src/meter/root/MeterRootContext.ts +5 -0
  339. package/src/meter/track/MeterTrack.tsx +3 -4
  340. package/src/meter/value/MeterValue.tsx +3 -4
  341. package/src/number-field/input/NumberFieldInput.tsx +11 -2
  342. package/src/number-field/root/NumberFieldRoot.tsx +4 -2
  343. package/src/otp-field/input/OTPFieldInput.tsx +4 -0
  344. package/src/otp-field/root/OTPFieldRoot.tsx +22 -2
  345. package/src/popover/popup/PopoverPopup.tsx +20 -1
  346. package/src/popover/positioner/PopoverPositioner.tsx +14 -0
  347. package/src/popover/store/PopoverStore.ts +13 -0
  348. package/src/popover/trigger/PopoverTrigger.tsx +5 -2
  349. package/src/progress/root/ProgressRoot.tsx +25 -1
  350. package/src/radio-group/RadioGroup.tsx +5 -2
  351. package/src/select/backdrop/SelectBackdrop.tsx +4 -0
  352. package/src/select/index.parts.ts +1 -0
  353. package/src/select/popup/SelectPopup.tsx +18 -1
  354. package/src/select/positioner/SelectPositioner.tsx +9 -3
  355. package/src/select/root/SelectRoot.tsx +109 -9
  356. package/src/select/store/SelectHandle.ts +68 -0
  357. package/src/select/store/SelectStore.ts +38 -1
  358. package/src/select/trigger/SelectTrigger.tsx +78 -7
  359. package/src/slider/root/SliderRoot.tsx +11 -1
  360. package/src/slider/thumb/SliderThumb.tsx +10 -1
  361. package/src/switch/root/SwitchRoot.tsx +5 -2
  362. package/src/tabs/tab/TabsTab.tsx +2 -10
  363. package/src/tooltip/popup/TooltipPopup.tsx +20 -1
  364. package/src/tooltip/positioner/TooltipPositioner.tsx +14 -0
  365. package/src/tooltip/store/TooltipStore.ts +20 -1
  366. package/src/tooltip/trigger/TooltipTrigger.tsx +5 -2
  367. package/lib/combobox/root/useComboboxRoot.d.ts +0 -29
  368. package/lib/combobox/root/useComboboxRoot.d.ts.map +0 -1
  369. package/lib/combobox/root/useComboboxRoot.js +0 -176
  370. package/lib/combobox/root/useComboboxRoot.js.map +0 -1
  371. package/lib/utils/fastObjectShallowCompare.d.ts +0 -2
  372. package/lib/utils/fastObjectShallowCompare.d.ts.map +0 -1
  373. package/lib/utils/fastObjectShallowCompare.js +0 -29
  374. package/lib/utils/fastObjectShallowCompare.js.map +0 -1
  375. package/lib/utils/mergeObjects.d.ts +0 -2
  376. package/lib/utils/mergeObjects.d.ts.map +0 -1
  377. package/lib/utils/mergeObjects.js +0 -16
  378. package/lib/utils/mergeObjects.js.map +0 -1
  379. package/src/combobox/root/useComboboxRoot.ts +0 -199
  380. package/src/utils/fastObjectShallowCompare.ts +0 -30
  381. package/src/utils/mergeObjects.ts +0 -15
@@ -1,10 +1,16 @@
1
1
  'use client';
2
2
  import * as React from 'react';
3
3
  import { Pressable, type GestureResponderEvent, type LayoutChangeEvent } from 'react-native';
4
- import { useSelectRootContext } from '../root/SelectRootContext';
4
+ import { SelectRootContext } from '../root/SelectRootContext';
5
5
  import { useRenderElement } from '../../use-render/useRenderElement';
6
6
  import { useButton } from '../../internals/use-button/useButton';
7
+ import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
8
+ import { useId } from '../../hooks/useId';
9
+ import { useIsoLayoutEffect } from '../../hooks/useIsoLayoutEffect';
7
10
  import { useMergedRefs } from '../../hooks/useMergedRefs';
11
+ import { usePopupHandleStore } from '../../utils/popups/usePopupHandleStore';
12
+ import type { SelectHandle } from '../store/SelectHandle';
13
+ import type { SelectStore } from '../store/SelectStore';
8
14
  import type { ZestUIComponentProps } from '../../types';
9
15
  import { createChangeEventDetails } from '../../utils/createChangeEventDetails';
10
16
  import { REASONS } from '../../utils/reasons';
@@ -12,18 +18,42 @@ import { REASONS } from '../../utils/reasons';
12
18
  /**
13
19
  * A button that opens the select popup, and the element it is positioned against.
14
20
  * Renders a `<Pressable>`.
21
+ *
22
+ * Pass a `handle` to render a trigger outside of its `Select.Root`: there is no
23
+ * context reaching across, so the handle is what connects the two.
15
24
  */
16
- export function SelectTrigger(componentProps: SelectTrigger.Props) {
25
+ export function SelectTrigger<Payload = unknown>(componentProps: SelectTrigger.Props<Payload>) {
17
26
  const {
18
27
  render,
19
28
  className,
20
29
  style,
21
30
  disabled: disabledProp = false,
31
+ handle,
32
+ nativeID: idProp,
33
+ payload,
22
34
  ref,
23
35
  ...elementProps
24
36
  } = componentProps;
25
37
 
26
- const store = useSelectRootContext();
38
+ const rootStore = React.useContext(SelectRootContext);
39
+ const handleStore = usePopupHandleStore(handle);
40
+
41
+ // A trigger inside a root uses that root; a detached one follows its handle,
42
+ // which resolves to the attached root's store or to an inert fallback.
43
+ const store = (handleStore ?? rootStore) as SelectStore | undefined;
44
+
45
+ if (store === undefined) {
46
+ throw new Error(
47
+ 'Zest: Select.Trigger must be placed within <Select.Root>, or given a `handle` it shares with one.',
48
+ );
49
+ }
50
+
51
+ const id = useId(idProp ?? undefined);
52
+
53
+ // The trigger is the element assistive tech announces, so the field's label
54
+ // and messages attach here rather than to the root.
55
+ const { fieldProps } = useFieldControlRegistration();
56
+
27
57
  const open = store.useState('open');
28
58
  const rootDisabled = store.useState('disabled');
29
59
  const readOnly = store.useState('readOnly');
@@ -36,14 +66,31 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
36
66
 
37
67
  const { getButtonProps } = useButton({ disabled });
38
68
 
69
+ const triggerRef = React.useRef<unknown>(null);
39
70
  const anchorRef = React.useCallback(
40
71
  (node: unknown) => {
72
+ triggerRef.current = node;
41
73
  store.set('triggerNode', node);
42
74
  },
43
75
  [store],
44
76
  );
45
77
  const mergedRef = useMergedRefs(ref, anchorRef);
46
78
 
79
+ // Registering into whichever store is current is what lets a handle resolve
80
+ // `open(id)`. The effect re-runs when the handle swaps stores, migrating the
81
+ // registration to the root that just attached.
82
+ useIsoLayoutEffect(() => {
83
+ if (id === undefined) {
84
+ return undefined;
85
+ }
86
+
87
+ store.context.triggerNodes.add(id, triggerRef.current);
88
+
89
+ return () => {
90
+ store.context.triggerNodes.delete(id);
91
+ };
92
+ }, [store, id]);
93
+
47
94
  const state: SelectTriggerState = { disabled, open, pressed, readOnly, required };
48
95
 
49
96
  return useRenderElement(Pressable, componentProps, {
@@ -51,11 +98,19 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
51
98
  ref: mergedRef,
52
99
  props: [
53
100
  {
101
+ nativeID: id,
54
102
  onPress(event: GestureResponderEvent) {
55
103
  if (readOnly) {
56
104
  return;
57
105
  }
58
106
 
107
+ if (payload !== undefined) {
108
+ store.set('payload', payload);
109
+ }
110
+ if (id !== undefined) {
111
+ store.set('triggerId', id);
112
+ }
113
+
59
114
  store.setOpen(!open, createChangeEventDetails(REASONS.triggerPress, event));
60
115
  },
61
116
  onPressIn() {
@@ -65,16 +120,21 @@ export function SelectTrigger(componentProps: SelectTrigger.Props) {
65
120
  setPressed(false);
66
121
  },
67
122
  onLayout(event: LayoutChangeEvent) {
68
- const { width } = event.nativeEvent.layout;
123
+ const { width, height } = event.nativeEvent.layout;
69
124
  store.set('triggerWidth', width);
125
+ store.set('triggerHeight', height);
70
126
  store.state.update?.();
71
127
  },
72
128
  accessibilityRole: 'combobox' as const,
73
- accessibilityLabelledBy: labelId,
74
129
  accessibilityState: { expanded: open, disabled: disabled || undefined },
75
130
  'aria-haspopup': 'listbox' as const,
76
131
  'aria-readonly': readOnly || undefined,
77
132
  'aria-required': required || undefined,
133
+ ...fieldProps,
134
+ // A surrounding `Field.Label` names the control; `Select.Label` is the
135
+ // fallback for a select that stands on its own.
136
+ accessibilityLabelledBy: fieldProps.accessibilityLabelledBy ?? labelId,
137
+ 'aria-labelledby': fieldProps['aria-labelledby'] ?? labelId,
78
138
  },
79
139
  elementProps,
80
140
  getButtonProps,
@@ -90,16 +150,27 @@ export interface SelectTriggerState {
90
150
  required: boolean;
91
151
  }
92
152
 
93
- export interface SelectTriggerProps
153
+ export interface SelectTriggerProps<Payload = unknown>
94
154
  extends ZestUIComponentProps<typeof Pressable, SelectTriggerState> {
95
155
  /**
96
156
  * Whether the component should ignore user interaction.
97
157
  * @default false
98
158
  */
99
159
  disabled?: boolean | undefined;
160
+ /**
161
+ * A handle shared with a `Select.Root`, which is what lets this trigger live
162
+ * outside of it. Create one with `Select.createHandle()`.
163
+ *
164
+ * The trigger's `nativeID` is the id a handle's `open(triggerId)` resolves.
165
+ */
166
+ handle?: SelectHandle<Payload> | undefined;
167
+ /**
168
+ * A payload handed to the root's children when they are a function.
169
+ */
170
+ payload?: Payload | undefined;
100
171
  }
101
172
 
102
173
  export namespace SelectTrigger {
103
174
  export type State = SelectTriggerState;
104
- export type Props = SelectTriggerProps;
175
+ export type Props<TPayload = unknown> = SelectTriggerProps<TPayload>;
105
176
  }
@@ -5,6 +5,7 @@ import { useControlled } from '../../hooks/useControlled';
5
5
  import { useIsoLayoutEffect } from '../../hooks/useIsoLayoutEffect';
6
6
  import { useStableCallback } from '../../hooks/useStableCallback';
7
7
  import { useRenderElement } from '../../use-render/useRenderElement';
8
+ import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
8
9
  import { clamp } from '../../utils/clamp';
9
10
  import type { ZestUIComponentProps, Orientation } from '../../types';
10
11
  import type { ZestChangeEventDetails } from '../../utils/createChangeEventDetails';
@@ -24,7 +25,7 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
24
25
  const {
25
26
  className,
26
27
  defaultValue,
27
- disabled = false,
28
+ disabled: disabledProp = false,
28
29
  format,
29
30
  locale,
30
31
  max = 100,
@@ -41,6 +42,12 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
41
42
  ...elementProps
42
43
  } = componentProps;
43
44
 
45
+ const { fieldDisabled, markChanged, markTouched } = useFieldControlRegistration({
46
+ initialValue: defaultValue ?? value,
47
+ });
48
+
49
+ const disabled = disabledProp || fieldDisabled;
50
+
44
51
  // A range slider is just a slider whose value is an array; remember which
45
52
  // shape the consumer used so callbacks hand back the same one.
46
53
  const isRange = Array.isArray(value ?? defaultValue);
@@ -123,6 +130,7 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
123
130
 
124
131
  valuesRef.current = nextValues;
125
132
  setValuesState(nextValues);
133
+ markChanged(fromArray(nextValues, isRange));
126
134
  },
127
135
  );
128
136
 
@@ -154,6 +162,8 @@ export function SliderRoot<Value extends number | readonly number[] = number>(
154
162
 
155
163
  const commitValue = useStableCallback((eventDetails: SliderRoot.ChangeEventDetails) => {
156
164
  onValueCommitted?.(fromArray(valuesRef.current, isRange) as Value, eventDetails);
165
+ // Releasing the thumb is the end of the interaction — a slider's blur.
166
+ markTouched(fromArray(valuesRef.current, isRange));
157
167
  });
158
168
 
159
169
  const state: SliderRootState = React.useMemo(
@@ -2,6 +2,7 @@
2
2
  import { View } from 'react-native';
3
3
  import { useSliderRootContext } from '../root/SliderRootContext';
4
4
  import { useRenderElement } from '../../use-render/useRenderElement';
5
+ import { useFieldControlRegistration } from '../../internals/field/useFieldControlRegistration';
5
6
  import { formatNumber } from '../../utils/formatNumber';
6
7
  import type { SliderRootState } from '../root/SliderRoot';
7
8
  import type { ZestUIComponentProps } from '../../types';
@@ -20,6 +21,10 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
20
21
  const { disabled, format, labelId, locale, max, min, orientation, state, values } =
21
22
  useSliderRootContext();
22
23
 
24
+ // The thumb is what assistive tech announces and adjusts, so a surrounding
25
+ // field's label and messages attach here rather than to the root.
26
+ const { fieldProps } = useFieldControlRegistration();
27
+
23
28
  const value = values[index] ?? min;
24
29
  const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;
25
30
 
@@ -37,7 +42,6 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
37
42
  {
38
43
  style: positionStyle,
39
44
  accessibilityRole: 'adjustable' as const,
40
- accessibilityLabelledBy: labelId,
41
45
  accessibilityState: { disabled: disabled || undefined },
42
46
  accessibilityValue: {
43
47
  min,
@@ -46,6 +50,11 @@ export function SliderThumb(componentProps: SliderThumb.Props) {
46
50
  text: formatValue(value, format, locale),
47
51
  },
48
52
  'aria-orientation': orientation,
53
+ ...fieldProps,
54
+ // A surrounding `Field.Label` names the control; `Slider.Label` is the
55
+ // fallback for a slider that stands on its own.
56
+ accessibilityLabelledBy: fieldProps.accessibilityLabelledBy ?? labelId,
57
+ 'aria-labelledby': fieldProps['aria-labelledby'] ?? labelId,
49
58
  },
50
59
  elementProps,
51
60
  ],
@@ -35,7 +35,9 @@ export function SwitchRoot(componentProps: SwitchRoot.Props) {
35
35
  ...elementProps
36
36
  } = componentProps;
37
37
 
38
- const { fieldDisabled, fieldProps, validateField } = useFieldControlRegistration();
38
+ const { fieldDisabled, fieldProps, markChanged, markTouched } = useFieldControlRegistration({
39
+ initialValue: defaultChecked ?? checkedProp ?? false,
40
+ });
39
41
 
40
42
  const disabled = disabledProp || fieldDisabled;
41
43
 
@@ -78,7 +80,8 @@ export function SwitchRoot(componentProps: SwitchRoot.Props) {
78
80
  }
79
81
 
80
82
  setCheckedState(nextChecked);
81
- validateField(nextChecked);
83
+ markChanged(nextChecked);
84
+ markTouched(nextChecked);
82
85
  },
83
86
  accessibilityRole: 'switch' as const,
84
87
  accessibilityState: {
@@ -7,7 +7,7 @@ import { useButton } from '../../internals/use-button/useButton';
7
7
  import { useCompositeListItem } from '../../internals/composite/list/useCompositeListItem';
8
8
  import type { CompositeItemLayout } from '../../internals/composite/list/CompositeListContext';
9
9
  import { useTabsRootContext } from '../root/TabsRootContext';
10
- import type { TabsRoot } from '../root/TabsRoot';
10
+ import type { TabsRoot, TabsRootState } from '../root/TabsRoot';
11
11
  import type { ZestUIComponentProps } from '../../types';
12
12
  import { createChangeEventDetails } from '../../utils/createChangeEventDetails';
13
13
  import { REASONS } from '../../utils/reasons';
@@ -106,7 +106,7 @@ export interface TabsTabMetadata {
106
106
  layout?: CompositeItemLayout | undefined;
107
107
  }
108
108
 
109
- export interface TabsTabState {
109
+ export interface TabsTabState extends TabsRootState {
110
110
  /**
111
111
  * Whether the component should ignore user interaction.
112
112
  */
@@ -115,14 +115,6 @@ export interface TabsTabState {
115
115
  * Whether the component is active.
116
116
  */
117
117
  active: boolean;
118
- /**
119
- * The component orientation.
120
- */
121
- orientation: TabsRoot.Orientation;
122
- /**
123
- * The direction used for tab activation.
124
- */
125
- tabActivationDirection: TabsTab.ActivationDirection;
126
118
  /**
127
119
  * Whether the tab is currently pressed.
128
120
  */
@@ -20,8 +20,17 @@ export function TooltipPopup(componentProps: TooltipPopup.Props) {
20
20
  const { transitionStatus } = useTooltipTransitionContext() ?? { transitionStatus: undefined };
21
21
 
22
22
  const open = store.useState('open');
23
+ const triggerWidth = store.useState('triggerWidth');
24
+ const triggerHeight = store.useState('triggerHeight');
23
25
 
24
- const state: TooltipPopupState = { open, transitionStatus, side, align };
26
+ const state: TooltipPopupState = {
27
+ open,
28
+ transitionStatus,
29
+ side,
30
+ align,
31
+ triggerWidth,
32
+ triggerHeight,
33
+ };
25
34
 
26
35
  return useRenderElement(View, componentProps, {
27
36
  state,
@@ -57,6 +66,16 @@ export interface TooltipPopupState {
57
66
  * The alignment the popup was actually placed with.
58
67
  */
59
68
  align: Align;
69
+ /**
70
+ * The trigger's measured width, available for consumers to size the popup
71
+ * against its anchor. This is the React Native equivalent of the web's
72
+ * `--anchor-width` CSS variable.
73
+ */
74
+ triggerWidth: number | undefined;
75
+ /**
76
+ * The trigger's measured height.
77
+ */
78
+ triggerHeight: number | undefined;
60
79
  }
61
80
 
62
81
  export interface TooltipPopupProps extends ZestUIComponentProps<typeof View, TooltipPopupState> {}
@@ -38,6 +38,8 @@ export function TooltipPositioner(componentProps: TooltipPositioner.Props) {
38
38
  useTooltipPortalContext();
39
39
  const store = useTooltipRootContext();
40
40
  const open = store.useState('open');
41
+ const triggerWidth = store.useState('triggerWidth');
42
+ const triggerHeight = store.useState('triggerHeight');
41
43
  const triggerNode = store.useState('triggerNode');
42
44
 
43
45
  const positioning = useAnchorPositioning({
@@ -69,6 +71,8 @@ export function TooltipPositioner(componentProps: TooltipPositioner.Props) {
69
71
  open,
70
72
  side: positioning.side,
71
73
  align: positioning.align,
74
+ triggerWidth,
75
+ triggerHeight,
72
76
  };
73
77
 
74
78
  const contextValue: TooltipPositionerContext = React.useMemo(
@@ -101,6 +105,16 @@ export interface TooltipPositionerState {
101
105
  open: boolean;
102
106
  side: Side;
103
107
  align: Align;
108
+ /**
109
+ * The trigger's measured width, available for consumers to size the popup
110
+ * against its anchor. This is the React Native equivalent of the web's
111
+ * `--anchor-width` CSS variable.
112
+ */
113
+ triggerWidth: number | undefined;
114
+ /**
115
+ * The trigger's measured height.
116
+ */
117
+ triggerHeight: number | undefined;
104
118
  }
105
119
 
106
120
  export interface TooltipPositionerProps
@@ -9,6 +9,15 @@ export type State = {
9
9
  * The anchor's native node, carried across the portal boundary.
10
10
  */
11
11
  triggerNode: unknown;
12
+ /**
13
+ * The trigger's measured width, the React Native counterpart of the web's
14
+ * `--anchor-width` CSS variable.
15
+ */
16
+ triggerWidth: number | undefined;
17
+ /**
18
+ * The trigger's measured height.
19
+ */
20
+ triggerHeight: number | undefined;
12
21
  update: (() => void) | undefined;
13
22
  };
14
23
 
@@ -19,13 +28,23 @@ type Context = {
19
28
  const selectors = {
20
29
  open: createSelector((state: State) => state.openProp ?? state.open),
21
30
  triggerNode: createSelector((state: State) => state.triggerNode),
31
+ triggerWidth: createSelector((state: State) => state.triggerWidth),
32
+ triggerHeight: createSelector((state: State) => state.triggerHeight),
22
33
  update: createSelector((state: State) => state.update),
23
34
  };
24
35
 
25
36
  export class TooltipStore extends ReactStore<Readonly<State>, Context, typeof selectors> {
26
37
  constructor(initialState?: Partial<State>) {
27
38
  super(
28
- { open: false, openProp: undefined, triggerNode: null, update: undefined, ...initialState },
39
+ {
40
+ open: false,
41
+ openProp: undefined,
42
+ triggerNode: null,
43
+ triggerWidth: undefined,
44
+ triggerHeight: undefined,
45
+ update: undefined,
46
+ ...initialState,
47
+ },
29
48
  { onOpenChange: undefined },
30
49
  selectors,
31
50
  );
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import * as React from 'react';
3
- import { Pressable, type GestureResponderEvent } from 'react-native';
3
+ import { Pressable, type GestureResponderEvent, type LayoutChangeEvent } from 'react-native';
4
4
  import { useTooltipRootContext } from '../root/TooltipRootContext';
5
5
  import { useRenderElement } from '../../use-render/useRenderElement';
6
6
  import { useMergedRefs } from '../../hooks/useMergedRefs';
@@ -61,7 +61,10 @@ export function TooltipTrigger(componentProps: TooltipTrigger.Props) {
61
61
  onPressOut() {
62
62
  setPressed(false);
63
63
  },
64
- onLayout() {
64
+ onLayout(event: LayoutChangeEvent) {
65
+ const { width, height } = event.nativeEvent.layout;
66
+ store.set('triggerWidth', width);
67
+ store.set('triggerHeight', height);
65
68
  store.state.update?.();
66
69
  },
67
70
  accessibilityState: { expanded: open, disabled: disabled || undefined },
@@ -1,29 +0,0 @@
1
- import type { ZestNativeEvent } from '../../utils/createChangeEventDetails';
2
- import { ComboboxRootContext, type ComboboxItem } from './ComboboxRootContext';
3
- export type ComboboxItems = ReadonlyArray<string | {
4
- value: unknown;
5
- label: string;
6
- }>;
7
- export interface UseComboboxRootParameters {
8
- mode: 'combobox' | 'autocomplete';
9
- items: ComboboxItems | undefined;
10
- value?: unknown;
11
- defaultValue?: unknown;
12
- onValueChange?: ((value: unknown) => void) | undefined;
13
- inputValue?: string | undefined;
14
- defaultInputValue?: string | undefined;
15
- onInputValueChange?: ((value: string) => void) | undefined;
16
- open?: boolean | undefined;
17
- defaultOpen?: boolean | undefined;
18
- onOpenChange?: ((open: boolean, event?: ZestNativeEvent) => void) | undefined;
19
- openOnFocus?: boolean | undefined;
20
- filter?: ((item: ComboboxItem, query: string) => boolean) | undefined;
21
- disabled: boolean;
22
- }
23
- /**
24
- * The state behind `Combobox.Root` and `Autocomplete.Root`: the resolved item
25
- * list, the filtered view of it, the input text, the selection, and the open
26
- * state — plus the anchor plumbing the popup needs.
27
- */
28
- export declare function useComboboxRoot(parameters: UseComboboxRootParameters): ComboboxRootContext;
29
- //# sourceMappingURL=useComboboxRoot.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComboboxRoot.d.ts","sourceRoot":"","sources":["../../../src/combobox/root/useComboboxRoot.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE/E,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAYtF,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC;IAClC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,kBAAkB,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3D,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC9E,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,yBAAyB,GAAG,mBAAmB,CAwJ1F"}
@@ -1,176 +0,0 @@
1
- "use strict";
2
- 'use client';
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.useComboboxRoot = useComboboxRoot;
38
- const React = __importStar(require("react"));
39
- const useControlled_1 = require("../../hooks/useControlled");
40
- const useIsoLayoutEffect_1 = require("../../hooks/useIsoLayoutEffect");
41
- const useStableCallback_1 = require("../../hooks/useStableCallback");
42
- /** Normalizes the `items` prop into `{ value, label }` records. */
43
- function normalizeItems(items) {
44
- if (!items) {
45
- return [];
46
- }
47
- return items.map((item) => typeof item === 'string' ? { value: item, label: item } : { value: item.value, label: item.label });
48
- }
49
- const defaultFilter = (item, query) => item.label.toLowerCase().includes(query.toLowerCase());
50
- /**
51
- * The state behind `Combobox.Root` and `Autocomplete.Root`: the resolved item
52
- * list, the filtered view of it, the input text, the selection, and the open
53
- * state — plus the anchor plumbing the popup needs.
54
- */
55
- function useComboboxRoot(parameters) {
56
- var _a, _b, _c, _d;
57
- const { mode, items, value: valueProp, defaultValue, onValueChange, inputValue: inputValueProp, defaultInputValue, onInputValueChange, open: openProp, defaultOpen = false, onOpenChange, openOnFocus = true, filter = defaultFilter, disabled, } = parameters;
58
- const normalized = React.useMemo(() => normalizeItems(items), [items]);
59
- const [open, setOpenState] = (0, useControlled_1.useControlled)({
60
- controlled: openProp,
61
- default: defaultOpen,
62
- name: 'Combobox',
63
- state: 'open',
64
- });
65
- const [selectedValue, setSelectedValue] = (0, useControlled_1.useControlled)({
66
- controlled: valueProp,
67
- default: defaultValue !== null && defaultValue !== void 0 ? defaultValue : null,
68
- name: 'Combobox',
69
- state: 'value',
70
- });
71
- // The initial input text is only read on the first render; compute it once so
72
- // it stays stable, or `useControlled` warns when a later selection changes the
73
- // controlled `value` (and with it the derived label).
74
- const initialInputRef = React.useRef(undefined);
75
- if (initialInputRef.current === undefined) {
76
- initialInputRef.current =
77
- defaultInputValue !== null && defaultInputValue !== void 0 ? defaultInputValue : (mode === 'combobox'
78
- ? ((_b = (_a = normalized.find((item) => item.value === (valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue))) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : '')
79
- : '');
80
- }
81
- const [inputValue, setInputValueState] = (0, useControlled_1.useControlled)({
82
- controlled: inputValueProp,
83
- default: initialInputRef.current,
84
- name: 'Combobox',
85
- state: 'inputValue',
86
- });
87
- const [triggerNode, setTriggerNode] = React.useState(null);
88
- const [update, setUpdate] = React.useState(undefined);
89
- const [inputRef, setInputRef] = React.useState(undefined);
90
- const [triggerWidth, setTriggerWidth] = React.useState(undefined);
91
- const setOpen = (0, useStableCallback_1.useStableCallback)((nextOpen, event) => {
92
- if (nextOpen === open) {
93
- return;
94
- }
95
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen, event);
96
- setOpenState(nextOpen);
97
- });
98
- const setInputValue = (0, useStableCallback_1.useStableCallback)((next) => {
99
- onInputValueChange === null || onInputValueChange === void 0 ? void 0 : onInputValueChange(next);
100
- setInputValueState(next);
101
- // Typing reopens the list so suggestions follow the query.
102
- if (!open && next.length > 0) {
103
- setOpen(true);
104
- }
105
- });
106
- const selectItem = (0, useStableCallback_1.useStableCallback)((item, event) => {
107
- if (mode === 'combobox') {
108
- onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(item.value);
109
- setSelectedValue(item.value);
110
- }
111
- onInputValueChange === null || onInputValueChange === void 0 ? void 0 : onInputValueChange(item.label);
112
- setInputValueState(item.label);
113
- setOpen(false, event);
114
- });
115
- // The label of the currently selected value (combobox mode only).
116
- const selectedLabel = mode === 'combobox'
117
- ? ((_d = (_c = normalized.find((item) => item.value === selectedValue)) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : '')
118
- : '';
119
- // Reflect a controlled `value` that changed from outside into the input text.
120
- // `selectItem` already sets both, so the ref guard makes that a no-op and stops
121
- // this from fighting the user's typing (typing never changes `selectedValue`).
122
- const lastReflectedValueRef = React.useRef(selectedValue);
123
- (0, useIsoLayoutEffect_1.useIsoLayoutEffect)(() => {
124
- if (mode !== 'combobox' || selectedValue === lastReflectedValueRef.current) {
125
- return;
126
- }
127
- lastReflectedValueRef.current = selectedValue;
128
- setInputValueState(selectedLabel);
129
- }, [mode, selectedValue, selectedLabel, setInputValueState]);
130
- const filteredItems = React.useMemo(() => {
131
- // When the input still shows the current selection, the user has not started
132
- // filtering — show every item so a fresh focus reveals the whole list rather
133
- // than the single selected row.
134
- const query = mode === 'combobox' && inputValue === selectedLabel ? '' : inputValue.trim();
135
- if (query.length === 0) {
136
- return normalized;
137
- }
138
- return normalized.filter((item) => filter(item, query));
139
- }, [normalized, inputValue, selectedLabel, mode, filter]);
140
- return React.useMemo(() => ({
141
- mode,
142
- open,
143
- setOpen,
144
- inputValue,
145
- setInputValue,
146
- selectedValue,
147
- selectItem,
148
- filteredItems,
149
- disabled,
150
- openOnFocus,
151
- triggerNode,
152
- setTriggerNode,
153
- update,
154
- setUpdate,
155
- inputRef,
156
- setInputRef,
157
- triggerWidth,
158
- setTriggerWidth,
159
- }), [
160
- mode,
161
- open,
162
- setOpen,
163
- inputValue,
164
- setInputValue,
165
- selectedValue,
166
- selectItem,
167
- filteredItems,
168
- disabled,
169
- openOnFocus,
170
- triggerNode,
171
- update,
172
- inputRef,
173
- triggerWidth,
174
- ]);
175
- }
176
- //# sourceMappingURL=useComboboxRoot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useComboboxRoot.js","sourceRoot":"","sources":["../../../src/combobox/root/useComboboxRoot.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function fastObjectShallowCompare<T extends Record<string, any> | null>(a: T, b: T): boolean;
2
- //# sourceMappingURL=fastObjectShallowCompare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fastObjectShallowCompare.d.ts","sourceRoot":"","sources":["../../src/utils/fastObjectShallowCompare.ts"],"names":[],"mappings":"AAEA,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WA2BxF"}