@bspk/ui 1.0.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 (506) hide show
  1. package/Accordion.d.ts +20 -0
  2. package/Accordion.js +18 -0
  3. package/Accordion.js.map +1 -0
  4. package/Badge.d.ts +33 -0
  5. package/Badge.js +43 -0
  6. package/Badge.js.map +1 -0
  7. package/BannerAlert.d.ts +53 -0
  8. package/BannerAlert.js +133 -0
  9. package/BannerAlert.js.map +1 -0
  10. package/BottomNavigation.d.ts +20 -0
  11. package/BottomNavigation.js +18 -0
  12. package/BottomNavigation.js.map +1 -0
  13. package/BottomSheet.d.ts +20 -0
  14. package/BottomSheet.js +18 -0
  15. package/BottomSheet.js.map +1 -0
  16. package/Breadcrumb.d.ts +20 -0
  17. package/Breadcrumb.js +18 -0
  18. package/Breadcrumb.js.map +1 -0
  19. package/Button.d.ts +66 -0
  20. package/Button.js +254 -0
  21. package/Button.js.map +1 -0
  22. package/ButtonDock.d.ts +20 -0
  23. package/ButtonDock.js +18 -0
  24. package/ButtonDock.js.map +1 -0
  25. package/CODE_OF_CONDUCT.md +137 -0
  26. package/CONTRIBUTING.md +42 -0
  27. package/Card.d.ts +37 -0
  28. package/Card.js +38 -0
  29. package/Card.js.map +1 -0
  30. package/Chart.d.ts +20 -0
  31. package/Chart.js +18 -0
  32. package/Chart.js.map +1 -0
  33. package/Checkbox.d.ts +26 -0
  34. package/Checkbox.js +123 -0
  35. package/Checkbox.js.map +1 -0
  36. package/CheckboxGroup.d.ts +49 -0
  37. package/CheckboxGroup.js +18 -0
  38. package/CheckboxGroup.js.map +1 -0
  39. package/CheckboxOption.d.ts +14 -0
  40. package/CheckboxOption.js +16 -0
  41. package/CheckboxOption.js.map +1 -0
  42. package/Chip.d.ts +50 -0
  43. package/Chip.js +87 -0
  44. package/Chip.js.map +1 -0
  45. package/DatePicker.d.ts +20 -0
  46. package/DatePicker.js +18 -0
  47. package/DatePicker.js.map +1 -0
  48. package/Dialog.d.ts +46 -0
  49. package/Dialog.js +221 -0
  50. package/Dialog.js.map +1 -0
  51. package/Divider.d.ts +44 -0
  52. package/Divider.js +76 -0
  53. package/Divider.js.map +1 -0
  54. package/Drawer.d.ts +20 -0
  55. package/Drawer.js +18 -0
  56. package/Drawer.js.map +1 -0
  57. package/Dropdown.d.ts +50 -0
  58. package/Dropdown.js +153 -0
  59. package/Dropdown.js.map +1 -0
  60. package/DropdownField.d.ts +16 -0
  61. package/DropdownField.js +19 -0
  62. package/DropdownField.js.map +1 -0
  63. package/EmptyState.d.ts +35 -0
  64. package/EmptyState.js +20 -0
  65. package/EmptyState.js.map +1 -0
  66. package/Fab.d.ts +43 -0
  67. package/Fab.js +146 -0
  68. package/Fab.js.map +1 -0
  69. package/FileUpload.d.ts +20 -0
  70. package/FileUpload.js +18 -0
  71. package/FileUpload.js.map +1 -0
  72. package/FormField.d.ts +48 -0
  73. package/FormField.js +39 -0
  74. package/FormField.js.map +1 -0
  75. package/GUIDELINES.md +41 -0
  76. package/Image.d.ts +20 -0
  77. package/Image.js +18 -0
  78. package/Image.js.map +1 -0
  79. package/Img.d.ts +26 -0
  80. package/Img.js +20 -0
  81. package/Img.js.map +1 -0
  82. package/InlineAlert.d.ts +31 -0
  83. package/InlineAlert.js +73 -0
  84. package/InlineAlert.js.map +1 -0
  85. package/LICENSE +395 -0
  86. package/Layout.d.ts +48 -0
  87. package/Layout.js +24 -0
  88. package/Layout.js.map +1 -0
  89. package/Link.d.ts +38 -0
  90. package/Link.js +37 -0
  91. package/Link.js.map +1 -0
  92. package/ListItem.d.ts +68 -0
  93. package/ListItem.js +207 -0
  94. package/ListItem.js.map +1 -0
  95. package/Menu.d.ts +86 -0
  96. package/Menu.js +98 -0
  97. package/Menu.js.map +1 -0
  98. package/MenuButton.d.ts +16 -0
  99. package/MenuButton.js +30 -0
  100. package/MenuButton.js.map +1 -0
  101. package/Modal.d.ts +31 -0
  102. package/Modal.js +53 -0
  103. package/Modal.js.map +1 -0
  104. package/MultiSelection.d.ts +20 -0
  105. package/MultiSelection.js +18 -0
  106. package/MultiSelection.js.map +1 -0
  107. package/NavigationRail.d.ts +20 -0
  108. package/NavigationRail.js +18 -0
  109. package/NavigationRail.js.map +1 -0
  110. package/NumberField.d.ts +17 -0
  111. package/NumberField.js +20 -0
  112. package/NumberField.js.map +1 -0
  113. package/NumberInput.d.ts +34 -0
  114. package/NumberInput.js +188 -0
  115. package/NumberInput.js.map +1 -0
  116. package/OTPInput.d.ts +20 -0
  117. package/OTPInput.js +18 -0
  118. package/OTPInput.js.map +1 -0
  119. package/PageControl.d.ts +20 -0
  120. package/PageControl.js +18 -0
  121. package/PageControl.js.map +1 -0
  122. package/PasswordInput.d.ts +20 -0
  123. package/PasswordInput.js +18 -0
  124. package/PasswordInput.js.map +1 -0
  125. package/PhoneNumberInput.d.ts +20 -0
  126. package/PhoneNumberInput.js +18 -0
  127. package/PhoneNumberInput.js.map +1 -0
  128. package/Popover.d.ts +44 -0
  129. package/Popover.js +152 -0
  130. package/Popover.js.map +1 -0
  131. package/Portal.d.ts +24 -0
  132. package/Portal.js +23 -0
  133. package/Portal.js.map +1 -0
  134. package/Profile.d.ts +41 -0
  135. package/Profile.js +83 -0
  136. package/Profile.js.map +1 -0
  137. package/ProgressBar.d.ts +38 -0
  138. package/ProgressBar.js +64 -0
  139. package/ProgressBar.js.map +1 -0
  140. package/ProgressCircle.d.ts +31 -0
  141. package/ProgressCircle.js +82 -0
  142. package/ProgressCircle.js.map +1 -0
  143. package/ProgressionStepper.d.ts +66 -0
  144. package/ProgressionStepper.js +197 -0
  145. package/ProgressionStepper.js.map +1 -0
  146. package/ProgressionStepperBar.d.ts +31 -0
  147. package/ProgressionStepperBar.js +51 -0
  148. package/ProgressionStepperBar.js.map +1 -0
  149. package/README.md +13 -0
  150. package/Radio.d.ts +17 -0
  151. package/Radio.js +97 -0
  152. package/Radio.js.map +1 -0
  153. package/RadioGroup.d.ts +31 -0
  154. package/RadioGroup.js +18 -0
  155. package/RadioGroup.js.map +1 -0
  156. package/RadioOption.d.ts +14 -0
  157. package/RadioOption.js +16 -0
  158. package/RadioOption.js.map +1 -0
  159. package/Rating.d.ts +16 -0
  160. package/Rating.js +18 -0
  161. package/Rating.js.map +1 -0
  162. package/SearchBar.d.ts +26 -0
  163. package/SearchBar.js +49 -0
  164. package/SearchBar.js.map +1 -0
  165. package/SegmentedControl.d.ts +69 -0
  166. package/SegmentedControl.js +136 -0
  167. package/SegmentedControl.js.map +1 -0
  168. package/Skeleton.d.ts +28 -0
  169. package/Skeleton.js +57 -0
  170. package/Skeleton.js.map +1 -0
  171. package/SliderInput.d.ts +16 -0
  172. package/SliderInput.js +18 -0
  173. package/SliderInput.js.map +1 -0
  174. package/Snackbar.d.ts +16 -0
  175. package/Snackbar.js +18 -0
  176. package/Snackbar.js.map +1 -0
  177. package/StylesProviderAnywhere.d.ts +10 -0
  178. package/StylesProviderAnywhere.js +29 -0
  179. package/StylesProviderAnywhere.js.map +1 -0
  180. package/StylesProviderBetterHomesGardens.d.ts +10 -0
  181. package/StylesProviderBetterHomesGardens.js +29 -0
  182. package/StylesProviderBetterHomesGardens.js.map +1 -0
  183. package/StylesProviderCartus.d.ts +10 -0
  184. package/StylesProviderCartus.js +29 -0
  185. package/StylesProviderCartus.js.map +1 -0
  186. package/StylesProviderCentury21.d.ts +10 -0
  187. package/StylesProviderCentury21.js +29 -0
  188. package/StylesProviderCentury21.js.map +1 -0
  189. package/StylesProviderColdwellBanker.d.ts +10 -0
  190. package/StylesProviderColdwellBanker.js +29 -0
  191. package/StylesProviderColdwellBanker.js.map +1 -0
  192. package/StylesProviderCorcoran.d.ts +10 -0
  193. package/StylesProviderCorcoran.js +29 -0
  194. package/StylesProviderCorcoran.js.map +1 -0
  195. package/StylesProviderDenaliBoss.d.ts +10 -0
  196. package/StylesProviderDenaliBoss.js +29 -0
  197. package/StylesProviderDenaliBoss.js.map +1 -0
  198. package/StylesProviderEra.d.ts +10 -0
  199. package/StylesProviderEra.js +29 -0
  200. package/StylesProviderEra.js.map +1 -0
  201. package/StylesProviderSothebys.d.ts +10 -0
  202. package/StylesProviderSothebys.js +29 -0
  203. package/StylesProviderSothebys.js.map +1 -0
  204. package/Switch.d.ts +33 -0
  205. package/Switch.js +85 -0
  206. package/Switch.js.map +1 -0
  207. package/SwitchGroup.d.ts +35 -0
  208. package/SwitchGroup.js +18 -0
  209. package/SwitchGroup.js.map +1 -0
  210. package/SwitchOption.d.ts +14 -0
  211. package/SwitchOption.js +16 -0
  212. package/SwitchOption.js.map +1 -0
  213. package/TabGroup.d.ts +73 -0
  214. package/TabGroup.js +119 -0
  215. package/TabGroup.js.map +1 -0
  216. package/Table.d.ts +45 -0
  217. package/Table.js +66 -0
  218. package/Table.js.map +1 -0
  219. package/Tag.d.ts +56 -0
  220. package/Tag.js +77 -0
  221. package/Tag.js.map +1 -0
  222. package/TextField.d.ts +16 -0
  223. package/TextField.js +19 -0
  224. package/TextField.js.map +1 -0
  225. package/TextInput.d.ts +45 -0
  226. package/TextInput.js +172 -0
  227. package/TextInput.js.map +1 -0
  228. package/Textarea.d.ts +63 -0
  229. package/Textarea.js +113 -0
  230. package/Textarea.js.map +1 -0
  231. package/TextareaField.d.ts +16 -0
  232. package/TextareaField.js +26 -0
  233. package/TextareaField.js.map +1 -0
  234. package/TimePicker.d.ts +16 -0
  235. package/TimePicker.js +18 -0
  236. package/TimePicker.js.map +1 -0
  237. package/ToggleOption.d.ts +27 -0
  238. package/ToggleOption.js +91 -0
  239. package/ToggleOption.js.map +1 -0
  240. package/Tooltip.d.ts +39 -0
  241. package/Tooltip.js +104 -0
  242. package/Tooltip.js.map +1 -0
  243. package/TopNavigation.d.ts +16 -0
  244. package/TopNavigation.js +18 -0
  245. package/TopNavigation.js.map +1 -0
  246. package/Txt.d.ts +38 -0
  247. package/Txt.js +21 -0
  248. package/Txt.js.map +1 -0
  249. package/hooks/useCheckboxGroupState.d.ts +37 -0
  250. package/hooks/useCheckboxGroupState.js +61 -0
  251. package/hooks/useCheckboxGroupState.js.map +1 -0
  252. package/hooks/useCheckboxState.d.ts +23 -0
  253. package/hooks/useCheckboxState.js +40 -0
  254. package/hooks/useCheckboxState.js.map +1 -0
  255. package/hooks/useFloating.d.ts +38 -0
  256. package/hooks/useFloating.js +156 -0
  257. package/hooks/useFloating.js.map +1 -0
  258. package/hooks/useFloatingMenu.d.ts +35 -0
  259. package/hooks/useFloatingMenu.js +71 -0
  260. package/hooks/useFloatingMenu.js.map +1 -0
  261. package/hooks/useId.d.ts +8 -0
  262. package/hooks/useId.js +16 -0
  263. package/hooks/useId.js.map +1 -0
  264. package/hooks/useKeyboardNavigation.d.ts +35 -0
  265. package/hooks/useKeyboardNavigation.js +79 -0
  266. package/hooks/useKeyboardNavigation.js.map +1 -0
  267. package/hooks/useLongPress.d.ts +11 -0
  268. package/hooks/useLongPress.js +49 -0
  269. package/hooks/useLongPress.js.map +1 -0
  270. package/hooks/useModalState.d.ts +22 -0
  271. package/hooks/useModalState.js +37 -0
  272. package/hooks/useModalState.js.map +1 -0
  273. package/hooks/useNavOptions.d.ts +28 -0
  274. package/hooks/useNavOptions.js +46 -0
  275. package/hooks/useNavOptions.js.map +1 -0
  276. package/hooks/useOutsideClick.d.ts +31 -0
  277. package/hooks/useOutsideClick.js +50 -0
  278. package/hooks/useOutsideClick.js.map +1 -0
  279. package/hooks/useRadioState.d.ts +23 -0
  280. package/hooks/useRadioState.js +38 -0
  281. package/hooks/useRadioState.js.map +1 -0
  282. package/hooks/useSwitchGroupState.d.ts +37 -0
  283. package/hooks/useSwitchGroupState.js +60 -0
  284. package/hooks/useSwitchGroupState.js.map +1 -0
  285. package/hooks/useTimeout.d.ts +26 -0
  286. package/hooks/useTimeout.js +45 -0
  287. package/hooks/useTimeout.js.map +1 -0
  288. package/hooks/useValidChildren.d.ts +6 -0
  289. package/hooks/useValidChildren.js +33 -0
  290. package/hooks/useValidChildren.js.map +1 -0
  291. package/index.d.ts +125 -0
  292. package/index.js +20 -0
  293. package/index.js.map +1 -0
  294. package/meta.d.ts +44 -0
  295. package/meta.js +5789 -0
  296. package/meta.js.map +1 -0
  297. package/package.json +73 -0
  298. package/src/Accordion.tsx +33 -0
  299. package/src/Badge.tsx +75 -0
  300. package/src/BannerAlert.tsx +211 -0
  301. package/src/BottomNavigation.tsx +33 -0
  302. package/src/BottomSheet.tsx +33 -0
  303. package/src/Breadcrumb.tsx +33 -0
  304. package/src/Button.tsx +358 -0
  305. package/src/ButtonDock.tsx +33 -0
  306. package/src/Card.tsx +66 -0
  307. package/src/Chart.tsx +33 -0
  308. package/src/Checkbox.tsx +174 -0
  309. package/src/CheckboxGroup.tsx +95 -0
  310. package/src/CheckboxOption.tsx +27 -0
  311. package/src/Chip.tsx +155 -0
  312. package/src/DatePicker.tsx +33 -0
  313. package/src/Dialog.tsx +304 -0
  314. package/src/Divider.tsx +129 -0
  315. package/src/Drawer.tsx +33 -0
  316. package/src/Dropdown.tsx +251 -0
  317. package/src/DropdownField.tsx +57 -0
  318. package/src/EmptyState.tsx +73 -0
  319. package/src/Fab.tsx +222 -0
  320. package/src/FileUpload.tsx +33 -0
  321. package/src/FormField.tsx +107 -0
  322. package/src/Image.tsx +33 -0
  323. package/src/Img.tsx +39 -0
  324. package/src/InlineAlert.tsx +119 -0
  325. package/src/Layout.tsx +82 -0
  326. package/src/Link.tsx +82 -0
  327. package/src/ListItem.tsx +316 -0
  328. package/src/Menu.tsx +263 -0
  329. package/src/MenuButton.tsx +45 -0
  330. package/src/Modal.tsx +104 -0
  331. package/src/MultiSelection.tsx +33 -0
  332. package/src/NavigationRail.tsx +33 -0
  333. package/src/NumberField.tsx +47 -0
  334. package/src/NumberInput.tsx +282 -0
  335. package/src/OTPInput.tsx +33 -0
  336. package/src/PageControl.tsx +33 -0
  337. package/src/PasswordInput.tsx +33 -0
  338. package/src/PhoneNumberInput.tsx +33 -0
  339. package/src/Popover.tsx +237 -0
  340. package/src/Portal.tsx +36 -0
  341. package/src/Profile.tsx +140 -0
  342. package/src/ProgressBar.tsx +110 -0
  343. package/src/ProgressCircle.tsx +153 -0
  344. package/src/ProgressionStepper.tsx +294 -0
  345. package/src/ProgressionStepperBar.tsx +95 -0
  346. package/src/Radio.tsx +119 -0
  347. package/src/RadioGroup.tsx +62 -0
  348. package/src/RadioOption.tsx +24 -0
  349. package/src/Rating.tsx +29 -0
  350. package/src/SearchBar.tsx +121 -0
  351. package/src/SegmentedControl.tsx +233 -0
  352. package/src/Skeleton.tsx +90 -0
  353. package/src/SliderInput.tsx +29 -0
  354. package/src/Snackbar.tsx +29 -0
  355. package/src/StylesProviderAnywhere.tsx +31 -0
  356. package/src/StylesProviderBetterHomesGardens.tsx +31 -0
  357. package/src/StylesProviderCartus.tsx +31 -0
  358. package/src/StylesProviderCentury21.tsx +31 -0
  359. package/src/StylesProviderColdwellBanker.tsx +31 -0
  360. package/src/StylesProviderCorcoran.tsx +31 -0
  361. package/src/StylesProviderDenaliBoss.tsx +31 -0
  362. package/src/StylesProviderEra.tsx +31 -0
  363. package/src/StylesProviderSothebys.tsx +31 -0
  364. package/src/Switch.tsx +122 -0
  365. package/src/SwitchGroup.tsx +60 -0
  366. package/src/SwitchOption.tsx +24 -0
  367. package/src/TabGroup.tsx +219 -0
  368. package/src/Table.tsx +126 -0
  369. package/src/Tag.tsx +149 -0
  370. package/src/TextField.tsx +61 -0
  371. package/src/TextInput.tsx +265 -0
  372. package/src/Textarea.tsx +205 -0
  373. package/src/TextareaField.tsx +67 -0
  374. package/src/TimePicker.tsx +29 -0
  375. package/src/ToggleOption.tsx +117 -0
  376. package/src/Tooltip.tsx +170 -0
  377. package/src/TopNavigation.tsx +29 -0
  378. package/src/Txt.tsx +69 -0
  379. package/src/hooks/useCheckboxGroupState.ts +79 -0
  380. package/src/hooks/useCheckboxState.ts +48 -0
  381. package/src/hooks/useFloating.ts +202 -0
  382. package/src/hooks/useFloatingMenu.ts +110 -0
  383. package/src/hooks/useId.ts +14 -0
  384. package/src/hooks/useKeyboardNavigation.ts +98 -0
  385. package/src/hooks/useLongPress.ts +53 -0
  386. package/src/hooks/useModalState.ts +37 -0
  387. package/src/hooks/useNavOptions.ts +76 -0
  388. package/src/hooks/useOutsideClick.ts +51 -0
  389. package/src/hooks/useRadioState.ts +42 -0
  390. package/src/hooks/useSwitchGroupState.ts +75 -0
  391. package/src/hooks/useTimeout.ts +45 -0
  392. package/src/hooks/useValidChildren.ts +54 -0
  393. package/src/index.ts +160 -0
  394. package/src/meta.ts +6238 -0
  395. package/src/package.json +3 -0
  396. package/src/styles/anywhere.css +1693 -0
  397. package/src/styles/anywhere.ts +1694 -0
  398. package/src/styles/base.css +160 -0
  399. package/src/styles/base.ts +161 -0
  400. package/src/styles/better-homes-gardens.css +1693 -0
  401. package/src/styles/better-homes-gardens.ts +1694 -0
  402. package/src/styles/cartus.css +1691 -0
  403. package/src/styles/cartus.ts +1692 -0
  404. package/src/styles/century-21.css +1689 -0
  405. package/src/styles/century-21.ts +1690 -0
  406. package/src/styles/coldwell-banker.css +1691 -0
  407. package/src/styles/coldwell-banker.ts +1692 -0
  408. package/src/styles/corcoran.css +1685 -0
  409. package/src/styles/corcoran.ts +1686 -0
  410. package/src/styles/denali-boss.css +1681 -0
  411. package/src/styles/denali-boss.ts +1682 -0
  412. package/src/styles/era.css +1685 -0
  413. package/src/styles/era.ts +1686 -0
  414. package/src/styles/sothebys.css +1677 -0
  415. package/src/styles/sothebys.ts +1678 -0
  416. package/src/utils/children.ts +80 -0
  417. package/src/utils/colorVariants.ts +74 -0
  418. package/src/utils/errors.tsx +104 -0
  419. package/src/utils/getValidNode.ts +7 -0
  420. package/src/utils/keyboard.ts +382 -0
  421. package/src/utils/placeholder.test.ts +7 -0
  422. package/src/utils/ref.ts +11 -0
  423. package/src/utils/scrollElementIntoView.ts +29 -0
  424. package/src/utils/srOnly.ts +14 -0
  425. package/src/utils/tryIntPsrse.ts +7 -0
  426. package/src/utils/txtVariants.ts +53 -0
  427. package/styles/anywhere.css +1693 -0
  428. package/styles/anywhere.d.ts +2 -0
  429. package/styles/anywhere.js +1697 -0
  430. package/styles/anywhere.js.map +1 -0
  431. package/styles/anywhere.ts +1694 -0
  432. package/styles/base.css +160 -0
  433. package/styles/base.d.ts +2 -0
  434. package/styles/base.js +164 -0
  435. package/styles/base.js.map +1 -0
  436. package/styles/base.ts +161 -0
  437. package/styles/better-homes-gardens.css +1693 -0
  438. package/styles/better-homes-gardens.d.ts +2 -0
  439. package/styles/better-homes-gardens.js +1697 -0
  440. package/styles/better-homes-gardens.js.map +1 -0
  441. package/styles/better-homes-gardens.ts +1694 -0
  442. package/styles/cartus.css +1691 -0
  443. package/styles/cartus.d.ts +2 -0
  444. package/styles/cartus.js +1695 -0
  445. package/styles/cartus.js.map +1 -0
  446. package/styles/cartus.ts +1692 -0
  447. package/styles/century-21.css +1689 -0
  448. package/styles/century-21.d.ts +2 -0
  449. package/styles/century-21.js +1693 -0
  450. package/styles/century-21.js.map +1 -0
  451. package/styles/century-21.ts +1690 -0
  452. package/styles/coldwell-banker.css +1691 -0
  453. package/styles/coldwell-banker.d.ts +2 -0
  454. package/styles/coldwell-banker.js +1695 -0
  455. package/styles/coldwell-banker.js.map +1 -0
  456. package/styles/coldwell-banker.ts +1692 -0
  457. package/styles/corcoran.css +1685 -0
  458. package/styles/corcoran.d.ts +2 -0
  459. package/styles/corcoran.js +1689 -0
  460. package/styles/corcoran.js.map +1 -0
  461. package/styles/corcoran.ts +1686 -0
  462. package/styles/denali-boss.css +1681 -0
  463. package/styles/denali-boss.d.ts +2 -0
  464. package/styles/denali-boss.js +1685 -0
  465. package/styles/denali-boss.js.map +1 -0
  466. package/styles/denali-boss.ts +1682 -0
  467. package/styles/era.css +1685 -0
  468. package/styles/era.d.ts +2 -0
  469. package/styles/era.js +1689 -0
  470. package/styles/era.js.map +1 -0
  471. package/styles/era.ts +1686 -0
  472. package/styles/sothebys.css +1677 -0
  473. package/styles/sothebys.d.ts +2 -0
  474. package/styles/sothebys.js +1681 -0
  475. package/styles/sothebys.js.map +1 -0
  476. package/styles/sothebys.ts +1678 -0
  477. package/utils/children.d.ts +29 -0
  478. package/utils/children.js +70 -0
  479. package/utils/children.js.map +1 -0
  480. package/utils/colorVariants.d.ts +5 -0
  481. package/utils/colorVariants.js +61 -0
  482. package/utils/colorVariants.js.map +1 -0
  483. package/utils/errors.d.ts +36 -0
  484. package/utils/errors.js +65 -0
  485. package/utils/errors.js.map +1 -0
  486. package/utils/getValidNode.d.ts +2 -0
  487. package/utils/getValidNode.js +9 -0
  488. package/utils/getValidNode.js.map +1 -0
  489. package/utils/keyboard.d.ts +4 -0
  490. package/utils/keyboard.js +140 -0
  491. package/utils/keyboard.js.map +1 -0
  492. package/utils/ref.d.ts +5 -0
  493. package/utils/ref.js +10 -0
  494. package/utils/ref.js.map +1 -0
  495. package/utils/scrollElementIntoView.d.ts +8 -0
  496. package/utils/scrollElementIntoView.js +30 -0
  497. package/utils/scrollElementIntoView.js.map +1 -0
  498. package/utils/srOnly.d.ts +14 -0
  499. package/utils/srOnly.js +15 -0
  500. package/utils/srOnly.js.map +1 -0
  501. package/utils/tryIntPsrse.d.ts +2 -0
  502. package/utils/tryIntPsrse.js +10 -0
  503. package/utils/tryIntPsrse.js.map +1 -0
  504. package/utils/txtVariants.d.ts +2 -0
  505. package/utils/txtVariants.js +30 -0
  506. package/utils/txtVariants.js.map +1 -0
@@ -0,0 +1,35 @@
1
+ import { AriaAttributes } from 'react';
2
+ import { CommonProps } from '..';
3
+ import { Placement } from './useFloating';
4
+ export type UseFloatingMenuProps = {
5
+ placement: Placement;
6
+ triggerProps?: CommonProps<'disabled' | 'invalid' | 'readOnly'>;
7
+ };
8
+ export type UseFloatingMenuReturn = {
9
+ menuProps: {
10
+ activeIndex: number;
11
+ 'data-placement': Placement | undefined;
12
+ id: string;
13
+ innerRef: (node: HTMLElement | null) => void;
14
+ role: 'listbox';
15
+ style: React.CSSProperties;
16
+ tabIndex: number;
17
+ };
18
+ triggerProps: {
19
+ 'aria-activedescendant': string | undefined;
20
+ 'aria-controls': string;
21
+ 'aria-expanded': boolean;
22
+ 'aria-haspopup': AriaAttributes['aria-haspopup'];
23
+ 'aria-invalid': boolean | undefined;
24
+ 'aria-owns': string;
25
+ 'aria-readonly': boolean | undefined;
26
+ role: 'combobox';
27
+ tabIndex: number;
28
+ ref: (node: HTMLElement | null) => void;
29
+ onClick: (event: React.MouseEvent) => void;
30
+ onKeyDownCapture: (event: React.KeyboardEvent) => boolean;
31
+ };
32
+ closeMenu: () => void;
33
+ };
34
+ export declare function useFloatingMenu({ placement, triggerProps }: UseFloatingMenuProps): UseFloatingMenuReturn;
35
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,71 @@
1
+ import { useId, useState } from 'react';
2
+ import { EVENT_KEY } from '../utils/keyboard.js';
3
+ import { useFloating } from './useFloating.js';
4
+ import { useKeyboardNavigation } from './useKeyboardNavigation.js';
5
+ import { useOutsideClick } from './useOutsideClick.js';
6
+
7
+ function useFloatingMenu({ placement, triggerProps }) {
8
+ const menuId = useId();
9
+ const [show, setShow] = useState(false);
10
+ const closeMenu = () => setShow(false);
11
+ const openMenu = () => setShow(true);
12
+ const { floatingStyles, middlewareData, elements } = useFloating({
13
+ placement,
14
+ strategy: 'fixed',
15
+ offsetOptions: 4,
16
+ refWidth: true,
17
+ hide: !show,
18
+ });
19
+ const { handleKeyNavigation, selectedIndex: activeIndex, selectedId } = useKeyboardNavigation(elements.floating);
20
+ useOutsideClick([elements.floating, elements.trigger], (event) => {
21
+ event?.stopPropagation();
22
+ if (!show)
23
+ return;
24
+ closeMenu();
25
+ });
26
+ return {
27
+ menuProps: {
28
+ activeIndex,
29
+ 'data-placement': middlewareData?.offset?.placement,
30
+ id: menuId,
31
+ innerRef: (node) => {
32
+ elements.setFloating(node);
33
+ },
34
+ role: 'listbox',
35
+ style: floatingStyles,
36
+ tabIndex: -1,
37
+ },
38
+ triggerProps: {
39
+ 'aria-activedescendant': selectedId || undefined,
40
+ 'aria-controls': menuId,
41
+ 'aria-expanded': show,
42
+ 'aria-haspopup': 'listbox',
43
+ 'aria-invalid': triggerProps?.invalid || undefined,
44
+ 'aria-owns': menuId,
45
+ 'aria-readonly': triggerProps?.readOnly || undefined,
46
+ role: 'combobox',
47
+ tabIndex: 0,
48
+ ref: (node) => elements.setTrigger(node),
49
+ onClick: () => {
50
+ setShow((prev) => !prev);
51
+ },
52
+ /**
53
+ * @param {React.KeyboardEvent} event
54
+ * @returns {boolean} True if event was handled internally
55
+ */
56
+ onKeyDownCapture: (event) => {
57
+ if (event.key === EVENT_KEY.Tab || event.key === EVENT_KEY.Escape) {
58
+ closeMenu();
59
+ return true;
60
+ }
61
+ openMenu();
62
+ return handleKeyNavigation?.(event.nativeEvent);
63
+ },
64
+ },
65
+ closeMenu,
66
+ };
67
+ }
68
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
69
+
70
+ export { useFloatingMenu };
71
+ //# sourceMappingURL=useFloatingMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloatingMenu.js","sources":["../src/hooks/useFloatingMenu.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;SAyCgB,eAAe,CAAC,EAAE,SAAS,EAAE,YAAY,EAAwB,EAAA;AAC7E,IAAA,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IAEvB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;QAC7D,SAAS;AACT,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,CAAC,IAAI;AACd,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEjH,IAAA,eAAe,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAI;QAC7D,KAAK,EAAE,eAAe,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;AAClB,QAAA,SAAS,EAAE,CAAC;AAChB,KAAC,CAAC,CAAC;IAEH,OAAO;AACH,QAAA,SAAS,EAAE;YACP,WAAW;AACX,YAAA,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS;AACnD,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,QAAQ,EAAE,CAAC,IAAwB,KAAI;AACnC,gBAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC9B;AACD,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,cAAc;YACrB,QAAQ,EAAE,CAAC,CAAC;AACf,SAAA;AACD,QAAA,YAAY,EAAE;YACV,uBAAuB,EAAE,UAAU,IAAI,SAAS;AAChD,YAAA,eAAe,EAAE,MAAM;AACvB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,eAAe,EAAE,SAA4C;AAC7D,YAAA,cAAc,EAAE,YAAY,EAAE,OAAO,IAAI,SAAS;AAClD,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,eAAe,EAAE,YAAY,EAAE,QAAQ,IAAI,SAAS;AACpD,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,QAAQ,EAAE,CAAC;YACX,GAAG,EAAE,CAAC,IAAwB,KAAK,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;YAC5D,OAAO,EAAE,MAAK;gBACV,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5B;AACD;;;AAGG;AACH,YAAA,gBAAgB,EAAE,CAAC,KAA0B,KAAa;AACtD,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,MAAM,EAAE;AAC/D,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,OAAO,IAAI,CAAC;iBACf;AAED,gBAAA,QAAQ,EAAE,CAAC;AAEX,gBAAA,OAAO,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;aACnD;AACJ,SAAA;QACD,SAAS;KACZ,CAAC;AACN,CAAC;AAED;;;;"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A utility hook that generates a unique id for an element. If a default id is provided, it will use that instead.
3
+ *
4
+ * @param {string | undefined | null} defaultId
5
+ * @returns {string}
6
+ */
7
+ export declare function useId(defaultId?: string | null): string;
8
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
package/hooks/useId.js ADDED
@@ -0,0 +1,16 @@
1
+ import { useId as useId$1 } from 'react';
2
+
3
+ /**
4
+ * A utility hook that generates a unique id for an element. If a default id is provided, it will use that instead.
5
+ *
6
+ * @param {string | undefined | null} defaultId
7
+ * @returns {string}
8
+ */
9
+ function useId(defaultId) {
10
+ const generatedId = useId$1();
11
+ return defaultId || generatedId;
12
+ }
13
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
14
+
15
+ export { useId };
16
+ //# sourceMappingURL=useId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId.js","sources":["../src/hooks/useId.ts"],"sourcesContent":[null],"names":["useIdReact"],"mappings":";;AAEA;;;;;AAKG;AACG,SAAU,KAAK,CAAC,SAAyB,EAAA;AAC3C,IAAA,MAAM,WAAW,GAAGA,OAAU,EAAE,CAAC;IACjC,OAAO,SAAS,IAAI,WAAW,CAAC;AACpC,CAAC;AAED;;;;"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * This hook provides keyboard navigation for a list of elements. Used inside the Dropdown component.
3
+ *
4
+ * @example
5
+ * import { useRef } from 'react';
6
+ * import { useKeyboardNavigation } from '@bspk/ui/hooks/useKeyboardNavigation';
7
+ *
8
+ * export function Example() {
9
+ * const containerRef = useRef<HTMLDivElement>(null);
10
+ * const { selectedIndex, setSelectedIndex, handleKeyNavigation } = useKeyboardNavigation(containerRef.current, () => true);
11
+ *
12
+ * return (
13
+ * <div ref={containerRef} onKeyDown={handleKeyNavigation} tabIndex={0}>
14
+ * {items.map((item, index) => (
15
+ * <div key={index} data-selected={selectedIndex === index}>
16
+ * {item}
17
+ * </div>
18
+ * ))}
19
+ * </div>
20
+ * );
21
+ * }
22
+ *
23
+ * @param containerElement - The container element that holds the list of elements.
24
+ * @param onNavigate - Fires when the user navigates through the list with Arrow keys. If the function returns false,
25
+ * the navigation will be prevented. For example, this is useful when you want to prevent navigation when a dropdown
26
+ * is closed.
27
+ * @returns An object containing the selectedIndex, setSelectedIndex, and handleKeyNavigation function.
28
+ */
29
+ export declare function useKeyboardNavigation(containerElement?: HTMLElement | null): {
30
+ handleKeyNavigation: (event: KeyboardEvent) => boolean;
31
+ selectedIndex: number;
32
+ selectedId: string | undefined;
33
+ setSelectedIndex: (index: number) => void;
34
+ };
35
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,79 @@
1
+ import { useState } from 'react';
2
+ import { EVENT_KEY } from '../utils/keyboard.js';
3
+ import { scrollElementIntoView } from '../utils/scrollElementIntoView.js';
4
+
5
+ /**
6
+ * This hook provides keyboard navigation for a list of elements. Used inside the Dropdown component.
7
+ *
8
+ * @example
9
+ * import { useRef } from 'react';
10
+ * import { useKeyboardNavigation } from '@bspk/ui/hooks/useKeyboardNavigation';
11
+ *
12
+ * export function Example() {
13
+ * const containerRef = useRef<HTMLDivElement>(null);
14
+ * const { selectedIndex, setSelectedIndex, handleKeyNavigation } = useKeyboardNavigation(containerRef.current, () => true);
15
+ *
16
+ * return (
17
+ * <div ref={containerRef} onKeyDown={handleKeyNavigation} tabIndex={0}>
18
+ * {items.map((item, index) => (
19
+ * <div key={index} data-selected={selectedIndex === index}>
20
+ * {item}
21
+ * </div>
22
+ * ))}
23
+ * </div>
24
+ * );
25
+ * }
26
+ *
27
+ * @param containerElement - The container element that holds the list of elements.
28
+ * @param onNavigate - Fires when the user navigates through the list with Arrow keys. If the function returns false,
29
+ * the navigation will be prevented. For example, this is useful when you want to prevent navigation when a dropdown
30
+ * is closed.
31
+ * @returns An object containing the selectedIndex, setSelectedIndex, and handleKeyNavigation function.
32
+ */
33
+ function useKeyboardNavigation(containerElement) {
34
+ const [selectedIndex, setSelectedIndex] = useState(-1);
35
+ if (!containerElement)
36
+ return {
37
+ handleKeyNavigation: () => false,
38
+ selectedIndex,
39
+ setSelectedIndex: () => { },
40
+ selectedId: undefined,
41
+ };
42
+ const handleArrowKeyNavigation = (event) => {
43
+ if (event.key !== EVENT_KEY.Enter && !event.key.startsWith('Arrow'))
44
+ return false;
45
+ event.preventDefault();
46
+ if (!containerElement || !containerElement.children.length)
47
+ return false;
48
+ const itemElements = Array.from(containerElement?.children);
49
+ if (event.key === EVENT_KEY.Enter && selectedIndex !== -1) {
50
+ itemElements[selectedIndex].click();
51
+ return true;
52
+ }
53
+ let next = 0;
54
+ if (event.key === EVENT_KEY.ArrowUp || event.key === EVENT_KEY.ArrowLeft)
55
+ next = selectedIndex - 1;
56
+ if (event.key === EVENT_KEY.ArrowDown || event.key === EVENT_KEY.ArrowRight)
57
+ next = selectedIndex + 1;
58
+ if (next < 0)
59
+ next = itemElements.length - 1;
60
+ if (next >= itemElements.length)
61
+ next = 0;
62
+ itemElements.forEach((el, index) => {
63
+ el.dataset.selected = index === next ? 'true' : undefined;
64
+ });
65
+ scrollElementIntoView(itemElements[next], containerElement);
66
+ setSelectedIndex(next);
67
+ return true;
68
+ };
69
+ return {
70
+ handleKeyNavigation: handleArrowKeyNavigation,
71
+ selectedIndex,
72
+ selectedId: selectedIndex === -1 ? undefined : containerElement.children[selectedIndex].id,
73
+ setSelectedIndex: setSelectedIndex,
74
+ };
75
+ }
76
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
77
+
78
+ export { useKeyboardNavigation };
79
+ //# sourceMappingURL=useKeyboardNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboardNavigation.js","sources":["../src/hooks/useKeyboardNavigation.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACG,SAAU,qBAAqB,CACjC,gBAAqC,EAAA;IAerC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,IAAA,IAAI,CAAC,gBAAgB;QACjB,OAAO;AACH,YAAA,mBAAmB,EAAE,MAAM,KAAK;YAChC,aAAa;AACb,YAAA,gBAAgB,EAAE,MAAK,GAAG;AAC1B,YAAA,UAAU,EAAE,SAAS;SACxB,CAAC;AAEN,IAAA,MAAM,wBAAwB,GAAG,CAAC,KAAoB,KAAa;AAC/D,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QAElF,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM;AAAE,YAAA,OAAO,KAAK,CAAC;QAEzE,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAkB,CAAC;AAE7E,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,KAAK,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACvD,YAAA,YAAY,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,SAAS;AAAE,YAAA,IAAI,GAAG,aAAa,GAAG,CAAC,CAAC;AACnG,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,UAAU;AAAE,YAAA,IAAI,GAAG,aAAa,GAAG,CAAC,CAAC;QAEtG,IAAI,IAAI,GAAG,CAAC;AAAE,YAAA,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,QAAA,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM;YAAE,IAAI,GAAG,CAAC,CAAC;QAE1C,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,KAAI;AAC/B,YAAA,EAAE,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAC9D,SAAC,CAAC,CAAC;QAEH,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC5D,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC;IAEF,OAAO;AACH,QAAA,mBAAmB,EAAE,wBAAwB;QAC7C,aAAa;AACb,QAAA,UAAU,EAAE,aAAa,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE;AAC1F,QAAA,gBAAgB,EAAE,gBAAgB;KACrC,CAAC;AACN,CAAC;AAED;;;;"}
@@ -0,0 +1,11 @@
1
+ export declare function useLongPress(callback: (pressCount: number) => void, ms?: number, isDisabled?: boolean): {
2
+ start: () => void;
3
+ stop: () => void;
4
+ buttonProps: import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
5
+ timeout: {
6
+ clear: () => void;
7
+ set: (callback: () => void, durationMs: number) => void;
8
+ ref: import("react").MutableRefObject<NodeJS.Timeout | null>;
9
+ };
10
+ };
11
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,49 @@
1
+ import { useRef } from 'react';
2
+ import { useTimeout } from './useTimeout.js';
3
+
4
+ function useLongPress(callback, ms = 2000, isDisabled = false) {
5
+ const longPressTimeout = useTimeout();
6
+ const longPressCount = useRef(1);
7
+ const duration = useRef(ms);
8
+ const stop = () => {
9
+ longPressCount.current = 1;
10
+ duration.current = ms;
11
+ longPressTimeout.clear();
12
+ };
13
+ const start = () => {
14
+ duration.current /= 2;
15
+ longPressTimeout.set(() => {
16
+ callback(longPressCount.current);
17
+ longPressCount.current += 1;
18
+ start();
19
+ },
20
+ //
21
+ Math.max(duration.current, 100));
22
+ };
23
+ const buttonProps = {
24
+ onMouseDown: (event) => {
25
+ event.preventDefault();
26
+ if (isDisabled)
27
+ return;
28
+ callback(longPressCount.current);
29
+ start();
30
+ },
31
+ onMouseMove: (event) => {
32
+ event.preventDefault();
33
+ if (event.movementX > 100 || event.movementY > 100)
34
+ stop();
35
+ },
36
+ onMouseLeave: () => stop(),
37
+ onMouseUp: () => stop(),
38
+ };
39
+ return {
40
+ start,
41
+ stop,
42
+ buttonProps,
43
+ timeout: longPressTimeout,
44
+ };
45
+ }
46
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
47
+
48
+ export { useLongPress };
49
+ //# sourceMappingURL=useLongPress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLongPress.js","sources":["../src/hooks/useLongPress.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIM,SAAU,YAAY,CAAC,QAAsC,EAAE,KAAa,IAAI,EAAE,UAAU,GAAG,KAAK,EAAA;AACtG,IAAA,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;AACtC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACjC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM,IAAI,GAAG,MAAK;AACd,QAAA,cAAc,CAAC,OAAO,GAAG,CAAC,CAAC;AAC3B,QAAA,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC7B,KAAC,CAAC;IAEF,MAAM,KAAK,GAAG,MAAK;AACf,QAAA,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AACtB,QAAA,gBAAgB,CAAC,GAAG,CAChB,MAAK;AACD,YAAA,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAC5B,YAAA,KAAK,EAAE,CAAC;SACX;;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAClC,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,MAAM,WAAW,GAA6B;AAC1C,QAAA,WAAW,EAAE,CAAC,KAAK,KAAI;YACnB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,UAAU;gBAAE,OAAO;AAEvB,YAAA,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,KAAK,EAAE,CAAC;SACX;AACD,QAAA,WAAW,EAAE,CAAC,KAAK,KAAI;YACnB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG,IAAI,KAAK,CAAC,SAAS,GAAG,GAAG;AAAE,gBAAA,IAAI,EAAE,CAAC;SAC9D;AACD,QAAA,YAAY,EAAE,MAAM,IAAI,EAAE;AAC1B,QAAA,SAAS,EAAE,MAAM,IAAI,EAAE;KAC1B,CAAC;IAEF,OAAO;QACH,KAAK;QACL,IAAI;QACJ,WAAW;AACX,QAAA,OAAO,EAAE,gBAAgB;KAC5B,CAAC;AACN,CAAC;AAED;;;;"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A hook to manage the state of a modal.
3
+ *
4
+ * @example
5
+ * import { Modal } from '@bspk/ui/Modal';
6
+ * import { useModalState } from '@bspk/ui/hooks/useModalState';
7
+ *
8
+ * export function Example() {
9
+ * const modalProps = useModalState(false);
10
+ * return <Modal {...modalProps}>...</Modal>
11
+ * }
12
+ *
13
+ * @param parentValue - The value of the parent state.
14
+ * @param setParentState - A function to set the parent state.
15
+ * @returns An object with the open state and the `onClose` and `onOpen` callbacks.
16
+ */
17
+ export declare function useModalState(parentValue?: boolean, setParentState?: (next: boolean) => void): {
18
+ open: boolean;
19
+ onClose: () => void;
20
+ onOpen: () => void;
21
+ };
22
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,37 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ /**
4
+ * A hook to manage the state of a modal.
5
+ *
6
+ * @example
7
+ * import { Modal } from '@bspk/ui/Modal';
8
+ * import { useModalState } from '@bspk/ui/hooks/useModalState';
9
+ *
10
+ * export function Example() {
11
+ * const modalProps = useModalState(false);
12
+ * return <Modal {...modalProps}>...</Modal>
13
+ * }
14
+ *
15
+ * @param parentValue - The value of the parent state.
16
+ * @param setParentState - A function to set the parent state.
17
+ * @returns An object with the open state and the `onClose` and `onOpen` callbacks.
18
+ */
19
+ function useModalState(parentValue = false, setParentState) {
20
+ const [open, setOpen] = useState(parentValue);
21
+ useEffect(() => setOpen(parentValue), [parentValue]);
22
+ return {
23
+ open,
24
+ onClose: () => {
25
+ setOpen(false);
26
+ setParentState?.(false);
27
+ },
28
+ onOpen: () => {
29
+ setOpen(true);
30
+ setParentState?.(true);
31
+ },
32
+ };
33
+ }
34
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
35
+
36
+ export { useModalState };
37
+ //# sourceMappingURL=useModalState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModalState.js","sources":["../src/hooks/useModalState.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;AAeG;SACa,aAAa,CAAC,WAAuB,GAAA,KAAK,EAAE,cAAwC,EAAA;IAChG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;AAE9C,IAAA,SAAS,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAErD,OAAO;QACH,IAAI;QACJ,OAAO,EAAE,MAAK;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;AACf,YAAA,cAAc,GAAG,KAAK,CAAC,CAAC;SAC3B;QACD,MAAM,EAAE,MAAK;YACT,OAAO,CAAC,IAAI,CAAC,CAAC;AACd,YAAA,cAAc,GAAG,IAAI,CAAC,CAAC;SAC1B;KACJ,CAAC;AACN,CAAC;AAED;;;;"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A utility hook used within navigation components. Returns options ready for use in a navigation component. Validates
3
+ * the icons and sets the icon and iconActive properties.
4
+ *
5
+ * @param options [NavOption[]] The options to display. Each option has a label and an optional leading icon.
6
+ * @returns {undefined} NavOption[] The options with the validated icon and iconActive properties set.
7
+ */
8
+ export declare function useNavOptions<T extends NavOption>(options: T[] | undefined): T[];
9
+ export type NavOption = {
10
+ /**
11
+ * The label of the option. This is the text that will be displayed on the option.
12
+ *
13
+ * @required
14
+ */
15
+ label: string;
16
+ /**
17
+ * Determines if the element is [disabled](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled).
18
+ *
19
+ * @default false
20
+ */
21
+ disabled?: boolean;
22
+ /** The value of the option. If not provided, the label will be used as the value. */
23
+ value?: string;
24
+ /** The the icon to display before the label. */
25
+ icon?: React.ReactNode;
26
+ iconActive?: React.ReactNode;
27
+ };
28
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,46 @@
1
+ import { useMemo } from 'react';
2
+ import { isValidIcon, getChildTypeName } from '../utils/children.js';
3
+ import { useErrorLogger } from '../utils/errors.js';
4
+
5
+ /**
6
+ * A utility hook used within navigation components. Returns options ready for use in a navigation component. Validates
7
+ * the icons and sets the icon and iconActive properties.
8
+ *
9
+ * @param options [NavOption[]] The options to display. Each option has a label and an optional leading icon.
10
+ * @returns {undefined} NavOption[] The options with the validated icon and iconActive properties set.
11
+ */
12
+ function useNavOptions(options) {
13
+ const { logError } = useErrorLogger();
14
+ return useMemo(() => {
15
+ if (!options)
16
+ return [];
17
+ const iconsInvalid = options.some((o) => o.icon) ? !options.every((option) => isValidIcon(option.icon)) : null;
18
+ logError(iconsInvalid === true, 'useNavOptions - Every option either must have a valid icon or none at all. All icons removed.');
19
+ return options
20
+ .map((option) => {
21
+ let { icon, iconActive } = option;
22
+ if (iconsInvalid) {
23
+ icon = undefined;
24
+ iconActive = undefined;
25
+ }
26
+ if (iconActive &&
27
+ // If the iconActive is not a valid icon or the iconActive is not a fill version of the icon, remove the iconActive
28
+ (!icon ||
29
+ !isValidIcon(iconActive) ||
30
+ getChildTypeName(iconActive) !== `${getChildTypeName(icon)}Fill`)) {
31
+ iconActive = undefined;
32
+ }
33
+ return {
34
+ ...option,
35
+ value: option.value || option.label,
36
+ icon,
37
+ iconActive,
38
+ };
39
+ })
40
+ .map((tab, _, arr) => ({ ...tab, icon: arr.every((t) => t.icon) ? tab.icon : undefined }));
41
+ }, [logError, options]);
42
+ }
43
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
44
+
45
+ export { useNavOptions };
46
+ //# sourceMappingURL=useNavOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavOptions.js","sources":["../src/hooks/useNavOptions.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAKA;;;;;;AAMG;AACG,SAAU,aAAa,CAAsB,OAAwB,EAAA;AACvE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IAEtC,OAAO,OAAO,CAAC,MAAK;AAChB,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAC;AAExB,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAE/G,QAAA,QAAQ,CACJ,YAAY,KAAK,IAAI,EACrB,+FAA+F,CAClG,CAAC;AAEF,QAAA,OAAO,OAAO;AACT,aAAA,GAAG,CAAC,CAAC,MAAM,KAAI;AACZ,YAAA,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;YAElC,IAAI,YAAY,EAAE;gBACd,IAAI,GAAG,SAAS,CAAC;gBACjB,UAAU,GAAG,SAAS,CAAC;aAC1B;AAED,YAAA,IACI,UAAU;;AAEV,iBAAC,CAAC,IAAI;oBACF,CAAC,WAAW,CAAC,UAAU,CAAC;AACxB,oBAAA,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAG,EAAA,gBAAgB,CAAC,IAAI,CAAC,CAAA,IAAA,CAAM,CAAC,EACvE;gBACE,UAAU,GAAG,SAAS,CAAC;aAC1B;YAED,OAAO;AACH,gBAAA,GAAG,MAAM;AACT,gBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;gBACnC,IAAI;gBACJ,UAAU;aACb,CAAC;AACN,SAAC,CAAC;AACD,aAAA,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;AACnG,KAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5B,CAAC;AAsBD;;;;"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A hook which calls a method when a click occurs outside of the provided ref. Used inside the Dropdown and Modal
3
+ * components.
4
+ *
5
+ * @example
6
+ * import { useOutsideClick } from '@bspk/ui/hooks/useOutsideClick';
7
+ * import React, { useRef, useState } from 'react';
8
+ *
9
+ * export function Dropdown() {
10
+ * const [isOpen, setIsOpen] = useState(false);
11
+ * const containerRef = useRef<HTMLDivElement>(null);
12
+ *
13
+ * useOutsideClick([containerRef.current], () => setIsOpen(false));
14
+ *
15
+ * return (
16
+ * <>
17
+ * {isOpen && (
18
+ * <div className="custom-popup" ref={containerRef}>
19
+ * Content
20
+ * </div>
21
+ * )}
22
+ * </>
23
+ * );
24
+ * }
25
+ *
26
+ * @param elements - The elements to check if the click occurred outside of.
27
+ * @param callback - The callback to call when a click occurs outside of the ref.
28
+ * @param disabled - Whether the hook should be disabled. Defaults to false.
29
+ */
30
+ export declare function useOutsideClick(elements: (HTMLElement | null)[], callback: (event?: MouseEvent) => void, disabled?: boolean): void;
31
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,50 @@
1
+ import { useEffect } from 'react';
2
+
3
+ /**
4
+ * A hook which calls a method when a click occurs outside of the provided ref. Used inside the Dropdown and Modal
5
+ * components.
6
+ *
7
+ * @example
8
+ * import { useOutsideClick } from '@bspk/ui/hooks/useOutsideClick';
9
+ * import React, { useRef, useState } from 'react';
10
+ *
11
+ * export function Dropdown() {
12
+ * const [isOpen, setIsOpen] = useState(false);
13
+ * const containerRef = useRef<HTMLDivElement>(null);
14
+ *
15
+ * useOutsideClick([containerRef.current], () => setIsOpen(false));
16
+ *
17
+ * return (
18
+ * <>
19
+ * {isOpen && (
20
+ * <div className="custom-popup" ref={containerRef}>
21
+ * Content
22
+ * </div>
23
+ * )}
24
+ * </>
25
+ * );
26
+ * }
27
+ *
28
+ * @param elements - The elements to check if the click occurred outside of.
29
+ * @param callback - The callback to call when a click occurs outside of the ref.
30
+ * @param disabled - Whether the hook should be disabled. Defaults to false.
31
+ */
32
+ function useOutsideClick(elements, callback, disabled) {
33
+ useEffect(() => {
34
+ if (!elements.length || disabled)
35
+ return;
36
+ const handleClickOutside = (event) => {
37
+ if (disabled || elements?.some?.((element) => element?.contains?.(event.target)))
38
+ return;
39
+ callback(event);
40
+ };
41
+ document.addEventListener('mousedown', handleClickOutside);
42
+ return () => {
43
+ document.removeEventListener('mousedown', handleClickOutside);
44
+ };
45
+ }, [callback, disabled, elements]);
46
+ }
47
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
48
+
49
+ export { useOutsideClick };
50
+ //# sourceMappingURL=useOutsideClick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOutsideClick.js","sources":["../src/hooks/useOutsideClick.ts"],"sourcesContent":[null],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;SACa,eAAe,CAC3B,QAAgC,EAChC,QAAsC,EACtC,QAAkB,EAAA;IAElB,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ;YAAE,OAAO;AAEzC,QAAA,MAAM,kBAAkB,GAAG,CAAC,KAAiB,KAAI;YAC7C,IAAI,QAAQ,IAAI,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAc,CAAC,CAAC;gBAAE,OAAO;YACjG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB,SAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAC3D,QAAA,OAAO,MAAK;AACR,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;AAClE,SAAC,CAAC;KACL,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;"}
@@ -0,0 +1,23 @@
1
+ import { RadioProps } from '../Radio';
2
+ /**
3
+ * A hook to manage the state of a single radio. Used alongside the Radio component.
4
+ *
5
+ * @example
6
+ * import { Radio } from '@bspk/ui/Radio';
7
+ * import { useRadioState } from '@bspk/ui/hooks/useRadioState';
8
+ *
9
+ * export function Example() {
10
+ * const { radioProps } = useRadioState('fruits');
11
+ * return <Radio aria-label="cherry" {...radioProps('cherry')} />;
12
+ * }
13
+ *
14
+ * @param name - The name of the radio.
15
+ * @param externalState - The externally managed state of the radio.
16
+ * @returns Properties to pass to the radio and the state of the radio.
17
+ */
18
+ export declare function useRadioState(name: string, externalState?: [value: string | undefined, onChange: (next: string) => void]): {
19
+ radioProps: (radioValue: string) => Pick<RadioProps, "checked" | "name" | "onChange" | "value">;
20
+ value: string | undefined;
21
+ setValue: (next: string) => void;
22
+ };
23
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,38 @@
1
+ import { useState } from 'react';
2
+
3
+ /**
4
+ * A hook to manage the state of a single radio. Used alongside the Radio component.
5
+ *
6
+ * @example
7
+ * import { Radio } from '@bspk/ui/Radio';
8
+ * import { useRadioState } from '@bspk/ui/hooks/useRadioState';
9
+ *
10
+ * export function Example() {
11
+ * const { radioProps } = useRadioState('fruits');
12
+ * return <Radio aria-label="cherry" {...radioProps('cherry')} />;
13
+ * }
14
+ *
15
+ * @param name - The name of the radio.
16
+ * @param externalState - The externally managed state of the radio.
17
+ * @returns Properties to pass to the radio and the state of the radio.
18
+ */
19
+ function useRadioState(name, externalState) {
20
+ const localState = useState();
21
+ const [value, setValue] = externalState || localState;
22
+ const radioProps = (radioValue) => {
23
+ return {
24
+ name,
25
+ checked: value === radioValue,
26
+ value: radioValue,
27
+ onChange: (checked) => {
28
+ if (checked)
29
+ setValue(radioValue);
30
+ },
31
+ };
32
+ };
33
+ return { radioProps, value, setValue };
34
+ }
35
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
36
+
37
+ export { useRadioState };
38
+ //# sourceMappingURL=useRadioState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRadioState.js","sources":["../src/hooks/useRadioState.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;;;;;;;;;;;;;;AAeG;AACa,SAAA,aAAa,CACzB,IAAY,EACZ,aAA6E,EAAA;AAE7E,IAAA,MAAM,UAAU,GAAG,QAAQ,EAAU,CAAC;IACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,aAAa,IAAI,UAAU,CAAC;AAEtD,IAAA,MAAM,UAAU,GAAG,CAAC,UAAkB,KAAiE;QACnG,OAAO;YACH,IAAI;YACJ,OAAO,EAAE,KAAK,KAAK,UAAU;AAC7B,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,QAAQ,EAAE,CAAC,OAAO,KAAI;AAClB,gBAAA,IAAI,OAAO;oBAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACrC;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED;;;;"}