@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
package/Tooltip.d.ts ADDED
@@ -0,0 +1,39 @@
1
+ import { ReactElement } from 'react';
2
+ import { Placement } from './hooks/useFloating';
3
+ export type TooltipProps = {
4
+ /**
5
+ * The placement of the tooltip.
6
+ *
7
+ * @default top
8
+ */
9
+ placement?: Placement;
10
+ /** The tooltip content. */
11
+ label: string;
12
+ /**
13
+ * A single element that will trigger the tooltip when hovered over.
14
+ *
15
+ * @type ReactElement
16
+ * @required
17
+ */
18
+ children: ReactElement;
19
+ /** Determines if the tooltip is disabled. */
20
+ disabled?: boolean;
21
+ /**
22
+ * Determines if the tooltip should hide the tail.
23
+ *
24
+ * @default true
25
+ */
26
+ tail?: boolean;
27
+ };
28
+ /**
29
+ * Brief message that provide additional guidance and helps users perform an action if needed.
30
+ *
31
+ * @name Tooltip
32
+ */
33
+ declare function Tooltip({ placement, label, children, disabled, tail }: TooltipProps): import("@emotion/react/jsx-runtime").JSX.Element;
34
+ declare namespace Tooltip {
35
+ var bspkName: string;
36
+ }
37
+ export { Tooltip };
38
+ export declare const style: import("@emotion/react").SerializedStyles;
39
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
package/Tooltip.js ADDED
@@ -0,0 +1,104 @@
1
+ import { jsxs, Fragment, jsx } from '@emotion/react/jsx-runtime';
2
+ import { css } from '@emotion/react';
3
+ import { useId, useState, useMemo, cloneElement, useRef } from 'react';
4
+ import { Portal } from './Portal.js';
5
+ import { useFloating } from './hooks/useFloating.js';
6
+
7
+ /**
8
+ * Brief message that provide additional guidance and helps users perform an action if needed.
9
+ *
10
+ * @name Tooltip
11
+ */
12
+ function Tooltip({ placement = 'top', label, children, disabled = false, tail = true }) {
13
+ const id = useId();
14
+ const [show, setShow] = useState(false);
15
+ const child = useMemo(() => !disabled &&
16
+ children &&
17
+ cloneElement(children, {
18
+ onMouseOver: () => setShow(true),
19
+ onMouseLeave: () => setShow(false),
20
+ 'aria-describedby': id,
21
+ }), [children, disabled, id]);
22
+ const arrowRef = useRef(null);
23
+ const { floatingStyles, middlewareData, elements } = useFloating({
24
+ placement: placement,
25
+ strategy: 'fixed',
26
+ offsetOptions: 8,
27
+ arrowRef,
28
+ hide: !show,
29
+ });
30
+ return disabled ? (children) : (jsxs(Fragment, { children: [child, label && (jsx(Portal, { children: jsxs("div", { css: style, "data-placement": middlewareData?.offset?.placement, "data-tooltip": "", id: id, ref: (node) => {
31
+ elements.setFloating(node);
32
+ elements.setTrigger(document.querySelector(`[aria-describedby="${id}"]`));
33
+ }, role: "tooltip", style: floatingStyles, children: [jsx("span", { "data-text": true, children: label }), tail !== false && (jsx("span", { "aria-hidden": true, "data-arrow": true, ref: (node) => {
34
+ arrowRef.current = node;
35
+ }, style: {
36
+ left: `${middlewareData?.arrow?.x}px`,
37
+ top: `${middlewareData?.arrow?.y}px`,
38
+ } }))] }) }))] }));
39
+ }
40
+ Tooltip.bspkName = 'Tooltip';
41
+ const style = css `
42
+ position: fixed;
43
+ pointer-events: none;
44
+ z-index: var(--z-index-tooltip-popover);
45
+
46
+ [data-text] {
47
+ display: block;
48
+ z-index: 2;
49
+ position: relative;
50
+ background-color: var(--surface-neutral-inverse);
51
+ border-radius: var(--radius-small);
52
+ color: var(--foreground-neutral-on-inverse-surface);
53
+ box-shadow: var(--drop-shadow-float);
54
+ font: var(--labels-small);
55
+ padding: var(--spacing-sizing-01) var(--spacing-sizing-02);
56
+ border: none;
57
+ transition: opacity 0.2s ease-in-out;
58
+ width: max-content;
59
+ }
60
+
61
+ --arrow-size: var(--spacing-sizing-01);
62
+ --arrow-offset: calc(var(--arrow-size) * -2);
63
+
64
+ [data-arrow] {
65
+ display: block;
66
+ z-index: 1;
67
+ position: absolute;
68
+ width: 0;
69
+ height: 0;
70
+ border-style: solid;
71
+ border-width: var(--arrow-size) var(--arrow-size) var(--arrow-size) var(--arrow-size);
72
+ border-color: transparent transparent transparent transparent;
73
+ }
74
+
75
+ &[data-placement^='bottom'] {
76
+ [data-arrow] {
77
+ top: var(--arrow-offset);
78
+ border-bottom-color: var(--surface-neutral-inverse);
79
+ }
80
+ }
81
+
82
+ &[data-placement^='top'] {
83
+ [data-arrow] {
84
+ border-top-color: var(--surface-neutral-inverse);
85
+ }
86
+ }
87
+
88
+ &[data-placement^='right'] {
89
+ [data-arrow] {
90
+ margin-left: var(--arrow-offset);
91
+ border-right-color: var(--surface-neutral-inverse);
92
+ }
93
+ }
94
+
95
+ &[data-placement^='left'] {
96
+ [data-arrow] {
97
+ right: var(--arrow-offset);
98
+ border-left-color: var(--surface-neutral-inverse);
99
+ }
100
+ }
101
+ `;
102
+
103
+ export { Tooltip, style };
104
+ //# sourceMappingURL=Tooltip.js.map
package/Tooltip.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sources":["src/Tooltip.tsx"],"sourcesContent":[null],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;AAgCA;;;;AAIG;AACH,SAAS,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,IAAI,EAAgB,EAAA;AAChG,IAAA,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,OAAO,CACjB,MACI,CAAC,QAAQ;QACT,QAAQ;QACR,YAAY,CAAC,QAAQ,EAAE;AACnB,YAAA,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;AAChC,YAAA,YAAY,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;AAClC,YAAA,kBAAkB,EAAE,EAAE;SACzB,CAAC,EACN,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAC3B,CAAC;AAEF,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAElD,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;AAC7D,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,aAAa,EAAE,CAAC;QAChB,QAAQ;QACR,IAAI,EAAE,CAAC,IAAI;AACd,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,QAAQ,IACX,QAAQ,KAERA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACK,KAAK,EACL,KAAK,KACFC,GAAA,CAAC,MAAM,EACH,EAAA,QAAA,EAAAF,IAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,KAAK,EACM,gBAAA,EAAA,cAAc,EAAE,MAAM,EAAE,SAAS,EACpC,cAAA,EAAA,EAAE,EACf,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,CAAC,IAAI,KAAI;AACV,wBAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,wBAAA,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAc,CAAA,mBAAA,EAAsB,EAAE,CAAA,EAAA,CAAI,CAAC,CAAC,CAAC;qBAC1F,EACD,IAAI,EAAC,SAAS,EACd,KAAK,EAAE,cAAc,EAErB,QAAA,EAAA,CAAAE,GAAA,CAAA,MAAA,EAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAiB,KAAK,EAAA,CAAQ,EAC7B,IAAI,KAAK,KAAK,KACXA,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,YAAA,EAAA,IAAA,EAGI,GAAG,EAAE,CAAC,IAAI,KAAI;AACV,gCAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;6BAC3B,EACD,KAAK,EAAE;AACH,gCAAA,IAAI,EAAE,CAAG,EAAA,cAAc,EAAE,KAAK,EAAE,CAAC,CAAI,EAAA,CAAA;AACrC,gCAAA,GAAG,EAAE,CAAG,EAAA,cAAc,EAAE,KAAK,EAAE,CAAC,CAAI,EAAA,CAAA;AACvC,6BAAA,EAAA,CACH,CACL,CACC,EAAA,CAAA,EAAA,CACD,CACZ,CAAA,EAAA,CACF,CACN,CAAC;AACN,CAAC;AAED,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;AAItB,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,16 @@
1
+ export type TopNavigationProps = {
2
+ /** The content of the top navigation. */
3
+ children: string;
4
+ };
5
+ /**
6
+ * Component description coming soon.
7
+ *
8
+ * @name TopNavigation
9
+ */
10
+ declare function TopNavigation({ children }: TopNavigationProps): import("@emotion/react/jsx-runtime").JSX.Element;
11
+ declare namespace TopNavigation {
12
+ var bspkName: string;
13
+ }
14
+ export { TopNavigation };
15
+ export declare const style: import("@emotion/react").SerializedStyles;
16
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,18 @@
1
+ import { jsx } from '@emotion/react/jsx-runtime';
2
+ import { css } from '@emotion/react';
3
+
4
+ /**
5
+ * Component description coming soon.
6
+ *
7
+ * @name TopNavigation
8
+ */
9
+ function TopNavigation({ children }) {
10
+ return (jsx("div", { css: style, "data-top-navigation": true, children: children }));
11
+ }
12
+ TopNavigation.bspkName = 'TopNavigation';
13
+ const style = css `
14
+ display: flex;
15
+ `;
16
+
17
+ export { TopNavigation, style };
18
+ //# sourceMappingURL=TopNavigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopNavigation.js","sources":["src/TopNavigation.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;AAOA;;;;AAIG;AACH,SAAS,aAAa,CAAC,EAAE,QAAQ,EAAsB,EAAA;IACnD,QACIA,aAAK,GAAG,EAAE,KAAK,EACV,qBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAQ,EACP,CAAA,EACR;AACN,CAAC;AAED,aAAa,CAAC,QAAQ,GAAG,eAAe,CAAC;AAIlC,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;"}
package/Txt.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { ElementType } from 'react';
2
+ import { TxtVariant } from './utils/txtVariants';
3
+ import { ElementProps } from './';
4
+ export type TxtProps<As extends ElementType = 'span'> = {
5
+ /**
6
+ * The element type to render as.
7
+ *
8
+ * @default span
9
+ * @type ElementType
10
+ */
11
+ as?: As;
12
+ /**
13
+ * The content to render.
14
+ *
15
+ * @type string
16
+ * @required
17
+ */
18
+ children: unknown;
19
+ /**
20
+ * The variant to use.
21
+ *
22
+ * @default body-base
23
+ */
24
+ variant?: TxtVariant;
25
+ /** The id of the element. */
26
+ id?: string;
27
+ };
28
+ /**
29
+ * A text component that applies the correct font styles based on the variant and size. variant
30
+ *
31
+ * @name Txt
32
+ */
33
+ declare function Txt<As extends ElementType = 'span'>({ children, as, variant, style: styleProp, ...containerProps }: ElementProps<TxtProps<As>, As>): import("@emotion/react/jsx-runtime").JSX.Element | null;
34
+ declare namespace Txt {
35
+ var bspkName: string;
36
+ }
37
+ export { Txt };
38
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
package/Txt.js ADDED
@@ -0,0 +1,21 @@
1
+ import { jsx } from '@emotion/react/jsx-runtime';
2
+ import { css } from '@emotion/react';
3
+
4
+ /**
5
+ * A text component that applies the correct font styles based on the variant and size. variant
6
+ *
7
+ * @name Txt
8
+ */
9
+ function Txt({ children, as, variant = 'body-base', style: styleProp, ...containerProps }) {
10
+ const content = children?.toString();
11
+ if (!content)
12
+ return null;
13
+ const As = as || 'span';
14
+ return (jsx(As, { ...containerProps, css: css `
15
+ font: var(--${variant});
16
+ `, "data-txt": true, style: styleProp, children: content }));
17
+ }
18
+ Txt.bspkName = 'Txt';
19
+
20
+ export { Txt };
21
+ //# sourceMappingURL=Txt.js.map
package/Txt.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Txt.js","sources":["src/Txt.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":";;;AAgCA;;;;AAIG;AACH,SAAS,GAAG,CAAkC,EAC1C,QAAQ,EACR,EAAE,EACF,OAAO,GAAG,WAAW,EACrB,KAAK,EAAE,SAAS,EAChB,GAAG,cAAc,EACY,EAAA;AAC7B,IAAA,MAAM,OAAO,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAErC,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,IAAI,CAAC;AAE1B,IAAA,MAAM,EAAE,GAAgB,EAAE,IAAI,MAAM,CAAC;IAErC,QACIA,IAAC,EAAE,EAAA,EAAA,GACK,cAAc,EAClB,GAAG,EAAE,GAAG,CAAA,CAAA;8BACU,OAAO,CAAA;AACxB,YAAA,CAAA,EAAA,UAAA,EAAA,IAAA,EAED,KAAK,EAAE,SAAS,YAEf,OAAO,EAAA,CACP,EACP;AACN,CAAC;AAED,GAAG,CAAC,QAAQ,GAAG,KAAK;;;;"}
@@ -0,0 +1,37 @@
1
+ import { CheckboxProps } from '../Checkbox';
2
+ /**
3
+ * A hook to manage the state of a group of checkboxes. Used alongside the CheckboxGroup component.
4
+ *
5
+ * @example
6
+ * import { Checkbox } from "@bspk/ui/Checkbox";
7
+ * import { useCheckboxGroupState } from "@bspk/ui/hooks/useCheckboxGroupState";
8
+ *
9
+ * export function Example() {
10
+ * const allValues = ["Red", "Orange", "Yellow", "Green"];
11
+ *
12
+ * const { allCheckboxProps, checkboxProps, values } = useCheckboxGroupState(allValues, "fruits");
13
+ *
14
+ * return (
15
+ * <>
16
+ * <pre>Selected Values: {values.join(", ")}</pre>
17
+ * <Checkbox aria-label="All" {...allCheckboxProps} />
18
+ * {allValues.map((value) => (
19
+ * <Checkbox key={value} aria-label={value} {...checkboxProps(value)} />
20
+ * ))}
21
+ * </>
22
+ * );
23
+ * }
24
+ *
25
+ * @param allValues - The values of the checkboxes.
26
+ * @param name - The name of the checkboxes.
27
+ * @param externalState - The externally managed state of the checkboxes.
28
+ * @returns Properties to pass to the checkbox, other helper functions, and the state of the checkbox.
29
+ */
30
+ export declare function useCheckboxGroupState(allValues: string[], name: string, externalState?: [values: string[], setValues: (next: string[]) => void]): {
31
+ toggleValue: (itemValue: string, checked: boolean) => void;
32
+ allCheckboxProps: Pick<CheckboxProps, "onChange" | "name" | "value" | "checked" | "indeterminate">;
33
+ checkboxProps: (value: string) => Pick<CheckboxProps, "checked" | "name" | "onChange" | "value">;
34
+ values: string[];
35
+ setValues: (next: string[]) => void;
36
+ };
37
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,61 @@
1
+ import { useState, useCallback, useMemo } from 'react';
2
+
3
+ /**
4
+ * A hook to manage the state of a group of checkboxes. Used alongside the CheckboxGroup component.
5
+ *
6
+ * @example
7
+ * import { Checkbox } from "@bspk/ui/Checkbox";
8
+ * import { useCheckboxGroupState } from "@bspk/ui/hooks/useCheckboxGroupState";
9
+ *
10
+ * export function Example() {
11
+ * const allValues = ["Red", "Orange", "Yellow", "Green"];
12
+ *
13
+ * const { allCheckboxProps, checkboxProps, values } = useCheckboxGroupState(allValues, "fruits");
14
+ *
15
+ * return (
16
+ * <>
17
+ * <pre>Selected Values: {values.join(", ")}</pre>
18
+ * <Checkbox aria-label="All" {...allCheckboxProps} />
19
+ * {allValues.map((value) => (
20
+ * <Checkbox key={value} aria-label={value} {...checkboxProps(value)} />
21
+ * ))}
22
+ * </>
23
+ * );
24
+ * }
25
+ *
26
+ * @param allValues - The values of the checkboxes.
27
+ * @param name - The name of the checkboxes.
28
+ * @param externalState - The externally managed state of the checkboxes.
29
+ * @returns Properties to pass to the checkbox, other helper functions, and the state of the checkbox.
30
+ */
31
+ function useCheckboxGroupState(allValues, name, externalState) {
32
+ const localState = useState([]);
33
+ const [values, setValues] = externalState || localState;
34
+ const toggleValue = useCallback((itemValue, checked) => {
35
+ setValues(allValues.flatMap((value) => {
36
+ if (value === itemValue)
37
+ return checked ? value : [];
38
+ return values.includes(value) ? value : [];
39
+ }));
40
+ }, [allValues, setValues, values]);
41
+ const checkboxProps = useCallback((value) => ({
42
+ checked: values.includes(value),
43
+ name,
44
+ onChange: (checked) => toggleValue(value, checked),
45
+ value,
46
+ }), [values, name, toggleValue]);
47
+ const allCheckboxProps = useMemo(() => {
48
+ return {
49
+ checked: allValues.length === values.length,
50
+ indeterminate: values.length > 0 && values.length < allValues.length,
51
+ name,
52
+ onChange: () => setValues(allValues.length === values.length ? [] : allValues),
53
+ value: 'all',
54
+ };
55
+ }, [allValues, values.length, name, setValues]);
56
+ return { toggleValue, allCheckboxProps, checkboxProps, values, setValues };
57
+ }
58
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
59
+
60
+ export { useCheckboxGroupState };
61
+ //# sourceMappingURL=useCheckboxGroupState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCheckboxGroupState.js","sources":["../src/hooks/useCheckboxGroupState.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;SACa,qBAAqB,CACjC,SAAmB,EACnB,IAAY,EACZ,aAAuE,EAAA;AAEvE,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,aAAa,IAAI,UAAU,CAAC;IAExD,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,SAAiB,EAAE,OAAgB,KAAI;QACpC,SAAS,CACL,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACxB,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,OAAO,GAAG,KAAK,GAAG,EAAE,CAAC;AACrD,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;SAC9C,CAAC,CACL,CAAC;KACL,EACD,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CACjC,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,KAAa,MAAsE;AAChF,QAAA,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/B,IAAI;QACJ,QAAQ,EAAE,CAAC,OAAO,KAAK,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;QAClD,KAAK;KACR,CAAC,EACF,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAC9B,CAAC;AAEF,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAG7B;QACA,OAAO;AACH,YAAA,OAAO,EAAE,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;AAC3C,YAAA,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;YACpE,IAAI;YACJ,QAAQ,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC;AAC9E,YAAA,KAAK,EAAE,KAAK;SACf,CAAC;AACN,KAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IAEhD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/E,CAAC;AAED;;;;"}
@@ -0,0 +1,23 @@
1
+ import { CheckboxProps } from '../Checkbox';
2
+ /**
3
+ * A hook to manage the state of a single checkbox. Used alongside the Checkbox component.
4
+ *
5
+ * @example
6
+ * import { Checkbox } from '@bspk/ui/Checkbox';
7
+ * import { useCheckboxState } from '@bspk/ui/hooks/useCheckboxState';
8
+ *
9
+ * export function Example() {
10
+ * const { checkboxProps } = useCheckboxState('fruits');
11
+ * return <Checkbox aria-label="cherry" {...checkboxProps('cherry')} />;
12
+ * }
13
+ *
14
+ * @param name - The name of the checkbox.
15
+ * @param externalState - The externally managed state of the checkbox.
16
+ * @returns Properties to pass to the checkbox and the state of the checkbox.
17
+ */
18
+ export declare function useCheckboxState(name: string, externalState?: [value: string[] | undefined, onChange: (next: string[]) => void]): {
19
+ checkboxProps: (value: string) => Pick<CheckboxProps, '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,40 @@
1
+ import { useState } from 'react';
2
+
3
+ /**
4
+ * A hook to manage the state of a single checkbox. Used alongside the Checkbox component.
5
+ *
6
+ * @example
7
+ * import { Checkbox } from '@bspk/ui/Checkbox';
8
+ * import { useCheckboxState } from '@bspk/ui/hooks/useCheckboxState';
9
+ *
10
+ * export function Example() {
11
+ * const { checkboxProps } = useCheckboxState('fruits');
12
+ * return <Checkbox aria-label="cherry" {...checkboxProps('cherry')} />;
13
+ * }
14
+ *
15
+ * @param name - The name of the checkbox.
16
+ * @param externalState - The externally managed state of the checkbox.
17
+ * @returns Properties to pass to the checkbox and the state of the checkbox.
18
+ */
19
+ function useCheckboxState(name, externalState) {
20
+ const localState = useState();
21
+ const [value, setValue] = externalState || localState;
22
+ const checkboxProps = (checkboxValue) => {
23
+ return {
24
+ name,
25
+ checked: value?.includes(checkboxValue),
26
+ value: checkboxValue,
27
+ onChange: (checked) => {
28
+ const next = (value || []).filter((v) => v !== checkboxValue);
29
+ if (checked)
30
+ next.push(checkboxValue);
31
+ setValue(next);
32
+ },
33
+ };
34
+ };
35
+ return { checkboxProps, value, setValue };
36
+ }
37
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
38
+
39
+ export { useCheckboxState };
40
+ //# sourceMappingURL=useCheckboxState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCheckboxState.js","sources":["../src/hooks/useCheckboxState.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAIA;;;;;;;;;;;;;;;AAeG;AACa,SAAA,gBAAgB,CAC5B,IAAY,EACZ,aAAiF,EAAA;AAMjF,IAAA,MAAM,UAAU,GAAG,QAAQ,EAAY,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,aAAa,IAAI,UAAU,CAAC;AAEtD,IAAA,MAAM,aAAa,GAAG,CAAC,aAAqB,KAAoE;QAC5G,OAAO;YACH,IAAI;AACJ,YAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC;AACvC,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,QAAQ,EAAE,CAAC,OAAO,KAAI;AAClB,gBAAA,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,aAAa,CAAC,CAAC;AAC9D,gBAAA,IAAI,OAAO;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAClB;SACJ,CAAC;AACN,KAAC,CAAC;AAEF,IAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC9C,CAAC;AAED;;;;"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Custom hook to manage the positioning of a floating element relative to a reference element.
3
+ *
4
+ * @template ReferenceType - The type of the reference element, extending HTMLElement.
5
+ * @param {Object} params - The parameters for the hook.
6
+ * @param {Placement} params.placement - The preferred placement of the floating element.
7
+ * @param {React.MutableRefObject<HTMLElement | null>} [params.arrowRef] - A ref object for the arrow element.
8
+ * @param {Strategy} [params.strategy] - The positioning strategy ('absolute' or 'fixed').
9
+ * @param {OffsetOptions} [params.offsetOptions=0] - The offset options for the floating element. Default is `0`
10
+ * @param {boolean} [params.refWidth] - Whether to match the width of the floating element to the reference element.
11
+ * @param {boolean} [params.hide=false] - Whether to hide the floating element. Default is `false`
12
+ */
13
+ import { Placement, Strategy, MiddlewareData, OffsetOptions } from '@floating-ui/dom';
14
+ export type { Placement, Strategy };
15
+ /**
16
+ *
17
+ *
18
+ * @param param0
19
+ * @returns
20
+ */
21
+ export declare function useFloating<TriggerElementType extends HTMLElement>({ placement, arrowRef, strategy, offsetOptions, refWidth, hide, }: {
22
+ placement: Placement;
23
+ arrowRef?: React.MutableRefObject<HTMLElement | null>;
24
+ strategy?: Strategy;
25
+ offsetOptions?: OffsetOptions;
26
+ refWidth?: boolean;
27
+ hide?: boolean;
28
+ }): {
29
+ elements: {
30
+ trigger: TriggerElementType | null;
31
+ floating: HTMLElement | null;
32
+ setTrigger: import("react").Dispatch<import("react").SetStateAction<TriggerElementType | null>>;
33
+ setFloating: import("react").Dispatch<import("react").SetStateAction<HTMLElement | null>>;
34
+ };
35
+ floatingStyles: import("react").CSSProperties;
36
+ middlewareData: MiddlewareData;
37
+ };
38
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -0,0 +1,156 @@
1
+ import { computePosition, arrow, offset, flip, size, autoUpdate } from '@floating-ui/dom';
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import { useTimeout } from './useTimeout.js';
4
+
5
+ /**
6
+ * Custom hook to manage the positioning of a floating element relative to a reference element.
7
+ *
8
+ * @template ReferenceType - The type of the reference element, extending HTMLElement.
9
+ * @param {Object} params - The parameters for the hook.
10
+ * @param {Placement} params.placement - The preferred placement of the floating element.
11
+ * @param {React.MutableRefObject<HTMLElement | null>} [params.arrowRef] - A ref object for the arrow element.
12
+ * @param {Strategy} [params.strategy] - The positioning strategy ('absolute' or 'fixed').
13
+ * @param {OffsetOptions} [params.offsetOptions=0] - The offset options for the floating element. Default is `0`
14
+ * @param {boolean} [params.refWidth] - Whether to match the width of the floating element to the reference element.
15
+ * @param {boolean} [params.hide=false] - Whether to hide the floating element. Default is `false`
16
+ */
17
+ const TRANSITION_DELAY = 250;
18
+ /**
19
+ *
20
+ *
21
+ * @param param0
22
+ * @returns
23
+ */
24
+ function useFloating({ placement, arrowRef, strategy, offsetOptions = 0, refWidth, hide = false, }) {
25
+ const [floatingStyles, setFloatingStylesState] = useState({
26
+ opacity: 0,
27
+ pointerEvents: 'none',
28
+ display: 'none',
29
+ });
30
+ const setFloatingStyles = (next) => {
31
+ setFloatingStylesState((prev) => ({
32
+ transition: `opacity ${TRANSITION_DELAY}ms`,
33
+ ...next(prev),
34
+ }));
35
+ };
36
+ const [middlewareData, setMiddlewareData] = useState({});
37
+ const [triggerElement, setTriggerElement] = useState(null);
38
+ const [floatingElement, setFloatingElement] = useState(null);
39
+ // const elements: {
40
+ // trigger: HTMLElement | null;
41
+ // floating: HTMLElement | null;
42
+ // setReference: (node: TriggerElementType | null) => void;
43
+ // setFloating: (node: HTMLElement | null) => void;
44
+ // } = {
45
+ // trigger: triggerElement,
46
+ // floating: floatingElement,
47
+ // setReference: setTriggerElement,
48
+ // setFloating: setFloatingElement,
49
+ // };
50
+ const computeDebounce = useTimeout();
51
+ const transitionDelay = useTimeout();
52
+ const compute = useCallback(() => {
53
+ computeDebounce.clear();
54
+ transitionDelay.clear();
55
+ // check if the reference or floating element is null
56
+ if (triggerElement === null || floatingElement === null)
57
+ return;
58
+ if (hide) {
59
+ if (floatingElement?.style.top)
60
+ setFloatingStyles((prev) => ({
61
+ ...prev,
62
+ display: undefined,
63
+ opacity: 0,
64
+ pointerEvents: 'none',
65
+ }));
66
+ transitionDelay.set(() => {
67
+ setFloatingStyles((prev) => ({
68
+ ...prev,
69
+ display: 'none',
70
+ }));
71
+ }, TRANSITION_DELAY);
72
+ return;
73
+ }
74
+ // debounce the computePosition call
75
+ computeDebounce.set(() => {
76
+ // check again if the reference or floating element is null
77
+ if (hide || triggerElement === null || floatingElement === null)
78
+ return;
79
+ computePosition(triggerElement, floatingElement, {
80
+ placement: placement,
81
+ strategy,
82
+ middleware: [
83
+ arrowRef?.current && arrow({ element: arrowRef.current, padding: 8 }),
84
+ offset(offsetOptions),
85
+ flip(),
86
+ refWidth &&
87
+ size({
88
+ apply({ rects, elements }) {
89
+ Object.assign(elements.floating.style, {
90
+ width: `${rects.reference.width}px`,
91
+ });
92
+ },
93
+ }),
94
+ ],
95
+ }).then((value) => {
96
+ setFloatingStyles(() => ({
97
+ top: value.y,
98
+ left: value.x,
99
+ position: value.strategy,
100
+ opacity: 0,
101
+ pointerEvents: 'none',
102
+ display: undefined,
103
+ }));
104
+ transitionDelay.set(() => {
105
+ setFloatingStyles((prev) => ({
106
+ ...prev,
107
+ opacity: 1,
108
+ pointerEvents: 'auto',
109
+ display: undefined,
110
+ }));
111
+ }, 10);
112
+ setMiddlewareData(value.middlewareData);
113
+ });
114
+ }, 10);
115
+ }, [
116
+ computeDebounce,
117
+ transitionDelay,
118
+ triggerElement,
119
+ floatingElement,
120
+ hide,
121
+ placement,
122
+ strategy,
123
+ arrowRef,
124
+ offsetOptions,
125
+ refWidth,
126
+ ]);
127
+ useEffect(() => {
128
+ compute();
129
+ return () => {
130
+ computeDebounce.clear();
131
+ transitionDelay.clear();
132
+ };
133
+ }, [compute, computeDebounce, hide, transitionDelay]);
134
+ useEffect(() => {
135
+ if (hide || triggerElement === null || floatingElement === null)
136
+ return;
137
+ const cleanup = autoUpdate(triggerElement, floatingElement, compute);
138
+ return () => {
139
+ cleanup();
140
+ };
141
+ }, [compute, hide, floatingElement, triggerElement]);
142
+ return {
143
+ elements: {
144
+ trigger: triggerElement,
145
+ floating: floatingElement,
146
+ setTrigger: setTriggerElement,
147
+ setFloating: setFloatingElement,
148
+ },
149
+ floatingStyles,
150
+ middlewareData,
151
+ };
152
+ }
153
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
154
+
155
+ export { useFloating };
156
+ //# sourceMappingURL=useFloating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFloating.js","sources":["../src/hooks/useFloating.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}