@cambly/syntax-core 9.6.0 → 9.7.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 (354) hide show
  1. package/dist/Avatar/Avatar.css +28 -0
  2. package/dist/Avatar/Avatar.css.map +1 -0
  3. package/dist/Avatar/Avatar.d.ts +27 -0
  4. package/dist/Avatar/Avatar.js +8 -0
  5. package/dist/Avatar/Avatar.js.map +1 -0
  6. package/dist/Avatar/Avatar.mjs +8 -0
  7. package/dist/Avatar/Avatar.mjs.map +1 -0
  8. package/dist/Badge/Badge.css +1870 -0
  9. package/dist/Badge/Badge.css.map +1 -0
  10. package/dist/Badge/Badge.d.ts +25 -0
  11. package/dist/Badge/Badge.js +13 -0
  12. package/dist/Badge/Badge.js.map +1 -0
  13. package/dist/Badge/Badge.mjs +13 -0
  14. package/dist/Badge/Badge.mjs.map +1 -0
  15. package/dist/Box/Box.css +1783 -0
  16. package/dist/Box/Box.css.map +1 -0
  17. package/dist/Box/Box.d.ts +371 -0
  18. package/dist/Box/Box.js +11 -0
  19. package/dist/Box/Box.js.map +1 -0
  20. package/dist/Box/Box.mjs +11 -0
  21. package/dist/Box/Box.mjs.map +1 -0
  22. package/dist/Button/Button.css +1956 -0
  23. package/dist/Button/Button.css.map +1 -0
  24. package/dist/Button/Button.d.ts +85 -0
  25. package/dist/Button/Button.js +21 -0
  26. package/dist/Button/Button.js.map +1 -0
  27. package/dist/Button/Button.mjs +21 -0
  28. package/dist/Button/Button.mjs.map +1 -0
  29. package/dist/Button/constants/iconSize.css +92 -0
  30. package/dist/Button/constants/iconSize.css.map +1 -0
  31. package/dist/Button/constants/iconSize.d.ts +7 -0
  32. package/dist/Button/constants/iconSize.js +8 -0
  33. package/dist/Button/constants/iconSize.js.map +1 -0
  34. package/dist/Button/constants/iconSize.mjs +8 -0
  35. package/dist/Button/constants/iconSize.mjs.map +1 -0
  36. package/dist/Button/constants/loadingIconSize.d.ts +7 -0
  37. package/dist/Button/constants/loadingIconSize.js +8 -0
  38. package/dist/Button/constants/loadingIconSize.js.map +1 -0
  39. package/dist/Button/constants/loadingIconSize.mjs +8 -0
  40. package/dist/Button/constants/loadingIconSize.mjs.map +1 -0
  41. package/dist/Button/constants/textVariant.d.ts +7 -0
  42. package/dist/Button/constants/textVariant.js +8 -0
  43. package/dist/Button/constants/textVariant.js.map +1 -0
  44. package/dist/Button/constants/textVariant.mjs +8 -0
  45. package/dist/Button/constants/textVariant.mjs.map +1 -0
  46. package/dist/ButtonGroup/ButtonGroup.css +20 -0
  47. package/dist/ButtonGroup/ButtonGroup.css.map +1 -0
  48. package/dist/ButtonGroup/ButtonGroup.d.ts +29 -0
  49. package/dist/ButtonGroup/ButtonGroup.js +8 -0
  50. package/dist/ButtonGroup/ButtonGroup.js.map +1 -0
  51. package/dist/ButtonGroup/ButtonGroup.mjs +8 -0
  52. package/dist/ButtonGroup/ButtonGroup.mjs.map +1 -0
  53. package/dist/Card/Card.css +1783 -0
  54. package/dist/Card/Card.css.map +1 -0
  55. package/dist/Card/Card.d.ts +27 -0
  56. package/dist/Card/Card.js +12 -0
  57. package/dist/Card/Card.js.map +1 -0
  58. package/dist/Card/Card.mjs +12 -0
  59. package/dist/Card/Card.mjs.map +1 -0
  60. package/dist/Checkbox/Checkbox.css +313 -0
  61. package/dist/Checkbox/Checkbox.css.map +1 -0
  62. package/dist/Checkbox/Checkbox.d.ts +48 -0
  63. package/dist/Checkbox/Checkbox.js +14 -0
  64. package/dist/Checkbox/Checkbox.js.map +1 -0
  65. package/dist/Checkbox/Checkbox.mjs +14 -0
  66. package/dist/Checkbox/Checkbox.mjs.map +1 -0
  67. package/dist/Chip/Chip.css +1902 -0
  68. package/dist/Chip/Chip.css.map +1 -0
  69. package/dist/Chip/Chip.d.ts +45 -0
  70. package/dist/Chip/Chip.js +14 -0
  71. package/dist/Chip/Chip.js.map +1 -0
  72. package/dist/Chip/Chip.mjs +14 -0
  73. package/dist/Chip/Chip.mjs.map +1 -0
  74. package/dist/Divider/Divider.css +10 -0
  75. package/dist/Divider/Divider.css.map +1 -0
  76. package/dist/Divider/Divider.d.ts +9 -0
  77. package/dist/Divider/Divider.js +8 -0
  78. package/dist/Divider/Divider.js.map +1 -0
  79. package/dist/Divider/Divider.mjs +8 -0
  80. package/dist/Divider/Divider.mjs.map +1 -0
  81. package/dist/Heading/Heading.css +248 -0
  82. package/dist/Heading/Heading.css.map +1 -0
  83. package/dist/Heading/Heading.d.ts +52 -0
  84. package/dist/Heading/Heading.js +11 -0
  85. package/dist/Heading/Heading.js.map +1 -0
  86. package/dist/Heading/Heading.mjs +11 -0
  87. package/dist/Heading/Heading.mjs.map +1 -0
  88. package/dist/IconButton/IconButton.css +227 -0
  89. package/dist/IconButton/IconButton.css.map +1 -0
  90. package/dist/IconButton/IconButton.d.ts +55 -0
  91. package/dist/IconButton/IconButton.js +13 -0
  92. package/dist/IconButton/IconButton.js.map +1 -0
  93. package/dist/IconButton/IconButton.mjs +13 -0
  94. package/dist/IconButton/IconButton.mjs.map +1 -0
  95. package/dist/LinkButton/LinkButton.css +353 -0
  96. package/dist/LinkButton/LinkButton.css.map +1 -0
  97. package/dist/LinkButton/LinkButton.d.ts +72 -0
  98. package/dist/LinkButton/LinkButton.js +17 -0
  99. package/dist/LinkButton/LinkButton.js.map +1 -0
  100. package/dist/LinkButton/LinkButton.mjs +17 -0
  101. package/dist/LinkButton/LinkButton.mjs.map +1 -0
  102. package/dist/Modal/FocusTrap.d.ts +10 -0
  103. package/dist/Modal/FocusTrap.js +8 -0
  104. package/dist/Modal/FocusTrap.js.map +1 -0
  105. package/dist/Modal/FocusTrap.mjs +8 -0
  106. package/dist/Modal/FocusTrap.mjs.map +1 -0
  107. package/dist/Modal/Layer.css +1783 -0
  108. package/dist/Modal/Layer.css.map +1 -0
  109. package/dist/Modal/Layer.d.ts +8 -0
  110. package/dist/Modal/Layer.js +12 -0
  111. package/dist/Modal/Layer.js.map +1 -0
  112. package/dist/Modal/Layer.mjs +12 -0
  113. package/dist/Modal/Layer.mjs.map +1 -0
  114. package/dist/Modal/Modal.css +1898 -0
  115. package/dist/Modal/Modal.css.map +1 -0
  116. package/dist/Modal/Modal.d.ts +113 -0
  117. package/dist/Modal/Modal.js +17 -0
  118. package/dist/Modal/Modal.js.map +1 -0
  119. package/dist/Modal/Modal.mjs +17 -0
  120. package/dist/Modal/Modal.mjs.map +1 -0
  121. package/dist/Modal/StopScroll.d.ts +7 -0
  122. package/dist/Modal/StopScroll.js +8 -0
  123. package/dist/Modal/StopScroll.js.map +1 -0
  124. package/dist/Modal/StopScroll.mjs +8 -0
  125. package/dist/Modal/StopScroll.mjs.map +1 -0
  126. package/dist/RadioButton/RadioButton.css +318 -0
  127. package/dist/RadioButton/RadioButton.css.map +1 -0
  128. package/dist/RadioButton/RadioButton.d.ts +60 -0
  129. package/dist/RadioButton/RadioButton.js +14 -0
  130. package/dist/RadioButton/RadioButton.js.map +1 -0
  131. package/dist/RadioButton/RadioButton.mjs +14 -0
  132. package/dist/RadioButton/RadioButton.mjs.map +1 -0
  133. package/dist/SelectList/SelectList.css +335 -0
  134. package/dist/SelectList/SelectList.css.map +1 -0
  135. package/dist/SelectList/SelectList.d.ts +72 -0
  136. package/dist/SelectList/SelectList.js +15 -0
  137. package/dist/SelectList/SelectList.js.map +1 -0
  138. package/dist/SelectList/SelectList.mjs +15 -0
  139. package/dist/SelectList/SelectList.mjs.map +1 -0
  140. package/dist/SelectList/SelectOption.d.ts +10 -0
  141. package/dist/SelectList/SelectOption.js +8 -0
  142. package/dist/SelectList/SelectOption.js.map +1 -0
  143. package/dist/SelectList/SelectOption.mjs +8 -0
  144. package/dist/SelectList/SelectOption.mjs.map +1 -0
  145. package/dist/TapArea/TapArea.css +53 -0
  146. package/dist/TapArea/TapArea.css.map +1 -0
  147. package/dist/TapArea/TapArea.d.ts +53 -0
  148. package/dist/TapArea/TapArea.js +10 -0
  149. package/dist/TapArea/TapArea.js.map +1 -0
  150. package/dist/TapArea/TapArea.mjs +10 -0
  151. package/dist/TapArea/TapArea.mjs.map +1 -0
  152. package/dist/TextField/TextField.css +1913 -0
  153. package/dist/TextField/TextField.css.map +1 -0
  154. package/dist/TextField/TextField.d.ts +68 -0
  155. package/dist/TextField/TextField.js +14 -0
  156. package/dist/TextField/TextField.js.map +1 -0
  157. package/dist/TextField/TextField.mjs +14 -0
  158. package/dist/TextField/TextField.mjs.map +1 -0
  159. package/dist/Typography/Typography.css +248 -0
  160. package/dist/Typography/Typography.css.map +1 -0
  161. package/dist/Typography/Typography.d.ts +83 -0
  162. package/dist/Typography/Typography.js +10 -0
  163. package/dist/Typography/Typography.js.map +1 -0
  164. package/dist/Typography/Typography.mjs +10 -0
  165. package/dist/Typography/Typography.mjs.map +1 -0
  166. package/dist/__chunks/2JWMSFS7.js +31 -0
  167. package/dist/__chunks/2JWMSFS7.js.map +1 -0
  168. package/dist/__chunks/2O6FDRTF.js +7 -0
  169. package/dist/__chunks/2O6FDRTF.js.map +1 -0
  170. package/dist/__chunks/2PHVTRWC.js +86 -0
  171. package/dist/__chunks/2PHVTRWC.js.map +1 -0
  172. package/dist/__chunks/37CQV3RS.js +111 -0
  173. package/dist/__chunks/37CQV3RS.js.map +1 -0
  174. package/dist/__chunks/3PCHHAIY.mjs +7 -0
  175. package/dist/__chunks/3PCHHAIY.mjs.map +1 -0
  176. package/dist/__chunks/3VUMTAUX.js +68 -0
  177. package/dist/__chunks/3VUMTAUX.js.map +1 -0
  178. package/dist/__chunks/42YPEAFS.js +70 -0
  179. package/dist/__chunks/42YPEAFS.js.map +1 -0
  180. package/dist/__chunks/4PWSK5GI.js +15 -0
  181. package/dist/__chunks/4PWSK5GI.js.map +1 -0
  182. package/dist/__chunks/5AR53MHD.js +1 -0
  183. package/dist/__chunks/5AR53MHD.js.map +1 -0
  184. package/dist/__chunks/5DBWL6IK.js +12 -0
  185. package/dist/__chunks/5DBWL6IK.js.map +1 -0
  186. package/dist/__chunks/5R6HCJP6.mjs +68 -0
  187. package/dist/__chunks/5R6HCJP6.mjs.map +1 -0
  188. package/dist/__chunks/6VWFOSQZ.js +14 -0
  189. package/dist/__chunks/6VWFOSQZ.js.map +1 -0
  190. package/dist/__chunks/A7UVLRKG.mjs +15 -0
  191. package/dist/__chunks/A7UVLRKG.mjs.map +1 -0
  192. package/dist/__chunks/AFINOME7.js +17 -0
  193. package/dist/__chunks/AFINOME7.js.map +1 -0
  194. package/dist/__chunks/AGAHNSZM.js +127 -0
  195. package/dist/__chunks/AGAHNSZM.js.map +1 -0
  196. package/dist/__chunks/AMBZXKUQ.mjs +12 -0
  197. package/dist/__chunks/AMBZXKUQ.mjs.map +1 -0
  198. package/dist/__chunks/BCWLWS7W.mjs +74 -0
  199. package/dist/__chunks/BCWLWS7W.mjs.map +1 -0
  200. package/dist/__chunks/BJXYKZMK.mjs +53 -0
  201. package/dist/__chunks/BJXYKZMK.mjs.map +1 -0
  202. package/dist/__chunks/BSFWQWVJ.js +36 -0
  203. package/dist/__chunks/BSFWQWVJ.js.map +1 -0
  204. package/dist/__chunks/BSWWGQAS.js +111 -0
  205. package/dist/__chunks/BSWWGQAS.js.map +1 -0
  206. package/dist/__chunks/BWTLHCW3.mjs +111 -0
  207. package/dist/__chunks/BWTLHCW3.mjs.map +1 -0
  208. package/dist/__chunks/CATJI2RJ.js +26 -0
  209. package/dist/__chunks/CATJI2RJ.js.map +1 -0
  210. package/dist/__chunks/CGGEM6XS.mjs +96 -0
  211. package/dist/__chunks/CGGEM6XS.mjs.map +1 -0
  212. package/dist/__chunks/CPBWDVD4.mjs +110 -0
  213. package/dist/__chunks/CPBWDVD4.mjs.map +1 -0
  214. package/dist/__chunks/CQ2HIJ62.js +35 -0
  215. package/dist/__chunks/CQ2HIJ62.js.map +1 -0
  216. package/dist/__chunks/CUDAH5IW.mjs +38 -0
  217. package/dist/__chunks/CUDAH5IW.mjs.map +1 -0
  218. package/dist/__chunks/D24RSGYP.js +7 -0
  219. package/dist/__chunks/D24RSGYP.js.map +1 -0
  220. package/dist/__chunks/DVVFHZBW.mjs +120 -0
  221. package/dist/__chunks/DVVFHZBW.mjs.map +1 -0
  222. package/dist/__chunks/EKJ4XOIM.mjs +12 -0
  223. package/dist/__chunks/EKJ4XOIM.mjs.map +1 -0
  224. package/dist/__chunks/ERJ5XXDH.js +96 -0
  225. package/dist/__chunks/ERJ5XXDH.js.map +1 -0
  226. package/dist/__chunks/ERXGNP37.js +7 -0
  227. package/dist/__chunks/ERXGNP37.js.map +1 -0
  228. package/dist/__chunks/F3ZST4RL.js +74 -0
  229. package/dist/__chunks/F3ZST4RL.js.map +1 -0
  230. package/dist/__chunks/FCX7QDZS.mjs +94 -0
  231. package/dist/__chunks/FCX7QDZS.mjs.map +1 -0
  232. package/dist/__chunks/FOTKCGZZ.js +53 -0
  233. package/dist/__chunks/FOTKCGZZ.js.map +1 -0
  234. package/dist/__chunks/FUBK3VZO.js +28 -0
  235. package/dist/__chunks/FUBK3VZO.js.map +1 -0
  236. package/dist/__chunks/FWVHWU47.mjs +7 -0
  237. package/dist/__chunks/FWVHWU47.mjs.map +1 -0
  238. package/dist/__chunks/G4DDTGDI.js +31 -0
  239. package/dist/__chunks/G4DDTGDI.js.map +1 -0
  240. package/dist/__chunks/GPS2XNQI.js +120 -0
  241. package/dist/__chunks/GPS2XNQI.js.map +1 -0
  242. package/dist/__chunks/GVNDZZAU.mjs +14 -0
  243. package/dist/__chunks/GVNDZZAU.mjs.map +1 -0
  244. package/dist/__chunks/HAZN2FCY.mjs +28 -0
  245. package/dist/__chunks/HAZN2FCY.mjs.map +1 -0
  246. package/dist/__chunks/HOUO3WV6.js +14 -0
  247. package/dist/__chunks/HOUO3WV6.js.map +1 -0
  248. package/dist/__chunks/HQVZUEWO.js +22 -0
  249. package/dist/__chunks/HQVZUEWO.js.map +1 -0
  250. package/dist/__chunks/IXDA4ZXP.mjs +1 -0
  251. package/dist/__chunks/IXDA4ZXP.mjs.map +1 -0
  252. package/dist/__chunks/JSEHOGL7.mjs +7 -0
  253. package/dist/__chunks/JSEHOGL7.mjs.map +1 -0
  254. package/dist/__chunks/LJHH6KUW.js +28 -0
  255. package/dist/__chunks/LJHH6KUW.js.map +1 -0
  256. package/dist/__chunks/LKQ7PJ4S.mjs +229 -0
  257. package/dist/__chunks/LKQ7PJ4S.mjs.map +1 -0
  258. package/dist/__chunks/LULBCTQR.js +38 -0
  259. package/dist/__chunks/LULBCTQR.js.map +1 -0
  260. package/dist/__chunks/LZSDWT4M.mjs +110 -0
  261. package/dist/__chunks/LZSDWT4M.mjs.map +1 -0
  262. package/dist/__chunks/M6YFAP6P.mjs +28 -0
  263. package/dist/__chunks/M6YFAP6P.mjs.map +1 -0
  264. package/dist/__chunks/MX7C572C.mjs +36 -0
  265. package/dist/__chunks/MX7C572C.mjs.map +1 -0
  266. package/dist/__chunks/MZEIZAZH.mjs +35 -0
  267. package/dist/__chunks/MZEIZAZH.mjs.map +1 -0
  268. package/dist/__chunks/OGJDUOWP.js +94 -0
  269. package/dist/__chunks/OGJDUOWP.js.map +1 -0
  270. package/dist/__chunks/OQ26OWU4.mjs +111 -0
  271. package/dist/__chunks/OQ26OWU4.mjs.map +1 -0
  272. package/dist/__chunks/PGVLU6C3.mjs +70 -0
  273. package/dist/__chunks/PGVLU6C3.mjs.map +1 -0
  274. package/dist/__chunks/PYNS67IV.js +229 -0
  275. package/dist/__chunks/PYNS67IV.js.map +1 -0
  276. package/dist/__chunks/Q2TIB7ZC.mjs +26 -0
  277. package/dist/__chunks/Q2TIB7ZC.mjs.map +1 -0
  278. package/dist/__chunks/R6CDK4GP.mjs +31 -0
  279. package/dist/__chunks/R6CDK4GP.mjs.map +1 -0
  280. package/dist/__chunks/RRE7PRE5.mjs +86 -0
  281. package/dist/__chunks/RRE7PRE5.mjs.map +1 -0
  282. package/dist/__chunks/RSU3GDHB.mjs +73 -0
  283. package/dist/__chunks/RSU3GDHB.mjs.map +1 -0
  284. package/dist/__chunks/RVT6EXR3.mjs +31 -0
  285. package/dist/__chunks/RVT6EXR3.mjs.map +1 -0
  286. package/dist/__chunks/SAEVPDUP.js +12 -0
  287. package/dist/__chunks/SAEVPDUP.js.map +1 -0
  288. package/dist/__chunks/SXTRSFG5.mjs +14 -0
  289. package/dist/__chunks/SXTRSFG5.mjs.map +1 -0
  290. package/dist/__chunks/TKYRBLSM.js +110 -0
  291. package/dist/__chunks/TKYRBLSM.js.map +1 -0
  292. package/dist/__chunks/TPMQI44L.js +7 -0
  293. package/dist/__chunks/TPMQI44L.js.map +1 -0
  294. package/dist/__chunks/UCMB6MFN.mjs +17 -0
  295. package/dist/__chunks/UCMB6MFN.mjs.map +1 -0
  296. package/dist/__chunks/UNIBFDXV.js +73 -0
  297. package/dist/__chunks/UNIBFDXV.js.map +1 -0
  298. package/dist/__chunks/WCEOAOUO.mjs +127 -0
  299. package/dist/__chunks/WCEOAOUO.mjs.map +1 -0
  300. package/dist/__chunks/WJDAVT5R.mjs +7 -0
  301. package/dist/__chunks/WJDAVT5R.mjs.map +1 -0
  302. package/dist/__chunks/X74O4HUS.js +110 -0
  303. package/dist/__chunks/X74O4HUS.js.map +1 -0
  304. package/dist/__chunks/XFKGXL73.mjs +14 -0
  305. package/dist/__chunks/XFKGXL73.mjs.map +1 -0
  306. package/dist/__chunks/XN5AALLC.mjs +22 -0
  307. package/dist/__chunks/XN5AALLC.mjs.map +1 -0
  308. package/dist/__chunks/YJ7YDIGB.js +14 -0
  309. package/dist/__chunks/YJ7YDIGB.js.map +1 -0
  310. package/dist/colors/allColors.d.ts +3 -0
  311. package/dist/colors/allColors.js +58 -0
  312. package/dist/colors/allColors.js.map +1 -0
  313. package/dist/colors/allColors.mjs +58 -0
  314. package/dist/colors/allColors.mjs.map +1 -0
  315. package/dist/colors/backgroundColor.css +167 -0
  316. package/dist/colors/backgroundColor.css.map +1 -0
  317. package/dist/colors/backgroundColor.d.ts +5 -0
  318. package/dist/colors/backgroundColor.js +10 -0
  319. package/dist/colors/backgroundColor.js.map +1 -0
  320. package/dist/colors/backgroundColor.mjs +10 -0
  321. package/dist/colors/backgroundColor.mjs.map +1 -0
  322. package/dist/colors/foregroundColor.css +167 -0
  323. package/dist/colors/foregroundColor.css.map +1 -0
  324. package/dist/colors/foregroundColor.d.ts +5 -0
  325. package/dist/colors/foregroundColor.js +10 -0
  326. package/dist/colors/foregroundColor.js.map +1 -0
  327. package/dist/colors/foregroundColor.mjs +10 -0
  328. package/dist/colors/foregroundColor.mjs.map +1 -0
  329. package/dist/colors/foregroundTypographyColor.d.ts +5 -0
  330. package/dist/colors/foregroundTypographyColor.js +8 -0
  331. package/dist/colors/foregroundTypographyColor.js.map +1 -0
  332. package/dist/colors/foregroundTypographyColor.mjs +8 -0
  333. package/dist/colors/foregroundTypographyColor.mjs.map +1 -0
  334. package/dist/constants.d.ts +4 -0
  335. package/dist/constants.js +26 -0
  336. package/dist/constants.js.map +1 -0
  337. package/dist/constants.mjs +26 -0
  338. package/dist/constants.mjs.map +1 -0
  339. package/dist/index.d.ts +21 -1250
  340. package/dist/index.js +38 -1676
  341. package/dist/index.js.map +1 -1
  342. package/dist/index.mjs +70 -1682
  343. package/dist/index.mjs.map +1 -1
  344. package/dist/useFocusVisible.d.ts +5 -0
  345. package/dist/useFocusVisible.js +8 -0
  346. package/dist/useFocusVisible.js.map +1 -0
  347. package/dist/useFocusVisible.mjs +8 -0
  348. package/dist/useFocusVisible.mjs.map +1 -0
  349. package/dist/useIsHydrated.d.ts +3 -0
  350. package/dist/useIsHydrated.js +8 -0
  351. package/dist/useIsHydrated.js.map +1 -0
  352. package/dist/useIsHydrated.mjs +8 -0
  353. package/dist/useIsHydrated.mjs.map +1 -0
  354. package/package.json +4 -4
@@ -0,0 +1,110 @@
1
+ import {
2
+ Focus_module_default
3
+ } from "./WJDAVT5R.mjs";
4
+ import {
5
+ Typography_default
6
+ } from "./BCWLWS7W.mjs";
7
+ import {
8
+ useIsHydrated
9
+ } from "./XFKGXL73.mjs";
10
+ import {
11
+ useFocusVisible
12
+ } from "./FCX7QDZS.mjs";
13
+
14
+ // src/RadioButton/RadioButton.tsx
15
+ import { useState } from "react";
16
+ import classnames from "classnames";
17
+
18
+ // css-module:./RadioButton.module.css#css-module
19
+ var RadioButton_module_default = { "radioBaseContainer": "_radioBaseContainer_6h2zg_1", "disabled": "_disabled_6h2zg_9", "cursorDisabled": "_cursorDisabled_6h2zg_13", "cursorEnabled": "_cursorEnabled_6h2zg_17", "smBase": "_smBase_6h2zg_21", "mdBase": "_mdBase_6h2zg_25", "radioStyleOverride": "_radioStyleOverride_6h2zg_29", "smOverride": "_smOverride_6h2zg_34", "mdOverride": "_mdOverride_6h2zg_39", "background": "_background_6h2zg_44", "sm": "_sm_6h2zg_21", "md": "_md_6h2zg_25", "neutralBorder": "_neutralBorder_6h2zg_61", "smCheckedBorder": "_smCheckedBorder_6h2zg_65", "mdCheckedBorder": "_mdCheckedBorder_6h2zg_69", "errorBorderColor": "_errorBorderColor_6h2zg_73", "borderColor": "_borderColor_6h2zg_77" };
20
+
21
+ // src/RadioButton/RadioButton.tsx
22
+ import { jsx, jsxs } from "react/jsx-runtime";
23
+ var RadioButton = ({
24
+ checked = false,
25
+ "data-testid": dataTestId,
26
+ disabled: disabledProp = false,
27
+ error = false,
28
+ id,
29
+ label,
30
+ name,
31
+ onChange,
32
+ size = "md",
33
+ value
34
+ }) => {
35
+ const isHydrated = useIsHydrated();
36
+ const disabled = !isHydrated || disabledProp;
37
+ const [isFocused, setIsFocused] = useState(false);
38
+ const { isFocusVisible } = useFocusVisible();
39
+ const sharedStyles = classnames(RadioButton_module_default.background, RadioButton_module_default[size], {
40
+ [RadioButton_module_default.errorBorderColor]: error,
41
+ [RadioButton_module_default.borderColor]: !error,
42
+ [Focus_module_default.accessibilityOutlineFocus]: isFocused && isFocusVisible
43
+ });
44
+ return /* @__PURE__ */ jsxs(
45
+ "label",
46
+ {
47
+ className: classnames(
48
+ RadioButton_module_default.radioBaseContainer,
49
+ RadioButton_module_default[`cursor${disabled ? "Disabled" : "Enabled"}`],
50
+ {
51
+ [RadioButton_module_default.disabled]: disabled,
52
+ [RadioButton_module_default.smBase]: size === "sm",
53
+ [RadioButton_module_default.mdBase]: size === "md"
54
+ }
55
+ ),
56
+ children: [
57
+ checked ? /* @__PURE__ */ jsx(
58
+ "div",
59
+ {
60
+ className: classnames(sharedStyles, {
61
+ [RadioButton_module_default.mdCheckedBorder]: size === "md",
62
+ [RadioButton_module_default.smCheckedBorder]: size === "sm"
63
+ })
64
+ }
65
+ ) : /* @__PURE__ */ jsx("div", { className: classnames(sharedStyles, RadioButton_module_default.neutralBorder) }),
66
+ /* @__PURE__ */ jsx(
67
+ "input",
68
+ {
69
+ "data-testid": dataTestId,
70
+ type: "radio",
71
+ id,
72
+ name,
73
+ className: classnames(
74
+ RadioButton_module_default.radioStyleOverride,
75
+ RadioButton_module_default[`cursor${disabled ? "Disabled" : "Enabled"}`],
76
+ {
77
+ [RadioButton_module_default.smOverride]: size === "sm",
78
+ [RadioButton_module_default.mdOverride]: size === "md"
79
+ }
80
+ ),
81
+ checked,
82
+ onChange,
83
+ disabled,
84
+ value,
85
+ onFocus: () => {
86
+ setIsFocused(true);
87
+ },
88
+ onBlur: () => {
89
+ setIsFocused(false);
90
+ }
91
+ }
92
+ ),
93
+ label && /* @__PURE__ */ jsx(
94
+ Typography_default,
95
+ {
96
+ size: size === "md" ? 200 : 100,
97
+ color: error ? "destructive-primary" : "gray800",
98
+ children: label
99
+ }
100
+ )
101
+ ]
102
+ }
103
+ );
104
+ };
105
+ var RadioButton_default = RadioButton;
106
+
107
+ export {
108
+ RadioButton_default
109
+ };
110
+ //# sourceMappingURL=LZSDWT4M.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/RadioButton/RadioButton.tsx","css-module:./RadioButton.module.css#css-module"],"sourcesContent":["import React, { type ReactElement, useState } from \"react\";\nimport classnames from \"classnames\";\n\nimport styles from \"./RadioButton.module.css\";\nimport focusStyles from \"../Focus.module.css\";\nimport Typography from \"../Typography/Typography\";\nimport useFocusVisible from \"../useFocusVisible\";\nimport useIsHydrated from \"../useIsHydrated\";\n\n/**\n * [RadioButton](https://cambly-syntax.vercel.app/?path=/docs/components-radiobutton--docs) is a radio button with accompanying text\n */\nconst RadioButton = ({\n checked = false,\n \"data-testid\": dataTestId,\n disabled: disabledProp = false,\n error = false,\n id,\n label,\n name,\n onChange,\n size = \"md\",\n value,\n}: {\n /**\n * Whether or not the radio button is checked\n *\n * @defaultValue false\n */\n checked?: boolean;\n /**\n * Test id for the radio button\n */\n \"data-testid\"?: string;\n /**\n * Whether or not the radio button is disabled\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * Whether to show error color schema\n *\n * @defaultValue false\n */\n error?: boolean;\n /**\n * Id for the the radio button\n */\n id?: string;\n /**\n * Value to show end user\n */\n label: string;\n /**\n * The name of the grouping the radio buttons are in\n */\n name: string;\n /**\n * The callback to be called when the radio button is clicked\n */\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n /**\n * Size of the components\n *\n * * `sm`: 16px\n * * `md`: 24px\n *\n * @defaultValue \"md\"\n */\n size?: \"sm\" | \"md\";\n /**\n * Value of the selected radio option\n */\n value: string | number;\n}): ReactElement => {\n const isHydrated = useIsHydrated();\n const disabled = !isHydrated || disabledProp;\n const [isFocused, setIsFocused] = useState(false);\n const { isFocusVisible } = useFocusVisible();\n\n const sharedStyles = classnames(styles.background, styles[size], {\n [styles.errorBorderColor]: error,\n [styles.borderColor]: !error,\n [focusStyles.accessibilityOutlineFocus]: isFocused && isFocusVisible,\n });\n\n return (\n <label\n className={classnames(\n styles.radioBaseContainer,\n styles[`cursor${disabled ? \"Disabled\" : \"Enabled\"}`],\n {\n [styles.disabled]: disabled,\n [styles.smBase]: size === \"sm\",\n [styles.mdBase]: size === \"md\",\n },\n )}\n >\n {checked ? (\n <div\n className={classnames(sharedStyles, {\n [styles.mdCheckedBorder]: size === \"md\",\n [styles.smCheckedBorder]: size === \"sm\",\n })}\n />\n ) : (\n <div className={classnames(sharedStyles, styles.neutralBorder)} />\n )}\n <input\n data-testid={dataTestId}\n type=\"radio\"\n id={id}\n name={name}\n className={classnames(\n styles.radioStyleOverride,\n styles[`cursor${disabled ? \"Disabled\" : \"Enabled\"}`],\n {\n [styles.smOverride]: size === \"sm\",\n [styles.mdOverride]: size === \"md\",\n },\n )}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n value={value}\n onFocus={() => {\n setIsFocused(true);\n }}\n onBlur={() => {\n setIsFocused(false);\n }}\n />\n {label && (\n <Typography\n size={size === \"md\" ? 200 : 100}\n color={error ? \"destructive-primary\" : \"gray800\"}\n >\n {label}\n </Typography>\n )}\n </label>\n );\n};\n\nexport default RadioButton;\n","import \"/home/runner/work/syntax/syntax/packages/syntax-core/src/RadioButton/RadioButton.module.css\"; export default {\"radioBaseContainer\":\"_radioBaseContainer_6h2zg_1\",\"disabled\":\"_disabled_6h2zg_9\",\"cursorDisabled\":\"_cursorDisabled_6h2zg_13\",\"cursorEnabled\":\"_cursorEnabled_6h2zg_17\",\"smBase\":\"_smBase_6h2zg_21\",\"mdBase\":\"_mdBase_6h2zg_25\",\"radioStyleOverride\":\"_radioStyleOverride_6h2zg_29\",\"smOverride\":\"_smOverride_6h2zg_34\",\"mdOverride\":\"_mdOverride_6h2zg_39\",\"background\":\"_background_6h2zg_44\",\"sm\":\"_sm_6h2zg_21\",\"md\":\"_md_6h2zg_25\",\"neutralBorder\":\"_neutralBorder_6h2zg_61\",\"smCheckedBorder\":\"_smCheckedBorder_6h2zg_65\",\"mdCheckedBorder\":\"_mdCheckedBorder_6h2zg_69\",\"errorBorderColor\":\"_errorBorderColor_6h2zg_73\",\"borderColor\":\"_borderColor_6h2zg_77\"}"],"mappings":";;;;;;;;;;;;;;AAAA,SAAmC,gBAAgB;AACnD,OAAO,gBAAgB;;;ACD+E,IAAO,6BAAQ,EAAC,sBAAqB,+BAA8B,YAAW,qBAAoB,kBAAiB,4BAA2B,iBAAgB,2BAA0B,UAAS,oBAAmB,UAAS,oBAAmB,sBAAqB,gCAA+B,cAAa,wBAAuB,cAAa,wBAAuB,cAAa,wBAAuB,MAAK,gBAAe,MAAK,gBAAe,iBAAgB,2BAA0B,mBAAkB,6BAA4B,mBAAkB,6BAA4B,oBAAmB,8BAA6B,eAAc,wBAAuB;;;ADwFrvB,SAYI,KAZJ;AA5EJ,IAAM,cAAc,CAAC;AAAA,EACnB,UAAU;AAAA,EACV,eAAe;AAAA,EACf,UAAU,eAAe;AAAA,EACzB,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AACF,MAoDoB;AAClB,QAAM,aAAa,cAAc;AACjC,QAAM,WAAW,CAAC,cAAc;AAChC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,EAAE,eAAe,IAAI,gBAAgB;AAE3C,QAAM,eAAe,WAAW,2BAAO,YAAY,2BAAO,IAAI,GAAG;AAAA,IAC/D,CAAC,2BAAO,gBAAgB,GAAG;AAAA,IAC3B,CAAC,2BAAO,WAAW,GAAG,CAAC;AAAA,IACvB,CAAC,qBAAY,yBAAyB,GAAG,aAAa;AAAA,EACxD,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,2BAAO;AAAA,QACP,2BAAO,SAAS,WAAW,aAAa,WAAW;AAAA,QACnD;AAAA,UACE,CAAC,2BAAO,QAAQ,GAAG;AAAA,UACnB,CAAC,2BAAO,MAAM,GAAG,SAAS;AAAA,UAC1B,CAAC,2BAAO,MAAM,GAAG,SAAS;AAAA,QAC5B;AAAA,MACF;AAAA,MAEC;AAAA,kBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,WAAW,cAAc;AAAA,cAClC,CAAC,2BAAO,eAAe,GAAG,SAAS;AAAA,cACnC,CAAC,2BAAO,eAAe,GAAG,SAAS;AAAA,YACrC,CAAC;AAAA;AAAA,QACH,IAEA,oBAAC,SAAI,WAAW,WAAW,cAAc,2BAAO,aAAa,GAAG;AAAA,QAElE;AAAA,UAAC;AAAA;AAAA,YACC,eAAa;AAAA,YACb,MAAK;AAAA,YACL;AAAA,YACA;AAAA,YACA,WAAW;AAAA,cACT,2BAAO;AAAA,cACP,2BAAO,SAAS,WAAW,aAAa,WAAW;AAAA,cACnD;AAAA,gBACE,CAAC,2BAAO,UAAU,GAAG,SAAS;AAAA,gBAC9B,CAAC,2BAAO,UAAU,GAAG,SAAS;AAAA,cAChC;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,SAAS,MAAM;AACb,2BAAa,IAAI;AAAA,YACnB;AAAA,YACA,QAAQ,MAAM;AACZ,2BAAa,KAAK;AAAA,YACpB;AAAA;AAAA,QACF;AAAA,QACC,SACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,SAAS,OAAO,MAAM;AAAA,YAC5B,OAAO,QAAQ,wBAAwB;AAAA,YAEtC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,sBAAQ;","names":[]}
@@ -0,0 +1,28 @@
1
+ // src/Avatar/Avatar.tsx
2
+ import classNames from "classnames";
3
+
4
+ // css-module:./Avatar.module.css#css-module
5
+ var Avatar_module_default = { "avatar": "_avatar_1anoj_5", "sm": "_sm_1anoj_13", "md": "_md_1anoj_18", "lg": "_lg_1anoj_23", "xl": "_xl_1anoj_28" };
6
+
7
+ // src/Avatar/Avatar.tsx
8
+ import { jsx } from "react/jsx-runtime";
9
+ var Avatar = ({
10
+ src,
11
+ accessibilityLabel,
12
+ size = "md"
13
+ }) => {
14
+ return /* @__PURE__ */ jsx(
15
+ "img",
16
+ {
17
+ alt: accessibilityLabel,
18
+ src,
19
+ className: classNames(Avatar_module_default.avatar, Avatar_module_default[size])
20
+ }
21
+ );
22
+ };
23
+ var Avatar_default = Avatar;
24
+
25
+ export {
26
+ Avatar_default
27
+ };
28
+ //# sourceMappingURL=M6YFAP6P.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Avatar/Avatar.tsx","css-module:./Avatar.module.css#css-module"],"sourcesContent":["import classNames from \"classnames\";\nimport styles from \"./Avatar.module.css\";\n\n/**\n * [Avatar](https://cambly-syntax.vercel.app/?path=/docs/components-avatar--docs) is a circular image that represents a user.\n */\nconst Avatar = ({\n src,\n accessibilityLabel,\n size = \"md\",\n}: {\n /**\n * URL of the image to display as the avatar.\n */\n src: string;\n /**\n * Alt text to use for the image.\n * This should describe the image to people using screen readers.\n */\n accessibilityLabel: string;\n /**\n * Size of the avatar.\n *\n * * `sm`: 24px\n * * `md`: 40px\n * * `lg`: 72px\n * * `xl`: 128px\n *\n * @defaultValue `md`\n */\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n}): JSX.Element => {\n return (\n <img\n alt={accessibilityLabel}\n src={src}\n className={classNames(styles.avatar, styles[size])}\n />\n );\n};\n\nexport default Avatar;\n","import \"/home/runner/work/syntax/syntax/packages/syntax-core/src/Avatar/Avatar.module.css\"; export default {\"avatar\":\"_avatar_1anoj_5\",\"sm\":\"_sm_1anoj_13\",\"md\":\"_md_1anoj_18\",\"lg\":\"_lg_1anoj_23\",\"xl\":\"_xl_1anoj_28\"}"],"mappings":";AAAA,OAAO,gBAAgB;;;ACAqE,IAAO,wBAAQ,EAAC,UAAS,mBAAkB,MAAK,gBAAe,MAAK,gBAAe,MAAK,gBAAe,MAAK,eAAc;;;ADiClN;AA3BJ,IAAM,SAAS,CAAC;AAAA,EACd;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAqBmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW,WAAW,sBAAO,QAAQ,sBAAO,IAAI,CAAC;AAAA;AAAA,EACnD;AAEJ;AAEA,IAAO,iBAAQ;","names":[]}
@@ -0,0 +1,36 @@
1
+ import {
2
+ Typography_default
3
+ } from "./BCWLWS7W.mjs";
4
+
5
+ // src/Heading/Heading.tsx
6
+ import { jsx } from "react/jsx-runtime";
7
+ var Heading = ({
8
+ align = "start",
9
+ as = "h1",
10
+ children,
11
+ color = "gray900",
12
+ "data-testid": dataTestId,
13
+ lineClamp,
14
+ size = 500
15
+ }) => {
16
+ const weight = [700, 800].includes(size) ? "heavy" : "bold";
17
+ return /* @__PURE__ */ jsx(
18
+ Typography_default,
19
+ {
20
+ align,
21
+ as,
22
+ color,
23
+ "data-testid": dataTestId,
24
+ lineClamp,
25
+ size,
26
+ weight,
27
+ children
28
+ }
29
+ );
30
+ };
31
+ var Heading_default = Heading;
32
+
33
+ export {
34
+ Heading_default
35
+ };
36
+ //# sourceMappingURL=MX7C572C.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Heading/Heading.tsx"],"sourcesContent":["import { type ReactElement, type ReactNode } from \"react\";\nimport { type Color } from \"../constants\";\nimport Typography from \"../Typography/Typography\";\n\n/**\n * [Heading](https://cambly-syntax.vercel.app/?path=/docs/components-heading--docs) enforces a consistent style & accessibility best practices for headings.\n */\nconst Heading = ({\n align = \"start\",\n as = \"h1\",\n children,\n color = \"gray900\",\n \"data-testid\": dataTestId,\n lineClamp,\n size = 500,\n}: {\n /**\n * Aligns the text to the left, right, or center of the container.\n * * `start` and `end` will align the text to the left or right of the container depending on the locale.\n * * `forceLeft` and `forceRight` will align the text to the left or right of the container regardless of the locale (should be used sparingly).\n *\n * @defaultValue \"start\"\n */\n align?: \"start\" | \"end\" | \"forceLeft\" | \"center\" | \"forceRight\";\n /**\n * DOM element to render as.\n *\n * @defaultValue \"h1\"\n */\n as?: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n /**\n * The text to be rendered\n */\n children?: ReactNode;\n /**\n * The color of the text.\n *\n * @defaultValue \"gray900\"\n */\n color?: (typeof Color)[number];\n /**\n * Test id for the text.\n */\n \"data-testid\"?: string;\n /**\n * The number of lines we should truncate the text at\n */\n lineClamp?: number | undefined;\n /**\n * Size of the text.\n *\n * * `500`: 20px\n * * `600`: 28px\n * * `700`: 40px\n * * `800`: 64px\n *\n * @defaultValue 500\n */\n size?: 500 | 600 | 700 | 800;\n}): ReactElement => {\n const weight = [700, 800].includes(size) ? \"heavy\" : \"bold\";\n return (\n <Typography\n align={align}\n as={as}\n color={color}\n data-testid={dataTestId}\n lineClamp={lineClamp}\n size={size}\n weight={weight}\n >\n {children}\n </Typography>\n );\n};\n\nexport default Heading;\n"],"mappings":";;;;;AA8DI;AAvDJ,IAAM,UAAU,CAAC;AAAA,EACf,QAAQ;AAAA,EACR,KAAK;AAAA,EACL;AAAA,EACA,QAAQ;AAAA,EACR,eAAe;AAAA,EACf;AAAA,EACA,OAAO;AACT,MA4CoB;AAClB,QAAM,SAAS,CAAC,KAAK,GAAG,EAAE,SAAS,IAAI,IAAI,UAAU;AACrD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAa;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,kBAAQ;","names":[]}
@@ -0,0 +1,35 @@
1
+ import {
2
+ Box_default
3
+ } from "./LKQ7PJ4S.mjs";
4
+
5
+ // src/Card/Card.tsx
6
+ import { jsx } from "react/jsx-runtime";
7
+ function Card({
8
+ children,
9
+ size,
10
+ "data-testid": dataTestId
11
+ }) {
12
+ const sizeWidth = {
13
+ sm: 352,
14
+ lg: 744
15
+ };
16
+ return /* @__PURE__ */ jsx(
17
+ Box_default,
18
+ {
19
+ rounding: "lg",
20
+ padding: 5,
21
+ smPadding: 7,
22
+ lgPadding: 7,
23
+ maxWidth: size && sizeWidth[size],
24
+ width: "100%",
25
+ backgroundColor: "white",
26
+ "data-testid": dataTestId,
27
+ children
28
+ }
29
+ );
30
+ }
31
+
32
+ export {
33
+ Card
34
+ };
35
+ //# sourceMappingURL=MZEIZAZH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Card/Card.tsx"],"sourcesContent":["import Box from \"../Box/Box\";\n\nconst DeprecatedCardSizes = [\"sm\", \"lg\"] as const;\n\ntype CardType = {\n /**\n * Test id for the button\n */\n \"data-testid\"?: string;\n /**\n * The child components to render within Card.\n */\n children: JSX.Element;\n /**\n * The size of the card\n *\n * `sm`: 352px\n * `lg`: 744px\n *\n * @deprecated Card width should be controlled by the parent container\n * @defaultValue `undefined`\n */\n size?: (typeof DeprecatedCardSizes)[number];\n};\n\n/**\n * [Card](https://cambly-syntax.vercel.app/?path=/docs/components-card--docs) is a basic container component to apply consistent styling and render child components.\n */\nexport default function Card({\n children,\n size,\n \"data-testid\": dataTestId,\n}: CardType): JSX.Element {\n const sizeWidth = {\n sm: 352,\n lg: 744,\n } as const;\n\n return (\n <Box\n rounding=\"lg\"\n padding={5}\n smPadding={7}\n lgPadding={7}\n maxWidth={size && sizeWidth[size]}\n width=\"100%\"\n backgroundColor=\"white\"\n data-testid={dataTestId}\n >\n {children}\n </Box>\n );\n}\n"],"mappings":";;;;;AAuCI;AAXW,SAAR,KAAsB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAA0B;AACxB,QAAM,YAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW;AAAA,MACX,UAAU,QAAQ,UAAU,IAAI;AAAA,MAChC,OAAM;AAAA,MACN,iBAAgB;AAAA,MAChB,eAAa;AAAA,MAEZ;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/useFocusVisible.tsx
2
+ var _react = require('react');
3
+ var hasSetupGlobalListeners = false;
4
+ var currentModality = null;
5
+ var changeHandlers = /* @__PURE__ */ new Set();
6
+ var hasEventBeforeFocus = false;
7
+ var isMac = (
8
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
9
+ typeof window !== "undefined" && window.navigator != null ? (
10
+ // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
11
+ /^Mac/.test(window.navigator.platform)
12
+ ) : false
13
+ );
14
+ function isValidKey(e) {
15
+ return !(e.metaKey || !isMac && e.altKey || e.ctrlKey);
16
+ }
17
+ function triggerChangeHandlers(modality, e) {
18
+ changeHandlers.forEach((handler) => {
19
+ handler(modality, e);
20
+ });
21
+ }
22
+ function handleKeyboardEvent(e) {
23
+ hasEventBeforeFocus = true;
24
+ if (isValidKey(e)) {
25
+ currentModality = "keyboard";
26
+ triggerChangeHandlers("keyboard", e);
27
+ }
28
+ }
29
+ function handlePointerEvent(e) {
30
+ currentModality = "pointer";
31
+ if (e.type === "mousedown" || e.type === "pointerdown") {
32
+ hasEventBeforeFocus = true;
33
+ triggerChangeHandlers("pointer", e);
34
+ }
35
+ }
36
+ function handleFocusEvent(e) {
37
+ if (e.target === window || e.target === document) {
38
+ return;
39
+ }
40
+ if (!hasEventBeforeFocus) {
41
+ currentModality = "keyboard";
42
+ triggerChangeHandlers("keyboard", e);
43
+ }
44
+ hasEventBeforeFocus = false;
45
+ }
46
+ function handleWindowBlur() {
47
+ hasEventBeforeFocus = false;
48
+ }
49
+ function isFocusVisible() {
50
+ return currentModality !== "pointer";
51
+ }
52
+ function setupGlobalFocusEvents() {
53
+ if (typeof window === "undefined" || hasSetupGlobalListeners) {
54
+ return;
55
+ }
56
+ const { focus } = HTMLElement.prototype;
57
+ HTMLElement.prototype.focus = function focusElement(...args) {
58
+ hasEventBeforeFocus = true;
59
+ focus.apply(this, args);
60
+ };
61
+ document.addEventListener("keydown", handleKeyboardEvent, true);
62
+ document.addEventListener("keyup", handleKeyboardEvent, true);
63
+ window.addEventListener("focus", handleFocusEvent, true);
64
+ window.addEventListener("blur", handleWindowBlur, false);
65
+ if (typeof PointerEvent !== "undefined") {
66
+ document.addEventListener("pointerdown", handlePointerEvent, true);
67
+ document.addEventListener("pointermove", handlePointerEvent, true);
68
+ document.addEventListener("pointerup", handlePointerEvent, true);
69
+ } else {
70
+ document.addEventListener("mousedown", handlePointerEvent, true);
71
+ document.addEventListener("mousemove", handlePointerEvent, true);
72
+ document.addEventListener("mouseup", handlePointerEvent, true);
73
+ }
74
+ hasSetupGlobalListeners = true;
75
+ }
76
+ function useFocusVisible() {
77
+ setupGlobalFocusEvents();
78
+ const [isFocusVisibleState, setFocusVisible] = _react.useState.call(void 0, isFocusVisible());
79
+ _react.useEffect.call(void 0, () => {
80
+ const handler = () => {
81
+ setFocusVisible(isFocusVisible());
82
+ };
83
+ changeHandlers.add(handler);
84
+ return () => {
85
+ changeHandlers.delete(handler);
86
+ };
87
+ }, []);
88
+ return { isFocusVisible: isFocusVisibleState };
89
+ }
90
+
91
+
92
+
93
+ exports.useFocusVisible = useFocusVisible;
94
+ //# sourceMappingURL=OGJDUOWP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/useFocusVisible.tsx"],"names":[],"mappings":";AAIA,SAAS,UAAU,iBAAiB;AAMpC,IAAI,0BAA0B;AAC9B,IAAI,kBAAmC;AACvC,IAAM,iBAAiB,oBAAI,IAAa;AACxC,IAAI,sBAAsB;AAE1B,IAAM;AAAA;AAAA,EAEJ,OAAO,WAAW,eAAe,OAAO,aAAa;AAAA;AAAA,IAEjD,OAAO,KAAK,OAAO,UAAU,QAAQ;AAAA,MACrC;AAAA;AAEN,SAAS,WAAW,GAAkB;AACpC,SAAO,EAAE,EAAE,WAAY,CAAC,SAAS,EAAE,UAAW,EAAE;AAClD;AAEA,SAAS,sBAAsB,UAAoB,GAAiB;AAClE,iBAAe,QAAQ,CAAC,YAAY;AAClC,YAAQ,UAAU,CAAC;AAAA,EACrB,CAAC;AACH;AAEA,SAAS,oBAAoB,GAAkB;AAC7C,wBAAsB;AACtB,MAAI,WAAW,CAAC,GAAG;AACjB,sBAAkB;AAClB,0BAAsB,YAAY,CAAC;AAAA,EACrC;AACF;AAEA,SAAS,mBAAmB,GAA8B;AACxD,oBAAkB;AAClB,MAAI,EAAE,SAAS,eAAe,EAAE,SAAS,eAAe;AACtD,0BAAsB;AACtB,0BAAsB,WAAW,CAAC;AAAA,EACpC;AACF;AAEA,SAAS,iBAAiB,GAAe;AAIvC,MAAI,EAAE,WAAW,UAAU,EAAE,WAAW,UAAU;AAChD;AAAA,EACF;AAIA,MAAI,CAAC,qBAAqB;AACxB,sBAAkB;AAClB,0BAAsB,YAAY,CAAC;AAAA,EACrC;AAEA,wBAAsB;AACxB;AAEA,SAAS,mBAAmB;AAG1B,wBAAsB;AACxB;AAEA,SAAS,iBAA0B;AACjC,SAAO,oBAAoB;AAC7B;AAEA,SAAS,yBAAyB;AAChC,MAAI,OAAO,WAAW,eAAe,yBAAyB;AAC5D;AAAA,EACF;AAQA,QAAM,EAAE,MAAM,IAAI,YAAY;AAE9B,cAAY,UAAU,QAAQ,SAAS,gBAAgB,MAAM;AAC3D,0BAAsB;AACtB,UAAM,MAAM,MAAM,IAAI;AAAA,EACxB;AAEA,WAAS,iBAAiB,WAAW,qBAAqB,IAAI;AAC9D,WAAS,iBAAiB,SAAS,qBAAqB,IAAI;AAI5D,SAAO,iBAAiB,SAAS,kBAAkB,IAAI;AACvD,SAAO,iBAAiB,QAAQ,kBAAkB,KAAK;AAEvD,MAAI,OAAO,iBAAiB,aAAa;AACvC,aAAS,iBAAiB,eAAe,oBAAoB,IAAI;AACjE,aAAS,iBAAiB,eAAe,oBAAoB,IAAI;AACjE,aAAS,iBAAiB,aAAa,oBAAoB,IAAI;AAAA,EACjE,OAAO;AACL,aAAS,iBAAiB,aAAa,oBAAoB,IAAI;AAC/D,aAAS,iBAAiB,aAAa,oBAAoB,IAAI;AAC/D,aAAS,iBAAiB,WAAW,oBAAoB,IAAI;AAAA,EAC/D;AAEA,4BAA0B;AAC5B;AAEe,SAAR,kBAEL;AACA,yBAAuB;AACvB,QAAM,CAAC,qBAAqB,eAAe,IAAI,SAAS,eAAe,CAAC;AACxE,YAAU,MAAM;AACd,UAAM,UAAU,MAAM;AACpB,sBAAgB,eAAe,CAAC;AAAA,IAClC;AAEA,mBAAe,IAAI,OAAO;AAC1B,WAAO,MAAM;AACX,qBAAe,OAAO,OAAO;AAAA,IAC/B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,gBAAgB,oBAAoB;AAC/C","sourcesContent":["// Portions of the code in this file are based on code from react & react-spectrum:\n// https://github.com/facebook/react/blob/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions/events/src/dom/create-event-handle/Focus.js\n// https://github.com/adobe/react-spectrum/blob/c700898916bbd076bcc63e49d77c16d80623a8e7/packages/@react-aria/interactions/src/useFocusVisible.ts\n\nimport { useState, useEffect } from \"react\";\n\ntype Modality = \"keyboard\" | \"pointer\";\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\n\nlet hasSetupGlobalListeners = false;\nlet currentModality: Modality | null = null;\nconst changeHandlers = new Set<Handler>();\nlet hasEventBeforeFocus = false;\n\nconst isMac =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof window !== \"undefined\" && window.navigator != null\n ? // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n /^Mac/.test(window.navigator.platform)\n : false;\n\nfunction isValidKey(e: KeyboardEvent) {\n return !(e.metaKey || (!isMac && e.altKey) || e.ctrlKey);\n}\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n changeHandlers.forEach((handler) => {\n handler(modality, e);\n });\n}\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n hasEventBeforeFocus = true;\n if (isValidKey(e)) {\n currentModality = \"keyboard\";\n triggerChangeHandlers(\"keyboard\", e);\n }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n currentModality = \"pointer\";\n if (e.type === \"mousedown\" || e.type === \"pointerdown\") {\n hasEventBeforeFocus = true;\n triggerChangeHandlers(\"pointer\", e);\n }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document) {\n return;\n }\n\n // If a focus event occurs without a preceding keyboard or pointer event, switch to keyboard modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!hasEventBeforeFocus) {\n currentModality = \"keyboard\";\n triggerChangeHandlers(\"keyboard\", e);\n }\n\n hasEventBeforeFocus = false;\n}\n\nfunction handleWindowBlur() {\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n hasEventBeforeFocus = false;\n}\n\nfunction isFocusVisible(): boolean {\n return currentModality !== \"pointer\";\n}\n\nfunction setupGlobalFocusEvents() {\n if (typeof window === \"undefined\" || hasSetupGlobalListeners) {\n return;\n }\n\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n // $FlowExpectedError[method-unbinding]\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { focus } = HTMLElement.prototype;\n // $FlowIssue[cannot-write]\n HTMLElement.prototype.focus = function focusElement(...args) {\n hasEventBeforeFocus = true;\n focus.apply(this, args);\n };\n\n document.addEventListener(\"keydown\", handleKeyboardEvent, true);\n document.addEventListener(\"keyup\", handleKeyboardEvent, true);\n\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n window.addEventListener(\"focus\", handleFocusEvent, true);\n window.addEventListener(\"blur\", handleWindowBlur, false);\n\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerdown\", handlePointerEvent, true);\n document.addEventListener(\"pointermove\", handlePointerEvent, true);\n document.addEventListener(\"pointerup\", handlePointerEvent, true);\n } else {\n document.addEventListener(\"mousedown\", handlePointerEvent, true);\n document.addEventListener(\"mousemove\", handlePointerEvent, true);\n document.addEventListener(\"mouseup\", handlePointerEvent, true);\n }\n\n hasSetupGlobalListeners = true;\n}\n\nexport default function useFocusVisible(): {\n isFocusVisible: boolean;\n} {\n setupGlobalFocusEvents();\n const [isFocusVisibleState, setFocusVisible] = useState(isFocusVisible());\n useEffect(() => {\n const handler = () => {\n setFocusVisible(isFocusVisible());\n };\n\n changeHandlers.add(handler);\n return () => {\n changeHandlers.delete(handler);\n };\n }, []);\n\n return { isFocusVisible: isFocusVisibleState };\n}\n"]}
@@ -0,0 +1,111 @@
1
+ import {
2
+ rounding_module_default
3
+ } from "./3PCHHAIY.mjs";
4
+ import {
5
+ useIsHydrated
6
+ } from "./XFKGXL73.mjs";
7
+ import {
8
+ __spreadProps,
9
+ __spreadValues
10
+ } from "./CUDAH5IW.mjs";
11
+
12
+ // src/TapArea/TapArea.tsx
13
+ import { forwardRef, useReducer } from "react";
14
+ import classNames from "classnames";
15
+
16
+ // css-module:./TapArea.module.css#css-module
17
+ var TapArea_module_default = { "tapArea": "_tapArea_g6gkz_1", "fullWidth": "_fullWidth_g6gkz_5", "disabled": "_disabled_g6gkz_9", "enabled": "_enabled_g6gkz_16", "overlay": "_overlay_g6gkz_29", "hoveredOrFocussed": "_hoveredOrFocussed_g6gkz_39" };
18
+
19
+ // src/TapArea/TapArea.tsx
20
+ import { jsx, jsxs } from "react/jsx-runtime";
21
+ function reducer(state, action) {
22
+ switch (action.type) {
23
+ case "BLUR":
24
+ return __spreadProps(__spreadValues({}, state), { focussed: false });
25
+ case "FOCUS":
26
+ return __spreadProps(__spreadValues({}, state), { focussed: true });
27
+ case "MOUSE_ENTER":
28
+ return __spreadProps(__spreadValues({}, state), { hovered: true });
29
+ case "MOUSE_LEAVE":
30
+ return __spreadProps(__spreadValues({}, state), { hovered: false });
31
+ default:
32
+ return state;
33
+ }
34
+ }
35
+ var TapArea = forwardRef(
36
+ ({
37
+ children,
38
+ accessibilityLabel,
39
+ "data-testid": dataTestId,
40
+ disabled: disabledProp = false,
41
+ fullWidth = true,
42
+ onClick,
43
+ rounding = "none",
44
+ tabIndex = 0
45
+ }, ref) => {
46
+ const isHydrated = useIsHydrated();
47
+ const disabled = !isHydrated || disabledProp;
48
+ const [{ hovered, focussed }, dispatch] = useReducer(reducer, {
49
+ hovered: false,
50
+ focussed: false
51
+ });
52
+ const handleClick = (event) => {
53
+ if (disabled) {
54
+ } else {
55
+ event.currentTarget.blur();
56
+ onClick(event);
57
+ }
58
+ };
59
+ const handleKeyDown = (event) => {
60
+ if (disabled)
61
+ return;
62
+ if (event.key === "Enter" || event.key === " " || event.key === "Space") {
63
+ event.preventDefault();
64
+ onClick(event);
65
+ }
66
+ };
67
+ const isHoveredOrFocussed = !disabled && (hovered || focussed);
68
+ return /* @__PURE__ */ jsxs(
69
+ "div",
70
+ {
71
+ "aria-disabled": disabled,
72
+ "aria-label": accessibilityLabel,
73
+ className: classNames(
74
+ TapArea_module_default.tapArea,
75
+ TapArea_module_default[`${disabled ? "disabled" : "enabled"}`],
76
+ fullWidth && TapArea_module_default.fullWidth,
77
+ isHoveredOrFocussed && TapArea_module_default.hoveredOrFocussed
78
+ ),
79
+ "data-testid": dataTestId,
80
+ onClick: handleClick,
81
+ onKeyDown: handleKeyDown,
82
+ onMouseEnter: () => dispatch({ type: "MOUSE_ENTER" }),
83
+ onMouseLeave: () => dispatch({ type: "MOUSE_LEAVE" }),
84
+ onFocus: () => dispatch({ type: "FOCUS" }),
85
+ onBlur: () => dispatch({ type: "BLUR" }),
86
+ ref,
87
+ role: "button",
88
+ tabIndex: disabled ? void 0 : tabIndex,
89
+ children: [
90
+ !disabled && (hovered || focussed) && /* @__PURE__ */ jsx(
91
+ "div",
92
+ {
93
+ className: classNames(
94
+ TapArea_module_default.overlay,
95
+ rounding !== "none" && rounding_module_default[`rounding${rounding}`]
96
+ )
97
+ }
98
+ ),
99
+ children
100
+ ]
101
+ }
102
+ );
103
+ }
104
+ );
105
+ TapArea.displayName = "TapArea";
106
+ var TapArea_default = TapArea;
107
+
108
+ export {
109
+ TapArea_default
110
+ };
111
+ //# sourceMappingURL=OQ26OWU4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/TapArea/TapArea.tsx","css-module:./TapArea.module.css#css-module"],"sourcesContent":["import React, { type ReactNode, forwardRef, useReducer } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./TapArea.module.css\";\nimport roundingStyles from \"../rounding.module.css\";\nimport useIsHydrated from \"../useIsHydrated\";\n\ntype TapAreaProps = {\n /**\n * The children to be rendered inside the tap area.\n */\n children?: ReactNode;\n /**\n * The label to be used for accessibility\n */\n accessibilityLabel?: string;\n /**\n * Test id for the tap area\n */\n \"data-testid\"?: string;\n /**\n * If `true`, the tap area will be disabled\n *\n * @defaultValue false\n */\n disabled?: boolean;\n /**\n * If `true`, the tap area will be full width\n */\n fullWidth?: boolean;\n /**\n * The callback to be called when the tap area is clicked\n */\n onClick: (event: React.SyntheticEvent<HTMLDivElement>) => void;\n /**\n * Border radius of the tap area.\n *\n * * `none`: 0px\n * * `sm`: 8px\n * * `md`: 12px\n * * `lg`: 16px\n * * `xl`: 32px\n * * `full`: 999px\n *\n * @defaultValue \"none\"\n */\n rounding?: \"xl\" | \"lg\" | \"md\" | \"sm\" | \"full\" | \"none\";\n /**\n * The tab index of the tap area\n */\n tabIndex?: 0 | -1;\n};\n\nfunction reducer(\n state: {\n hovered: boolean;\n focussed: boolean;\n },\n action: {\n type: \"BLUR\" | \"FOCUS\" | \"MOUSE_ENTER\" | \"MOUSE_LEAVE\";\n },\n) {\n switch (action.type) {\n case \"BLUR\":\n return { ...state, focussed: false };\n case \"FOCUS\":\n return { ...state, focussed: true };\n case \"MOUSE_ENTER\":\n return { ...state, hovered: true };\n case \"MOUSE_LEAVE\":\n return { ...state, hovered: false };\n default:\n return state;\n }\n}\n\n/**\n * [TapArea](https://cambly-syntax.vercel.app/?path=/docs/components-taparea--docs) allows components to be clickable and touchable in an accessible way.\n */\nconst TapArea = forwardRef<HTMLDivElement, TapAreaProps>(\n (\n {\n children,\n accessibilityLabel,\n \"data-testid\": dataTestId,\n disabled: disabledProp = false,\n fullWidth = true,\n onClick,\n rounding = \"none\",\n tabIndex = 0,\n }: TapAreaProps,\n ref,\n ) => {\n const isHydrated = useIsHydrated();\n const disabled = !isHydrated || disabledProp;\n const [{ hovered, focussed }, dispatch] = useReducer(reducer, {\n hovered: false,\n focussed: false,\n });\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n if (disabled) {\n undefined;\n } else {\n event.currentTarget.blur();\n onClick(event);\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (disabled) return;\n if (event.key === \"Enter\" || event.key === \" \" || event.key === \"Space\") {\n event.preventDefault();\n onClick(event);\n }\n };\n\n const isHoveredOrFocussed = !disabled && (hovered || focussed);\n\n return (\n <div\n aria-disabled={disabled}\n aria-label={accessibilityLabel}\n className={classNames(\n styles.tapArea,\n styles[`${disabled ? \"disabled\" : \"enabled\"}`],\n fullWidth && styles.fullWidth,\n isHoveredOrFocussed && styles.hoveredOrFocussed,\n )}\n data-testid={dataTestId}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => dispatch({ type: \"MOUSE_ENTER\" })}\n onMouseLeave={() => dispatch({ type: \"MOUSE_LEAVE\" })}\n onFocus={() => dispatch({ type: \"FOCUS\" })}\n onBlur={() => dispatch({ type: \"BLUR\" })}\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? undefined : tabIndex}\n >\n {!disabled && (hovered || focussed) && (\n <div\n className={classNames(\n styles.overlay,\n rounding !== \"none\" && roundingStyles[`rounding${rounding}`],\n )}\n />\n )}\n {children}\n </div>\n );\n },\n);\n\nTapArea.displayName = \"TapArea\";\n\nexport default TapArea;\n","import \"/home/runner/work/syntax/syntax/packages/syntax-core/src/TapArea/TapArea.module.css\"; export default {\"tapArea\":\"_tapArea_g6gkz_1\",\"fullWidth\":\"_fullWidth_g6gkz_5\",\"disabled\":\"_disabled_g6gkz_9\",\"enabled\":\"_enabled_g6gkz_16\",\"overlay\":\"_overlay_g6gkz_29\",\"hoveredOrFocussed\":\"_hoveredOrFocussed_g6gkz_39\"}"],"mappings":";;;;;;;;;;;;AAAA,SAAgC,YAAY,kBAAkB;AAC9D,OAAO,gBAAgB;;;ACDuE,IAAO,yBAAQ,EAAC,WAAU,oBAAmB,aAAY,sBAAqB,YAAW,qBAAoB,WAAU,qBAAoB,WAAU,qBAAoB,qBAAoB,8BAA6B;;;ADyHlT,SAqBI,KArBJ;AArEN,SAAS,QACP,OAIA,QAGA;AACA,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,iCAAK,QAAL,EAAY,UAAU,MAAM;AAAA,IACrC,KAAK;AACH,aAAO,iCAAK,QAAL,EAAY,UAAU,KAAK;AAAA,IACpC,KAAK;AACH,aAAO,iCAAK,QAAL,EAAY,SAAS,KAAK;AAAA,IACnC,KAAK;AACH,aAAO,iCAAK,QAAL,EAAY,SAAS,MAAM;AAAA,IACpC;AACE,aAAO;AAAA,EACX;AACF;AAKA,IAAM,UAAU;AAAA,EACd,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,UAAU,eAAe;AAAA,IACzB,YAAY;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,IACX,WAAW;AAAA,EACb,GACA,QACG;AACH,UAAM,aAAa,cAAc;AACjC,UAAM,WAAW,CAAC,cAAc;AAChC,UAAM,CAAC,EAAE,SAAS,SAAS,GAAG,QAAQ,IAAI,WAAW,SAAS;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,cAAuD,CAAC,UAAU;AACtE,UAAI,UAAU;AAAA,MAEd,OAAO;AACL,cAAM,cAAc,KAAK;AACzB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,UAAM,gBAA4D,CAChE,UACG;AACH,UAAI;AAAU;AACd,UAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS;AACvE,cAAM,eAAe;AACrB,gBAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,UAAM,sBAAsB,CAAC,aAAa,WAAW;AAErD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,iBAAe;AAAA,QACf,cAAY;AAAA,QACZ,WAAW;AAAA,UACT,uBAAO;AAAA,UACP,uBAAO,GAAG,WAAW,aAAa,WAAW;AAAA,UAC7C,aAAa,uBAAO;AAAA,UACpB,uBAAuB,uBAAO;AAAA,QAChC;AAAA,QACA,eAAa;AAAA,QACb,SAAS;AAAA,QACT,WAAW;AAAA,QACX,cAAc,MAAM,SAAS,EAAE,MAAM,cAAc,CAAC;AAAA,QACpD,cAAc,MAAM,SAAS,EAAE,MAAM,cAAc,CAAC;AAAA,QACpD,SAAS,MAAM,SAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,QACzC,QAAQ,MAAM,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,QACvC;AAAA,QACA,MAAK;AAAA,QACL,UAAU,WAAW,SAAY;AAAA,QAEhC;AAAA,WAAC,aAAa,WAAW,aACxB;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT,uBAAO;AAAA,gBACP,aAAa,UAAU,wBAAe,WAAW,UAAU;AAAA,cAC7D;AAAA;AAAA,UACF;AAAA,UAED;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,QAAQ,cAAc;AAEtB,IAAO,kBAAQ;","names":[]}
@@ -0,0 +1,70 @@
1
+ // src/Modal/FocusTrap.tsx
2
+ import { useEffect, useRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ function queryFocusableAll(el) {
5
+ const selector = [
6
+ "a[href]",
7
+ "area[href]",
8
+ "input:not([disabled])",
9
+ "select:not([disabled])",
10
+ "textarea:not([disabled])",
11
+ "button:not([disabled])",
12
+ "iframe",
13
+ "object",
14
+ "embed",
15
+ '[tabindex="-1"]',
16
+ '[tabindex="0"]',
17
+ "[contenteditable]",
18
+ "audio[controls]",
19
+ "video[controls]",
20
+ "summary"
21
+ ].join(",");
22
+ return el.querySelectorAll(selector);
23
+ }
24
+ var focusElement = (el) => {
25
+ if (typeof el.focus === "function") {
26
+ el.focus();
27
+ }
28
+ };
29
+ function FocusTrap({
30
+ children
31
+ }) {
32
+ const elRef = useRef(null);
33
+ const previouslyFocusedElRef = useRef(null);
34
+ useEffect(() => {
35
+ const { current: element } = elRef;
36
+ const focusFirstChild = () => {
37
+ const withinIframe = window !== window.parent;
38
+ if (element && !withinIframe) {
39
+ focusElement(queryFocusableAll(element)[0]);
40
+ }
41
+ };
42
+ const handleFocus = (event) => {
43
+ if (!element || event.target instanceof Node && element.contains(event.target)) {
44
+ return;
45
+ }
46
+ if (event.target instanceof Element && event.target.closest('[data-testid="syntax-focus-trap"]') !== null) {
47
+ return;
48
+ }
49
+ event.stopPropagation();
50
+ event.preventDefault();
51
+ focusFirstChild();
52
+ };
53
+ previouslyFocusedElRef.current = document.activeElement;
54
+ focusFirstChild();
55
+ document.addEventListener("focus", handleFocus, true);
56
+ return function cleanup() {
57
+ const { current: previouslyFocusedEl } = previouslyFocusedElRef;
58
+ document.removeEventListener("focus", handleFocus, true);
59
+ if (previouslyFocusedEl) {
60
+ focusElement(previouslyFocusedEl);
61
+ }
62
+ };
63
+ }, [elRef, previouslyFocusedElRef]);
64
+ return /* @__PURE__ */ jsx("div", { "data-testid": "syntax-focus-trap", ref: elRef, children });
65
+ }
66
+
67
+ export {
68
+ FocusTrap
69
+ };
70
+ //# sourceMappingURL=PGVLU6C3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Modal/FocusTrap.tsx"],"sourcesContent":["import React, { useEffect, useRef, type ReactElement } from \"react\";\n\nfunction queryFocusableAll(el: HTMLDivElement): NodeListOf<HTMLElement> {\n // Focusable, interactive elements that could possibly be in children\n const selector = [\n \"a[href]\",\n \"area[href]\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"iframe\",\n \"object\",\n \"embed\",\n '[tabindex=\"-1\"]',\n '[tabindex=\"0\"]',\n \"[contenteditable]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"summary\",\n ].join(\",\");\n return el.querySelectorAll(selector);\n}\n\nconst focusElement = (el: HTMLElement) => {\n if (typeof el.focus === \"function\") {\n el.focus();\n }\n};\n\n/**\n * FocusTrap is used by components like Modal to ensure that only elements within children components can be focused.\n */\nexport default function FocusTrap({\n children,\n}: {\n children?: ReactElement | null;\n}): ReactElement {\n const elRef = useRef<HTMLDivElement | null>(null);\n const previouslyFocusedElRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const { current: element } = elRef;\n\n // Focus the first child element among all the focusable, interactive elements within `children`\n const focusFirstChild = () => {\n const withinIframe = window !== window.parent;\n if (element && !withinIframe) {\n focusElement(queryFocusableAll(element)[0]);\n }\n };\n\n const handleFocus: (event: FocusEvent) => void = (event: FocusEvent) => {\n if (\n !element ||\n (event.target instanceof Node && element.contains(event.target))\n ) {\n return;\n }\n\n // This prevents stack overflow when multiple FocusTraps are rendered\n if (\n event.target instanceof Element &&\n event.target.closest('[data-testid=\"syntax-focus-trap\"]') !== null\n ) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n focusFirstChild();\n };\n\n // If an element has focus currently, keep a reference to that element\n previouslyFocusedElRef.current = document.activeElement as HTMLElement;\n focusFirstChild();\n document.addEventListener(\"focus\", handleFocus, true);\n\n return function cleanup() {\n const { current: previouslyFocusedEl } = previouslyFocusedElRef;\n document.removeEventListener(\"focus\", handleFocus, true);\n // If we previously stored a reference to a focused element, return focus to that element\n if (previouslyFocusedEl) {\n focusElement(previouslyFocusedEl);\n }\n };\n }, [elRef, previouslyFocusedElRef]);\n\n return (\n <div data-testid=\"syntax-focus-trap\" ref={elRef}>\n {children}\n </div>\n );\n}\n"],"mappings":";AAAA,SAAgB,WAAW,cAAiC;AAyFxD;AAvFJ,SAAS,kBAAkB,IAA6C;AAEtE,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACV,SAAO,GAAG,iBAAiB,QAAQ;AACrC;AAEA,IAAM,eAAe,CAAC,OAAoB;AACxC,MAAI,OAAO,GAAG,UAAU,YAAY;AAClC,OAAG,MAAM;AAAA,EACX;AACF;AAKe,SAAR,UAA2B;AAAA,EAChC;AACF,GAEiB;AACf,QAAM,QAAQ,OAA8B,IAAI;AAChD,QAAM,yBAAyB,OAA2B,IAAI;AAE9D,YAAU,MAAM;AACd,UAAM,EAAE,SAAS,QAAQ,IAAI;AAG7B,UAAM,kBAAkB,MAAM;AAC5B,YAAM,eAAe,WAAW,OAAO;AACvC,UAAI,WAAW,CAAC,cAAc;AAC5B,qBAAa,kBAAkB,OAAO,EAAE,CAAC,CAAC;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,cAA2C,CAAC,UAAsB;AACtE,UACE,CAAC,WACA,MAAM,kBAAkB,QAAQ,QAAQ,SAAS,MAAM,MAAM,GAC9D;AACA;AAAA,MACF;AAGA,UACE,MAAM,kBAAkB,WACxB,MAAM,OAAO,QAAQ,mCAAmC,MAAM,MAC9D;AACA;AAAA,MACF;AAEA,YAAM,gBAAgB;AACtB,YAAM,eAAe;AACrB,sBAAgB;AAAA,IAClB;AAGA,2BAAuB,UAAU,SAAS;AAC1C,oBAAgB;AAChB,aAAS,iBAAiB,SAAS,aAAa,IAAI;AAEpD,WAAO,SAAS,UAAU;AACxB,YAAM,EAAE,SAAS,oBAAoB,IAAI;AACzC,eAAS,oBAAoB,SAAS,aAAa,IAAI;AAEvD,UAAI,qBAAqB;AACvB,qBAAa,mBAAmB;AAAA,MAClC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,sBAAsB,CAAC;AAElC,SACE,oBAAC,SAAI,eAAY,qBAAoB,KAAK,OACvC,UACH;AAEJ;","names":[]}