@brycks/core-front 0.2.7 → 0.2.9

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 (777) hide show
  1. package/dist/components/data/InfoItem/InfoItem.cjs +2 -0
  2. package/dist/components/data/InfoItem/InfoItem.cjs.map +1 -0
  3. package/dist/components/data/InfoItem/InfoItem.js +140 -0
  4. package/dist/components/data/InfoItem/InfoItem.js.map +1 -0
  5. package/dist/components/data/List/List.cjs +2 -0
  6. package/dist/components/data/List/List.cjs.map +1 -0
  7. package/dist/components/data/List/List.js +178 -0
  8. package/dist/components/data/List/List.js.map +1 -0
  9. package/dist/components/data/Table/Table.cjs +2 -0
  10. package/dist/components/data/Table/Table.cjs.map +1 -0
  11. package/dist/components/data/Table/Table.js +247 -0
  12. package/dist/components/data/Table/Table.js.map +1 -0
  13. package/dist/components/data.cjs +2 -0
  14. package/dist/components/data.cjs.map +1 -0
  15. package/dist/components/data.d.ts +2 -0
  16. package/dist/components/data.js +20 -0
  17. package/dist/components/data.js.map +1 -0
  18. package/dist/components/feedback/Alert/Alert.cjs +2 -0
  19. package/dist/components/feedback/Alert/Alert.cjs.map +1 -0
  20. package/dist/components/feedback/Alert/Alert.js +204 -0
  21. package/dist/components/feedback/Alert/Alert.js.map +1 -0
  22. package/dist/components/feedback/Drawer/Drawer.cjs +23 -0
  23. package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -0
  24. package/dist/components/feedback/Drawer/Drawer.js +199 -0
  25. package/dist/components/feedback/Drawer/Drawer.js.map +1 -0
  26. package/dist/components/feedback/Modal/Modal.cjs +2 -0
  27. package/dist/components/feedback/Modal/Modal.cjs.map +1 -0
  28. package/dist/components/feedback/Modal/Modal.js +183 -0
  29. package/dist/components/feedback/Modal/Modal.js.map +1 -0
  30. package/dist/components/feedback/Popover/Popover.cjs +7 -0
  31. package/dist/components/feedback/Popover/Popover.cjs.map +1 -0
  32. package/dist/components/feedback/Popover/Popover.js +168 -0
  33. package/dist/components/feedback/Popover/Popover.js.map +1 -0
  34. package/dist/components/feedback/Progress/Progress.cjs +12 -0
  35. package/dist/components/feedback/Progress/Progress.cjs.map +1 -0
  36. package/dist/components/feedback/Progress/Progress.js +172 -0
  37. package/dist/components/feedback/Progress/Progress.js.map +1 -0
  38. package/dist/components/feedback/Toast/Toast.cjs +11 -0
  39. package/dist/components/feedback/Toast/Toast.cjs.map +1 -0
  40. package/dist/components/feedback/Toast/Toast.js +216 -0
  41. package/dist/components/feedback/Toast/Toast.js.map +1 -0
  42. package/dist/components/feedback/Toast/ToastContext.cjs +2 -0
  43. package/dist/components/feedback/Toast/ToastContext.cjs.map +1 -0
  44. package/dist/components/feedback/Toast/ToastContext.js +13 -0
  45. package/dist/components/feedback/Toast/ToastContext.js.map +1 -0
  46. package/dist/components/feedback/Tooltip/Tooltip.cjs +7 -0
  47. package/dist/components/feedback/Tooltip/Tooltip.cjs.map +1 -0
  48. package/dist/components/feedback/Tooltip/Tooltip.js +128 -0
  49. package/dist/components/feedback/Tooltip/Tooltip.js.map +1 -0
  50. package/dist/components/feedback.cjs +2 -0
  51. package/dist/components/feedback.cjs.map +1 -0
  52. package/dist/components/feedback.d.ts +2 -0
  53. package/dist/components/feedback.js +20 -0
  54. package/dist/components/feedback.js.map +1 -0
  55. package/dist/components/form/Checkbox/Checkbox.cjs +2 -0
  56. package/dist/components/form/Checkbox/Checkbox.cjs.map +1 -0
  57. package/dist/components/form/Checkbox/Checkbox.js +144 -0
  58. package/dist/components/form/Checkbox/Checkbox.js.map +1 -0
  59. package/dist/components/form/DateInput/DateInput.cjs +2 -0
  60. package/dist/components/form/DateInput/DateInput.cjs.map +1 -0
  61. package/dist/components/form/DateInput/DateInput.js +119 -0
  62. package/dist/components/form/DateInput/DateInput.js.map +1 -0
  63. package/dist/components/form/DropZone/DropZone.cjs +2 -0
  64. package/dist/components/form/DropZone/DropZone.cjs.map +1 -0
  65. package/dist/components/form/DropZone/DropZone.js +132 -0
  66. package/dist/components/form/DropZone/DropZone.js.map +1 -0
  67. package/dist/components/form/FieldError/FieldError.cjs +2 -0
  68. package/dist/components/form/FieldError/FieldError.cjs.map +1 -0
  69. package/dist/components/form/FieldError/FieldError.js +77 -0
  70. package/dist/components/form/FieldError/FieldError.js.map +1 -0
  71. package/dist/components/form/FileInput/FileInput.cjs +2 -0
  72. package/dist/components/form/FileInput/FileInput.cjs.map +1 -0
  73. package/dist/components/form/FileInput/FileInput.js +163 -0
  74. package/dist/components/form/FileInput/FileInput.js.map +1 -0
  75. package/dist/components/form/Form/Form.cjs +2 -0
  76. package/dist/components/form/Form/Form.cjs.map +1 -0
  77. package/dist/components/form/Form/Form.js +67 -0
  78. package/dist/components/form/Form/Form.js.map +1 -0
  79. package/dist/components/form/FormCard/FormCard.cjs +2 -0
  80. package/dist/components/form/FormCard/FormCard.cjs.map +1 -0
  81. package/dist/components/form/FormCard/FormCard.js +91 -0
  82. package/dist/components/form/FormCard/FormCard.js.map +1 -0
  83. package/dist/components/form/FormField/FormField.cjs +2 -0
  84. package/dist/components/form/FormField/FormField.cjs.map +1 -0
  85. package/dist/components/form/FormField/FormField.js +97 -0
  86. package/dist/components/form/FormField/FormField.js.map +1 -0
  87. package/dist/components/form/FormGroup/FormGroup.cjs +2 -0
  88. package/dist/components/form/FormGroup/FormGroup.cjs.map +1 -0
  89. package/dist/components/form/FormGroup/FormGroup.js +79 -0
  90. package/dist/components/form/FormGroup/FormGroup.js.map +1 -0
  91. package/dist/components/form/FormLabel/FormLabel.cjs +2 -0
  92. package/dist/components/form/FormLabel/FormLabel.cjs.map +1 -0
  93. package/dist/components/form/FormLabel/FormLabel.js +68 -0
  94. package/dist/components/form/FormLabel/FormLabel.js.map +1 -0
  95. package/dist/components/form/Input/Input.cjs +2 -0
  96. package/dist/components/form/Input/Input.cjs.map +1 -0
  97. package/dist/components/form/Input/Input.js +155 -0
  98. package/dist/components/form/Input/Input.js.map +1 -0
  99. package/dist/components/form/Radio/Radio.cjs +2 -0
  100. package/dist/components/form/Radio/Radio.cjs.map +1 -0
  101. package/dist/components/form/Radio/Radio.js +162 -0
  102. package/dist/components/form/Radio/Radio.js.map +1 -0
  103. package/dist/components/form/Select/Select.cjs +2 -0
  104. package/dist/components/form/Select/Select.cjs.map +1 -0
  105. package/dist/components/form/Select/Select.js +114 -0
  106. package/dist/components/form/Select/Select.js.map +1 -0
  107. package/dist/components/form/Slider/Slider.cjs +2 -0
  108. package/dist/components/form/Slider/Slider.cjs.map +1 -0
  109. package/dist/components/form/Slider/Slider.js +147 -0
  110. package/dist/components/form/Slider/Slider.js.map +1 -0
  111. package/dist/components/form/Switch/Switch.cjs +2 -0
  112. package/dist/components/form/Switch/Switch.cjs.map +1 -0
  113. package/dist/components/form/Switch/Switch.js +118 -0
  114. package/dist/components/form/Switch/Switch.js.map +1 -0
  115. package/dist/components/form/TextField/TextField.cjs +2 -0
  116. package/dist/components/form/TextField/TextField.cjs.map +1 -0
  117. package/dist/components/form/TextField/TextField.js +89 -0
  118. package/dist/components/form/TextField/TextField.js.map +1 -0
  119. package/dist/components/form/Textarea/Textarea.cjs +2 -0
  120. package/dist/components/form/Textarea/Textarea.cjs.map +1 -0
  121. package/dist/components/form/Textarea/Textarea.js +121 -0
  122. package/dist/components/form/Textarea/Textarea.js.map +1 -0
  123. package/dist/components/form.cjs +2 -0
  124. package/dist/components/form.cjs.map +1 -0
  125. package/dist/components/form.d.ts +2 -0
  126. package/dist/components/form.js +34 -0
  127. package/dist/components/form.js.map +1 -0
  128. package/dist/components/layout/AspectRatio/AspectRatio.cjs +2 -0
  129. package/dist/components/layout/AspectRatio/AspectRatio.cjs.map +1 -0
  130. package/dist/components/layout/AspectRatio/AspectRatio.js +50 -0
  131. package/dist/components/layout/AspectRatio/AspectRatio.js.map +1 -0
  132. package/dist/components/layout/Box/Box.cjs +2 -0
  133. package/dist/components/layout/Box/Box.cjs.map +1 -0
  134. package/dist/components/layout/Box/Box.js +58 -0
  135. package/dist/components/layout/Box/Box.js.map +1 -0
  136. package/dist/components/layout/Box/Box.styles.cjs +2 -0
  137. package/dist/components/layout/Box/Box.styles.cjs.map +1 -0
  138. package/dist/components/layout/Box/Box.styles.js +30 -0
  139. package/dist/components/layout/Box/Box.styles.js.map +1 -0
  140. package/dist/components/layout/Card/Card.cjs +2 -0
  141. package/dist/components/layout/Card/Card.cjs.map +1 -0
  142. package/dist/components/layout/Card/Card.js +135 -0
  143. package/dist/components/layout/Card/Card.js.map +1 -0
  144. package/dist/components/layout/Container/Container.cjs +2 -0
  145. package/dist/components/layout/Container/Container.cjs.map +1 -0
  146. package/dist/components/layout/Container/Container.js +57 -0
  147. package/dist/components/layout/Container/Container.js.map +1 -0
  148. package/dist/components/layout/Flex/Flex.cjs +2 -0
  149. package/dist/components/layout/Flex/Flex.cjs.map +1 -0
  150. package/dist/components/layout/Flex/Flex.js +101 -0
  151. package/dist/components/layout/Flex/Flex.js.map +1 -0
  152. package/dist/components/layout/Grid/Grid.cjs +2 -0
  153. package/dist/components/layout/Grid/Grid.cjs.map +1 -0
  154. package/dist/components/layout/Grid/Grid.js +92 -0
  155. package/dist/components/layout/Grid/Grid.js.map +1 -0
  156. package/dist/components/layout/Section/Section.cjs +2 -0
  157. package/dist/components/layout/Section/Section.cjs.map +1 -0
  158. package/dist/components/layout/Section/Section.js +85 -0
  159. package/dist/components/layout/Section/Section.js.map +1 -0
  160. package/dist/components/layout/Semantic/Semantic.cjs +2 -0
  161. package/dist/components/layout/Semantic/Semantic.cjs.map +1 -0
  162. package/dist/components/layout/Semantic/Semantic.js +103 -0
  163. package/dist/components/layout/Semantic/Semantic.js.map +1 -0
  164. package/dist/components/layout/Spacer/Spacer.cjs +2 -0
  165. package/dist/components/layout/Spacer/Spacer.cjs.map +1 -0
  166. package/dist/components/layout/Spacer/Spacer.js +38 -0
  167. package/dist/components/layout/Spacer/Spacer.js.map +1 -0
  168. package/dist/components/layout/Stack/Stack.cjs +2 -0
  169. package/dist/components/layout/Stack/Stack.cjs.map +1 -0
  170. package/dist/components/layout/Stack/Stack.js +67 -0
  171. package/dist/components/layout/Stack/Stack.js.map +1 -0
  172. package/dist/components/layout.cjs +2 -0
  173. package/dist/components/layout.cjs.map +1 -0
  174. package/dist/components/layout.d.ts +2 -0
  175. package/dist/components/layout.js +35 -0
  176. package/dist/components/layout.js.map +1 -0
  177. package/dist/components/media/Image/Image.cjs +2 -0
  178. package/dist/components/media/Image/Image.cjs.map +1 -0
  179. package/dist/components/media/Image/Image.js +171 -0
  180. package/dist/components/media/Image/Image.js.map +1 -0
  181. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +2 -0
  182. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -0
  183. package/dist/components/media/ImageThumbnail/ImageThumbnail.js +112 -0
  184. package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -0
  185. package/dist/components/media/Video/Video.cjs +2 -0
  186. package/dist/components/media/Video/Video.cjs.map +1 -0
  187. package/dist/components/media/Video/Video.js +185 -0
  188. package/dist/components/media/Video/Video.js.map +1 -0
  189. package/dist/components/navigation/Accordion/Accordion.cjs +2 -0
  190. package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -0
  191. package/dist/components/navigation/Accordion/Accordion.js +180 -0
  192. package/dist/components/navigation/Accordion/Accordion.js.map +1 -0
  193. package/dist/components/navigation/Breadcrumb/Breadcrumb.cjs +2 -0
  194. package/dist/components/navigation/Breadcrumb/Breadcrumb.cjs.map +1 -0
  195. package/dist/components/navigation/Breadcrumb/Breadcrumb.js +137 -0
  196. package/dist/components/navigation/Breadcrumb/Breadcrumb.js.map +1 -0
  197. package/dist/components/navigation/Dropdown/Dropdown.cjs +7 -0
  198. package/dist/components/navigation/Dropdown/Dropdown.cjs.map +1 -0
  199. package/dist/components/navigation/Dropdown/Dropdown.js +259 -0
  200. package/dist/components/navigation/Dropdown/Dropdown.js.map +1 -0
  201. package/dist/components/navigation/Menu/Menu.cjs +2 -0
  202. package/dist/components/navigation/Menu/Menu.cjs.map +1 -0
  203. package/dist/components/navigation/Menu/Menu.js +151 -0
  204. package/dist/components/navigation/Menu/Menu.js.map +1 -0
  205. package/dist/components/navigation/Pagination/Pagination.cjs +2 -0
  206. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -0
  207. package/dist/components/navigation/Pagination/Pagination.js +201 -0
  208. package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
  209. package/dist/components/navigation/Tabs/Tabs.cjs +7 -0
  210. package/dist/components/navigation/Tabs/Tabs.cjs.map +1 -0
  211. package/dist/components/navigation/Tabs/Tabs.js +196 -0
  212. package/dist/components/navigation/Tabs/Tabs.js.map +1 -0
  213. package/dist/components/navigation.cjs +2 -0
  214. package/dist/components/navigation.cjs.map +1 -0
  215. package/dist/components/navigation.d.ts +2 -0
  216. package/dist/components/navigation.js +29 -0
  217. package/dist/components/navigation.js.map +1 -0
  218. package/dist/components/primitives/Button/Button.cjs +2 -0
  219. package/dist/components/primitives/Button/Button.cjs.map +1 -0
  220. package/dist/components/primitives/Button/Button.js +173 -0
  221. package/dist/components/primitives/Button/Button.js.map +1 -0
  222. package/dist/components/primitives/Button/Button.styles.cjs +2 -0
  223. package/dist/components/primitives/Button/Button.styles.cjs.map +1 -0
  224. package/dist/components/primitives/Button/Button.styles.js +321 -0
  225. package/dist/components/primitives/Button/Button.styles.js.map +1 -0
  226. package/dist/components/primitives/Icon/Icon.cjs +2 -0
  227. package/dist/components/primitives/Icon/Icon.cjs.map +1 -0
  228. package/dist/components/primitives/Icon/Icon.js +58 -0
  229. package/dist/components/primitives/Icon/Icon.js.map +1 -0
  230. package/dist/components/primitives/Icon/iconPaths.cjs +2 -0
  231. package/dist/components/primitives/Icon/iconPaths.cjs.map +1 -0
  232. package/dist/components/primitives/Icon/iconPaths.js +63 -0
  233. package/dist/components/primitives/Icon/iconPaths.js.map +1 -0
  234. package/dist/components/typography/Heading/Heading.cjs +2 -0
  235. package/dist/components/typography/Heading/Heading.cjs.map +1 -0
  236. package/dist/components/typography/Heading/Heading.js +65 -0
  237. package/dist/components/typography/Heading/Heading.js.map +1 -0
  238. package/dist/components/typography/Text/Text.cjs +2 -0
  239. package/dist/components/typography/Text/Text.cjs.map +1 -0
  240. package/dist/components/typography/Text/Text.js +88 -0
  241. package/dist/components/typography/Text/Text.js.map +1 -0
  242. package/dist/components/utility/Avatar/Avatar.cjs +2 -0
  243. package/dist/components/utility/Avatar/Avatar.cjs.map +1 -0
  244. package/dist/components/utility/Avatar/Avatar.js +91 -0
  245. package/dist/components/utility/Avatar/Avatar.js.map +1 -0
  246. package/dist/components/utility/Badge/Badge.cjs +2 -0
  247. package/dist/components/utility/Badge/Badge.cjs.map +1 -0
  248. package/dist/components/utility/Badge/Badge.js +90 -0
  249. package/dist/components/utility/Badge/Badge.js.map +1 -0
  250. package/dist/components/utility/Divider/Divider.cjs +2 -0
  251. package/dist/components/utility/Divider/Divider.cjs.map +1 -0
  252. package/dist/components/utility/Divider/Divider.js +87 -0
  253. package/dist/components/utility/Divider/Divider.js.map +1 -0
  254. package/dist/components/utility/EmptyState/EmptyState.cjs +2 -0
  255. package/dist/components/utility/EmptyState/EmptyState.cjs.map +1 -0
  256. package/dist/components/utility/EmptyState/EmptyState.js +132 -0
  257. package/dist/components/utility/EmptyState/EmptyState.js.map +1 -0
  258. package/dist/components/utility/FocusTrap/FocusTrap.cjs +2 -0
  259. package/dist/components/utility/FocusTrap/FocusTrap.cjs.map +1 -0
  260. package/dist/components/utility/FocusTrap/FocusTrap.js +35 -0
  261. package/dist/components/utility/FocusTrap/FocusTrap.js.map +1 -0
  262. package/dist/components/utility/Loader/Loader.cjs +2 -0
  263. package/dist/components/utility/Loader/Loader.cjs.map +1 -0
  264. package/dist/components/utility/Loader/Loader.js +142 -0
  265. package/dist/components/utility/Loader/Loader.js.map +1 -0
  266. package/dist/components/utility/Logo/Logo.cjs +2 -0
  267. package/dist/components/utility/Logo/Logo.cjs.map +1 -0
  268. package/dist/components/utility/Logo/Logo.js +61 -0
  269. package/dist/components/utility/Logo/Logo.js.map +1 -0
  270. package/dist/components/utility/Overlay/Overlay.cjs +7 -0
  271. package/dist/components/utility/Overlay/Overlay.cjs.map +1 -0
  272. package/dist/components/utility/Overlay/Overlay.js +59 -0
  273. package/dist/components/utility/Overlay/Overlay.js.map +1 -0
  274. package/dist/components/utility/Portal/Portal.cjs +2 -0
  275. package/dist/components/utility/Portal/Portal.cjs.map +1 -0
  276. package/dist/components/utility/Portal/Portal.js +18 -0
  277. package/dist/components/utility/Portal/Portal.js.map +1 -0
  278. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.cjs +2 -0
  279. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.cjs.map +1 -0
  280. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.js +53 -0
  281. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.js.map +1 -0
  282. package/dist/components/utility/Skeleton/Skeleton.cjs +2 -0
  283. package/dist/components/utility/Skeleton/Skeleton.cjs.map +1 -0
  284. package/dist/components/utility/Skeleton/Skeleton.js +91 -0
  285. package/dist/components/utility/Skeleton/Skeleton.js.map +1 -0
  286. package/dist/components/utility.cjs +2 -0
  287. package/dist/components/utility.cjs.map +1 -0
  288. package/dist/components/utility.d.ts +2 -0
  289. package/dist/components/utility.js +29 -0
  290. package/dist/components/utility.js.map +1 -0
  291. package/dist/data.d.ts +198 -0
  292. package/dist/design-system/primitives/focus.cjs +2 -0
  293. package/dist/design-system/primitives/focus.cjs.map +1 -0
  294. package/dist/design-system/primitives/focus.js +42 -0
  295. package/dist/design-system/primitives/focus.js.map +1 -0
  296. package/dist/design-system/primitives/layout.cjs +2 -0
  297. package/dist/design-system/primitives/layout.cjs.map +1 -0
  298. package/dist/design-system/primitives/layout.js +79 -0
  299. package/dist/design-system/primitives/layout.js.map +1 -0
  300. package/dist/design-system/primitives/opacity.cjs +2 -0
  301. package/dist/design-system/primitives/opacity.cjs.map +1 -0
  302. package/dist/design-system/primitives/opacity.js +72 -0
  303. package/dist/design-system/primitives/opacity.js.map +1 -0
  304. package/dist/design-system/primitives/sizing.cjs +2 -0
  305. package/dist/design-system/primitives/sizing.cjs.map +1 -0
  306. package/dist/design-system/primitives/sizing.js +118 -0
  307. package/dist/design-system/primitives/sizing.js.map +1 -0
  308. package/dist/design-system/primitives/transitions.cjs +52 -0
  309. package/dist/design-system/primitives/transitions.cjs.map +1 -0
  310. package/dist/design-system/primitives/transitions.js +121 -0
  311. package/dist/design-system/primitives/transitions.js.map +1 -0
  312. package/dist/design-system/primitives/typography.cjs +2 -0
  313. package/dist/design-system/primitives/typography.cjs.map +1 -0
  314. package/dist/design-system/primitives/typography.js +146 -0
  315. package/dist/design-system/primitives/typography.js.map +1 -0
  316. package/dist/design-system/themes/ThemeProvider.cjs +2 -0
  317. package/dist/design-system/themes/ThemeProvider.cjs.map +1 -0
  318. package/dist/design-system/themes/ThemeProvider.js +78 -0
  319. package/dist/design-system/themes/ThemeProvider.js.map +1 -0
  320. package/dist/design-system/themes/cssVariables.cjs +2 -0
  321. package/dist/design-system/themes/cssVariables.cjs.map +1 -0
  322. package/dist/design-system/themes/cssVariables.js +57 -0
  323. package/dist/design-system/themes/cssVariables.js.map +1 -0
  324. package/dist/design-system/themes/darkTheme.cjs +2 -0
  325. package/dist/design-system/themes/darkTheme.cjs.map +1 -0
  326. package/dist/design-system/themes/darkTheme.js +76 -0
  327. package/dist/design-system/themes/darkTheme.js.map +1 -0
  328. package/dist/design-system/themes/lightTheme.cjs +2 -0
  329. package/dist/design-system/themes/lightTheme.cjs.map +1 -0
  330. package/dist/design-system/themes/lightTheme.js +76 -0
  331. package/dist/design-system/themes/lightTheme.js.map +1 -0
  332. package/dist/design-system/tokens/borders.cjs +2 -0
  333. package/dist/design-system/tokens/borders.cjs.map +1 -0
  334. package/dist/design-system/tokens/borders.js +78 -0
  335. package/dist/design-system/tokens/borders.js.map +1 -0
  336. package/dist/design-system/tokens/breakpoints.cjs +2 -0
  337. package/dist/design-system/tokens/breakpoints.cjs.map +1 -0
  338. package/dist/design-system/tokens/breakpoints.js +58 -0
  339. package/dist/design-system/tokens/breakpoints.js.map +1 -0
  340. package/dist/design-system/tokens/colors.cjs +2 -0
  341. package/dist/design-system/tokens/colors.cjs.map +1 -0
  342. package/dist/{colors-B_8a3coi.js → design-system/tokens/colors.js} +16 -16
  343. package/dist/design-system/tokens/colors.js.map +1 -0
  344. package/dist/design-system/tokens/motion.cjs +2 -0
  345. package/dist/design-system/tokens/motion.cjs.map +1 -0
  346. package/dist/design-system/tokens/motion.js +133 -0
  347. package/dist/design-system/tokens/motion.js.map +1 -0
  348. package/dist/design-system/tokens/shadows.cjs +2 -0
  349. package/dist/design-system/tokens/shadows.cjs.map +1 -0
  350. package/dist/design-system/tokens/shadows.js +46 -0
  351. package/dist/design-system/tokens/shadows.js.map +1 -0
  352. package/dist/design-system/tokens/spacing.cjs +2 -0
  353. package/dist/design-system/tokens/spacing.cjs.map +1 -0
  354. package/dist/design-system/tokens/spacing.js +96 -0
  355. package/dist/design-system/tokens/spacing.js.map +1 -0
  356. package/dist/design-system/tokens/typography.cjs +2 -0
  357. package/dist/design-system/tokens/typography.cjs.map +1 -0
  358. package/dist/design-system/tokens/typography.js +199 -0
  359. package/dist/design-system/tokens/typography.js.map +1 -0
  360. package/dist/design-system/tokens/zIndex.cjs +2 -0
  361. package/dist/design-system/tokens/zIndex.cjs.map +1 -0
  362. package/dist/design-system/tokens/zIndex.js +32 -0
  363. package/dist/design-system/tokens/zIndex.js.map +1 -0
  364. package/dist/feedback.d.ts +244 -0
  365. package/dist/form.d.ts +415 -0
  366. package/dist/hooks/useClickOutside.cjs +2 -0
  367. package/dist/hooks/useClickOutside.cjs.map +1 -0
  368. package/dist/hooks/useClickOutside.js +18 -0
  369. package/dist/hooks/useClickOutside.js.map +1 -0
  370. package/dist/hooks/useControllable.cjs +2 -0
  371. package/dist/hooks/useControllable.cjs.map +1 -0
  372. package/dist/hooks/useControllable.js +25 -0
  373. package/dist/hooks/useControllable.js.map +1 -0
  374. package/dist/hooks/useDisclosure.cjs +2 -0
  375. package/dist/hooks/useDisclosure.cjs.map +1 -0
  376. package/dist/hooks/useDisclosure.js +22 -0
  377. package/dist/hooks/useDisclosure.js.map +1 -0
  378. package/dist/hooks/useFocusTrap.cjs +2 -0
  379. package/dist/hooks/useFocusTrap.cjs.map +1 -0
  380. package/dist/hooks/useFocusTrap.js +56 -0
  381. package/dist/hooks/useFocusTrap.js.map +1 -0
  382. package/dist/hooks/useId.cjs +2 -0
  383. package/dist/hooks/useId.cjs.map +1 -0
  384. package/dist/hooks/useId.js +22 -0
  385. package/dist/hooks/useId.js.map +1 -0
  386. package/dist/hooks/useKeyboardNavigation.cjs +2 -0
  387. package/dist/hooks/useKeyboardNavigation.cjs.map +1 -0
  388. package/dist/hooks/useKeyboardNavigation.js +82 -0
  389. package/dist/hooks/useKeyboardNavigation.js.map +1 -0
  390. package/dist/hooks/useMediaQuery.cjs +2 -0
  391. package/dist/hooks/useMediaQuery.cjs.map +1 -0
  392. package/dist/hooks/useMediaQuery.js +33 -0
  393. package/dist/hooks/useMediaQuery.js.map +1 -0
  394. package/dist/hooks.cjs +2 -0
  395. package/dist/hooks.cjs.map +1 -0
  396. package/dist/hooks.d.ts +146 -0
  397. package/dist/hooks.js +23 -0
  398. package/dist/hooks.js.map +1 -0
  399. package/dist/index.cjs +1 -148
  400. package/dist/index.cjs.map +1 -1
  401. package/dist/index.d.ts +4311 -141
  402. package/dist/index.js +291 -8305
  403. package/dist/index.js.map +1 -1
  404. package/dist/layout.d.ts +543 -0
  405. package/dist/navigation.d.ts +290 -0
  406. package/dist/styles.css +1 -1
  407. package/dist/themes.cjs +1 -1
  408. package/dist/themes.d.ts +214 -2
  409. package/dist/themes.js +11 -8
  410. package/dist/themes.js.map +1 -1
  411. package/dist/tokens.cjs +1 -1
  412. package/dist/tokens.cjs.map +1 -1
  413. package/dist/tokens.d.ts +976 -2
  414. package/dist/tokens.js +38 -624
  415. package/dist/tokens.js.map +1 -1
  416. package/dist/utility.d.ts +259 -0
  417. package/dist/utils/lazyComponent.cjs +2 -0
  418. package/dist/utils/lazyComponent.cjs.map +1 -0
  419. package/dist/utils/lazyComponent.js +26 -0
  420. package/dist/utils/lazyComponent.js.map +1 -0
  421. package/dist/utils/styles.cjs +2 -0
  422. package/dist/utils/styles.cjs.map +1 -0
  423. package/dist/utils/styles.js +35 -0
  424. package/dist/utils/styles.js.map +1 -0
  425. package/package.json +37 -1
  426. package/dist/colors-B_8a3coi.js.map +0 -1
  427. package/dist/colors-Bp6ROxvx.cjs +0 -2
  428. package/dist/colors-Bp6ROxvx.cjs.map +0 -1
  429. package/dist/components/data/InfoItem/InfoItem.d.ts +0 -44
  430. package/dist/components/data/InfoItem/InfoItem.d.ts.map +0 -1
  431. package/dist/components/data/InfoItem/index.d.ts +0 -2
  432. package/dist/components/data/InfoItem/index.d.ts.map +0 -1
  433. package/dist/components/data/List/List.d.ts +0 -44
  434. package/dist/components/data/List/List.d.ts.map +0 -1
  435. package/dist/components/data/List/index.d.ts +0 -3
  436. package/dist/components/data/List/index.d.ts.map +0 -1
  437. package/dist/components/data/Table/Table.d.ts +0 -74
  438. package/dist/components/data/Table/Table.d.ts.map +0 -1
  439. package/dist/components/data/Table/index.d.ts +0 -3
  440. package/dist/components/data/Table/index.d.ts.map +0 -1
  441. package/dist/components/data/index.d.ts +0 -7
  442. package/dist/components/data/index.d.ts.map +0 -1
  443. package/dist/components/feedback/Alert/Alert.d.ts +0 -29
  444. package/dist/components/feedback/Alert/Alert.d.ts.map +0 -1
  445. package/dist/components/feedback/Alert/index.d.ts +0 -3
  446. package/dist/components/feedback/Alert/index.d.ts.map +0 -1
  447. package/dist/components/feedback/Drawer/Drawer.d.ts +0 -29
  448. package/dist/components/feedback/Drawer/Drawer.d.ts.map +0 -1
  449. package/dist/components/feedback/Drawer/index.d.ts +0 -3
  450. package/dist/components/feedback/Drawer/index.d.ts.map +0 -1
  451. package/dist/components/feedback/Modal/Modal.d.ts +0 -28
  452. package/dist/components/feedback/Modal/Modal.d.ts.map +0 -1
  453. package/dist/components/feedback/Modal/index.d.ts +0 -3
  454. package/dist/components/feedback/Modal/index.d.ts.map +0 -1
  455. package/dist/components/feedback/Popover/Popover.d.ts +0 -35
  456. package/dist/components/feedback/Popover/Popover.d.ts.map +0 -1
  457. package/dist/components/feedback/Popover/index.d.ts +0 -3
  458. package/dist/components/feedback/Popover/index.d.ts.map +0 -1
  459. package/dist/components/feedback/Progress/Progress.d.ts +0 -30
  460. package/dist/components/feedback/Progress/Progress.d.ts.map +0 -1
  461. package/dist/components/feedback/Progress/index.d.ts +0 -3
  462. package/dist/components/feedback/Progress/index.d.ts.map +0 -1
  463. package/dist/components/feedback/Toast/Toast.d.ts +0 -47
  464. package/dist/components/feedback/Toast/Toast.d.ts.map +0 -1
  465. package/dist/components/feedback/Toast/index.d.ts +0 -3
  466. package/dist/components/feedback/Toast/index.d.ts.map +0 -1
  467. package/dist/components/feedback/Tooltip/Tooltip.d.ts +0 -20
  468. package/dist/components/feedback/Tooltip/Tooltip.d.ts.map +0 -1
  469. package/dist/components/feedback/Tooltip/index.d.ts +0 -3
  470. package/dist/components/feedback/Tooltip/index.d.ts.map +0 -1
  471. package/dist/components/feedback/index.d.ts +0 -13
  472. package/dist/components/feedback/index.d.ts.map +0 -1
  473. package/dist/components/form/Checkbox/Checkbox.d.ts +0 -20
  474. package/dist/components/form/Checkbox/Checkbox.d.ts.map +0 -1
  475. package/dist/components/form/Checkbox/index.d.ts +0 -3
  476. package/dist/components/form/Checkbox/index.d.ts.map +0 -1
  477. package/dist/components/form/DateInput/DateInput.d.ts +0 -28
  478. package/dist/components/form/DateInput/DateInput.d.ts.map +0 -1
  479. package/dist/components/form/DateInput/index.d.ts +0 -3
  480. package/dist/components/form/DateInput/index.d.ts.map +0 -1
  481. package/dist/components/form/DropZone/DropZone.d.ts +0 -27
  482. package/dist/components/form/DropZone/DropZone.d.ts.map +0 -1
  483. package/dist/components/form/DropZone/index.d.ts +0 -2
  484. package/dist/components/form/DropZone/index.d.ts.map +0 -1
  485. package/dist/components/form/FieldError/FieldError.d.ts +0 -18
  486. package/dist/components/form/FieldError/FieldError.d.ts.map +0 -1
  487. package/dist/components/form/FieldError/index.d.ts +0 -3
  488. package/dist/components/form/FieldError/index.d.ts.map +0 -1
  489. package/dist/components/form/FileInput/FileInput.d.ts +0 -33
  490. package/dist/components/form/FileInput/FileInput.d.ts.map +0 -1
  491. package/dist/components/form/FileInput/index.d.ts +0 -3
  492. package/dist/components/form/FileInput/index.d.ts.map +0 -1
  493. package/dist/components/form/Form/Form.d.ts +0 -16
  494. package/dist/components/form/Form/Form.d.ts.map +0 -1
  495. package/dist/components/form/Form/index.d.ts +0 -2
  496. package/dist/components/form/Form/index.d.ts.map +0 -1
  497. package/dist/components/form/FormCard/FormCard.d.ts +0 -20
  498. package/dist/components/form/FormCard/FormCard.d.ts.map +0 -1
  499. package/dist/components/form/FormCard/index.d.ts +0 -2
  500. package/dist/components/form/FormCard/index.d.ts.map +0 -1
  501. package/dist/components/form/FormField/FormField.d.ts +0 -36
  502. package/dist/components/form/FormField/FormField.d.ts.map +0 -1
  503. package/dist/components/form/FormField/index.d.ts +0 -3
  504. package/dist/components/form/FormField/index.d.ts.map +0 -1
  505. package/dist/components/form/FormGroup/FormGroup.d.ts +0 -31
  506. package/dist/components/form/FormGroup/FormGroup.d.ts.map +0 -1
  507. package/dist/components/form/FormGroup/index.d.ts +0 -2
  508. package/dist/components/form/FormGroup/index.d.ts.map +0 -1
  509. package/dist/components/form/FormLabel/FormLabel.d.ts +0 -20
  510. package/dist/components/form/FormLabel/FormLabel.d.ts.map +0 -1
  511. package/dist/components/form/FormLabel/index.d.ts +0 -2
  512. package/dist/components/form/FormLabel/index.d.ts.map +0 -1
  513. package/dist/components/form/Input/Input.d.ts +0 -21
  514. package/dist/components/form/Input/Input.d.ts.map +0 -1
  515. package/dist/components/form/Input/index.d.ts +0 -3
  516. package/dist/components/form/Input/index.d.ts.map +0 -1
  517. package/dist/components/form/Radio/Radio.d.ts +0 -46
  518. package/dist/components/form/Radio/Radio.d.ts.map +0 -1
  519. package/dist/components/form/Radio/index.d.ts +0 -3
  520. package/dist/components/form/Radio/index.d.ts.map +0 -1
  521. package/dist/components/form/Select/Select.d.ts +0 -21
  522. package/dist/components/form/Select/Select.d.ts.map +0 -1
  523. package/dist/components/form/Select/index.d.ts +0 -3
  524. package/dist/components/form/Select/index.d.ts.map +0 -1
  525. package/dist/components/form/Slider/Slider.d.ts +0 -32
  526. package/dist/components/form/Slider/Slider.d.ts.map +0 -1
  527. package/dist/components/form/Slider/index.d.ts +0 -3
  528. package/dist/components/form/Slider/index.d.ts.map +0 -1
  529. package/dist/components/form/Switch/Switch.d.ts +0 -16
  530. package/dist/components/form/Switch/Switch.d.ts.map +0 -1
  531. package/dist/components/form/Switch/index.d.ts +0 -3
  532. package/dist/components/form/Switch/index.d.ts.map +0 -1
  533. package/dist/components/form/TextField/TextField.d.ts +0 -16
  534. package/dist/components/form/TextField/TextField.d.ts.map +0 -1
  535. package/dist/components/form/TextField/index.d.ts +0 -3
  536. package/dist/components/form/TextField/index.d.ts.map +0 -1
  537. package/dist/components/form/Textarea/Textarea.d.ts +0 -27
  538. package/dist/components/form/Textarea/Textarea.d.ts.map +0 -1
  539. package/dist/components/form/Textarea/index.d.ts +0 -3
  540. package/dist/components/form/Textarea/index.d.ts.map +0 -1
  541. package/dist/components/form/index.d.ts +0 -21
  542. package/dist/components/form/index.d.ts.map +0 -1
  543. package/dist/components/index.d.ts +0 -12
  544. package/dist/components/index.d.ts.map +0 -1
  545. package/dist/components/layout/AspectRatio/AspectRatio.d.ts +0 -19
  546. package/dist/components/layout/AspectRatio/AspectRatio.d.ts.map +0 -1
  547. package/dist/components/layout/AspectRatio/index.d.ts +0 -2
  548. package/dist/components/layout/AspectRatio/index.d.ts.map +0 -1
  549. package/dist/components/layout/Box/Box.d.ts +0 -11
  550. package/dist/components/layout/Box/Box.d.ts.map +0 -1
  551. package/dist/components/layout/Box/Box.styles.d.ts +0 -4
  552. package/dist/components/layout/Box/Box.styles.d.ts.map +0 -1
  553. package/dist/components/layout/Box/Box.types.d.ts +0 -38
  554. package/dist/components/layout/Box/Box.types.d.ts.map +0 -1
  555. package/dist/components/layout/Box/index.d.ts +0 -3
  556. package/dist/components/layout/Box/index.d.ts.map +0 -1
  557. package/dist/components/layout/Card/Card.d.ts +0 -40
  558. package/dist/components/layout/Card/Card.d.ts.map +0 -1
  559. package/dist/components/layout/Card/index.d.ts +0 -3
  560. package/dist/components/layout/Card/index.d.ts.map +0 -1
  561. package/dist/components/layout/Container/Container.d.ts +0 -31
  562. package/dist/components/layout/Container/Container.d.ts.map +0 -1
  563. package/dist/components/layout/Container/index.d.ts +0 -3
  564. package/dist/components/layout/Container/index.d.ts.map +0 -1
  565. package/dist/components/layout/Flex/Flex.d.ts +0 -63
  566. package/dist/components/layout/Flex/Flex.d.ts.map +0 -1
  567. package/dist/components/layout/Flex/index.d.ts +0 -3
  568. package/dist/components/layout/Flex/index.d.ts.map +0 -1
  569. package/dist/components/layout/Grid/Grid.d.ts +0 -80
  570. package/dist/components/layout/Grid/Grid.d.ts.map +0 -1
  571. package/dist/components/layout/Grid/index.d.ts +0 -3
  572. package/dist/components/layout/Grid/index.d.ts.map +0 -1
  573. package/dist/components/layout/Section/Section.d.ts +0 -22
  574. package/dist/components/layout/Section/Section.d.ts.map +0 -1
  575. package/dist/components/layout/Section/index.d.ts +0 -3
  576. package/dist/components/layout/Section/index.d.ts.map +0 -1
  577. package/dist/components/layout/Semantic/Semantic.d.ts +0 -32
  578. package/dist/components/layout/Semantic/Semantic.d.ts.map +0 -1
  579. package/dist/components/layout/Semantic/index.d.ts +0 -3
  580. package/dist/components/layout/Semantic/index.d.ts.map +0 -1
  581. package/dist/components/layout/Spacer/Spacer.d.ts +0 -18
  582. package/dist/components/layout/Spacer/Spacer.d.ts.map +0 -1
  583. package/dist/components/layout/Spacer/index.d.ts +0 -3
  584. package/dist/components/layout/Spacer/index.d.ts.map +0 -1
  585. package/dist/components/layout/Stack/Stack.d.ts +0 -13
  586. package/dist/components/layout/Stack/Stack.d.ts.map +0 -1
  587. package/dist/components/layout/Stack/Stack.types.d.ts +0 -33
  588. package/dist/components/layout/Stack/Stack.types.d.ts.map +0 -1
  589. package/dist/components/layout/Stack/index.d.ts +0 -3
  590. package/dist/components/layout/Stack/index.d.ts.map +0 -1
  591. package/dist/components/layout/index.d.ts +0 -16
  592. package/dist/components/layout/index.d.ts.map +0 -1
  593. package/dist/components/media/Image/Image.d.ts +0 -33
  594. package/dist/components/media/Image/Image.d.ts.map +0 -1
  595. package/dist/components/media/Image/index.d.ts +0 -2
  596. package/dist/components/media/Image/index.d.ts.map +0 -1
  597. package/dist/components/media/ImageThumbnail/ImageThumbnail.d.ts +0 -27
  598. package/dist/components/media/ImageThumbnail/ImageThumbnail.d.ts.map +0 -1
  599. package/dist/components/media/ImageThumbnail/index.d.ts +0 -2
  600. package/dist/components/media/ImageThumbnail/index.d.ts.map +0 -1
  601. package/dist/components/media/Video/Video.d.ts +0 -67
  602. package/dist/components/media/Video/Video.d.ts.map +0 -1
  603. package/dist/components/media/Video/index.d.ts +0 -2
  604. package/dist/components/media/Video/index.d.ts.map +0 -1
  605. package/dist/components/media/index.d.ts +0 -8
  606. package/dist/components/media/index.d.ts.map +0 -1
  607. package/dist/components/navigation/Accordion/Accordion.d.ts +0 -41
  608. package/dist/components/navigation/Accordion/Accordion.d.ts.map +0 -1
  609. package/dist/components/navigation/Accordion/index.d.ts +0 -3
  610. package/dist/components/navigation/Accordion/index.d.ts.map +0 -1
  611. package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts +0 -31
  612. package/dist/components/navigation/Breadcrumb/Breadcrumb.d.ts.map +0 -1
  613. package/dist/components/navigation/Breadcrumb/index.d.ts +0 -3
  614. package/dist/components/navigation/Breadcrumb/index.d.ts.map +0 -1
  615. package/dist/components/navigation/Dropdown/Dropdown.d.ts +0 -47
  616. package/dist/components/navigation/Dropdown/Dropdown.d.ts.map +0 -1
  617. package/dist/components/navigation/Dropdown/index.d.ts +0 -3
  618. package/dist/components/navigation/Dropdown/index.d.ts.map +0 -1
  619. package/dist/components/navigation/Menu/Menu.d.ts +0 -45
  620. package/dist/components/navigation/Menu/Menu.d.ts.map +0 -1
  621. package/dist/components/navigation/Menu/index.d.ts +0 -3
  622. package/dist/components/navigation/Menu/index.d.ts.map +0 -1
  623. package/dist/components/navigation/Pagination/Pagination.d.ts +0 -29
  624. package/dist/components/navigation/Pagination/Pagination.d.ts.map +0 -1
  625. package/dist/components/navigation/Pagination/index.d.ts +0 -3
  626. package/dist/components/navigation/Pagination/index.d.ts.map +0 -1
  627. package/dist/components/navigation/Tabs/Tabs.d.ts +0 -52
  628. package/dist/components/navigation/Tabs/Tabs.d.ts.map +0 -1
  629. package/dist/components/navigation/Tabs/index.d.ts +0 -3
  630. package/dist/components/navigation/Tabs/index.d.ts.map +0 -1
  631. package/dist/components/navigation/index.d.ts +0 -10
  632. package/dist/components/navigation/index.d.ts.map +0 -1
  633. package/dist/components/primitives/Button/Button.d.ts +0 -12
  634. package/dist/components/primitives/Button/Button.d.ts.map +0 -1
  635. package/dist/components/primitives/Button/Button.styles.d.ts +0 -29
  636. package/dist/components/primitives/Button/Button.styles.d.ts.map +0 -1
  637. package/dist/components/primitives/Button/Button.types.d.ts +0 -37
  638. package/dist/components/primitives/Button/Button.types.d.ts.map +0 -1
  639. package/dist/components/primitives/Button/index.d.ts +0 -3
  640. package/dist/components/primitives/Button/index.d.ts.map +0 -1
  641. package/dist/components/primitives/Icon/Icon.d.ts +0 -88
  642. package/dist/components/primitives/Icon/Icon.d.ts.map +0 -1
  643. package/dist/components/primitives/Icon/index.d.ts +0 -3
  644. package/dist/components/primitives/Icon/index.d.ts.map +0 -1
  645. package/dist/components/primitives/index.d.ts +0 -8
  646. package/dist/components/primitives/index.d.ts.map +0 -1
  647. package/dist/components/typography/Heading/Heading.d.ts +0 -38
  648. package/dist/components/typography/Heading/Heading.d.ts.map +0 -1
  649. package/dist/components/typography/Heading/index.d.ts +0 -3
  650. package/dist/components/typography/Heading/index.d.ts.map +0 -1
  651. package/dist/components/typography/Text/Text.d.ts +0 -43
  652. package/dist/components/typography/Text/Text.d.ts.map +0 -1
  653. package/dist/components/typography/Text/index.d.ts +0 -3
  654. package/dist/components/typography/Text/index.d.ts.map +0 -1
  655. package/dist/components/typography/index.d.ts +0 -8
  656. package/dist/components/typography/index.d.ts.map +0 -1
  657. package/dist/components/utility/Avatar/Avatar.d.ts +0 -22
  658. package/dist/components/utility/Avatar/Avatar.d.ts.map +0 -1
  659. package/dist/components/utility/Avatar/index.d.ts +0 -3
  660. package/dist/components/utility/Avatar/index.d.ts.map +0 -1
  661. package/dist/components/utility/Badge/Badge.d.ts +0 -20
  662. package/dist/components/utility/Badge/Badge.d.ts.map +0 -1
  663. package/dist/components/utility/Badge/index.d.ts +0 -3
  664. package/dist/components/utility/Badge/index.d.ts.map +0 -1
  665. package/dist/components/utility/Divider/Divider.d.ts +0 -19
  666. package/dist/components/utility/Divider/Divider.d.ts.map +0 -1
  667. package/dist/components/utility/Divider/index.d.ts +0 -3
  668. package/dist/components/utility/Divider/index.d.ts.map +0 -1
  669. package/dist/components/utility/EmptyState/EmptyState.d.ts +0 -26
  670. package/dist/components/utility/EmptyState/EmptyState.d.ts.map +0 -1
  671. package/dist/components/utility/EmptyState/index.d.ts +0 -3
  672. package/dist/components/utility/EmptyState/index.d.ts.map +0 -1
  673. package/dist/components/utility/FocusTrap/FocusTrap.d.ts +0 -19
  674. package/dist/components/utility/FocusTrap/FocusTrap.d.ts.map +0 -1
  675. package/dist/components/utility/FocusTrap/index.d.ts +0 -3
  676. package/dist/components/utility/FocusTrap/index.d.ts.map +0 -1
  677. package/dist/components/utility/Loader/Loader.d.ts +0 -21
  678. package/dist/components/utility/Loader/Loader.d.ts.map +0 -1
  679. package/dist/components/utility/Loader/index.d.ts +0 -3
  680. package/dist/components/utility/Loader/index.d.ts.map +0 -1
  681. package/dist/components/utility/Logo/Logo.d.ts +0 -14
  682. package/dist/components/utility/Logo/Logo.d.ts.map +0 -1
  683. package/dist/components/utility/Logo/index.d.ts +0 -3
  684. package/dist/components/utility/Logo/index.d.ts.map +0 -1
  685. package/dist/components/utility/Overlay/Overlay.d.ts +0 -25
  686. package/dist/components/utility/Overlay/Overlay.d.ts.map +0 -1
  687. package/dist/components/utility/Overlay/index.d.ts +0 -3
  688. package/dist/components/utility/Overlay/index.d.ts.map +0 -1
  689. package/dist/components/utility/Portal/Portal.d.ts +0 -14
  690. package/dist/components/utility/Portal/Portal.d.ts.map +0 -1
  691. package/dist/components/utility/Portal/index.d.ts +0 -3
  692. package/dist/components/utility/Portal/index.d.ts.map +0 -1
  693. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts +0 -17
  694. package/dist/components/utility/ScreenReaderOnly/ScreenReaderOnly.d.ts.map +0 -1
  695. package/dist/components/utility/ScreenReaderOnly/index.d.ts +0 -2
  696. package/dist/components/utility/ScreenReaderOnly/index.d.ts.map +0 -1
  697. package/dist/components/utility/Skeleton/Skeleton.d.ts +0 -35
  698. package/dist/components/utility/Skeleton/Skeleton.d.ts.map +0 -1
  699. package/dist/components/utility/Skeleton/index.d.ts +0 -3
  700. package/dist/components/utility/Skeleton/index.d.ts.map +0 -1
  701. package/dist/components/utility/index.d.ts +0 -17
  702. package/dist/components/utility/index.d.ts.map +0 -1
  703. package/dist/cssVariables-BguyVeCi.cjs +0 -2
  704. package/dist/cssVariables-BguyVeCi.cjs.map +0 -1
  705. package/dist/cssVariables-D9uw0uKO.js +0 -273
  706. package/dist/cssVariables-D9uw0uKO.js.map +0 -1
  707. package/dist/design-system/index.d.ts +0 -16
  708. package/dist/design-system/index.d.ts.map +0 -1
  709. package/dist/design-system/primitives/focus.d.ts +0 -67
  710. package/dist/design-system/primitives/focus.d.ts.map +0 -1
  711. package/dist/design-system/primitives/index.d.ts +0 -15
  712. package/dist/design-system/primitives/index.d.ts.map +0 -1
  713. package/dist/design-system/primitives/layout.d.ts +0 -114
  714. package/dist/design-system/primitives/layout.d.ts.map +0 -1
  715. package/dist/design-system/primitives/opacity.d.ts +0 -88
  716. package/dist/design-system/primitives/opacity.d.ts.map +0 -1
  717. package/dist/design-system/primitives/sizing.d.ts +0 -155
  718. package/dist/design-system/primitives/sizing.d.ts.map +0 -1
  719. package/dist/design-system/primitives/transitions.d.ts +0 -92
  720. package/dist/design-system/primitives/transitions.d.ts.map +0 -1
  721. package/dist/design-system/primitives/typography.d.ts +0 -164
  722. package/dist/design-system/primitives/typography.d.ts.map +0 -1
  723. package/dist/design-system/themes/ThemeProvider.d.ts +0 -18
  724. package/dist/design-system/themes/ThemeProvider.d.ts.map +0 -1
  725. package/dist/design-system/themes/cssVariables.d.ts +0 -52
  726. package/dist/design-system/themes/cssVariables.d.ts.map +0 -1
  727. package/dist/design-system/themes/darkTheme.d.ts +0 -3
  728. package/dist/design-system/themes/darkTheme.d.ts.map +0 -1
  729. package/dist/design-system/themes/index.d.ts +0 -11
  730. package/dist/design-system/themes/index.d.ts.map +0 -1
  731. package/dist/design-system/themes/lightTheme.d.ts +0 -3
  732. package/dist/design-system/themes/lightTheme.d.ts.map +0 -1
  733. package/dist/design-system/themes/types.d.ts +0 -134
  734. package/dist/design-system/themes/types.d.ts.map +0 -1
  735. package/dist/design-system/tokens/borders.d.ts +0 -86
  736. package/dist/design-system/tokens/borders.d.ts.map +0 -1
  737. package/dist/design-system/tokens/breakpoints.d.ts +0 -66
  738. package/dist/design-system/tokens/breakpoints.d.ts.map +0 -1
  739. package/dist/design-system/tokens/colors.d.ts +0 -206
  740. package/dist/design-system/tokens/colors.d.ts.map +0 -1
  741. package/dist/design-system/tokens/index.d.ts +0 -23
  742. package/dist/design-system/tokens/index.d.ts.map +0 -1
  743. package/dist/design-system/tokens/motion.d.ts +0 -204
  744. package/dist/design-system/tokens/motion.d.ts.map +0 -1
  745. package/dist/design-system/tokens/shadows.d.ts +0 -55
  746. package/dist/design-system/tokens/shadows.d.ts.map +0 -1
  747. package/dist/design-system/tokens/spacing.d.ts +0 -104
  748. package/dist/design-system/tokens/spacing.d.ts.map +0 -1
  749. package/dist/design-system/tokens/typography.d.ts +0 -214
  750. package/dist/design-system/tokens/typography.d.ts.map +0 -1
  751. package/dist/design-system/tokens/zIndex.d.ts +0 -36
  752. package/dist/design-system/tokens/zIndex.d.ts.map +0 -1
  753. package/dist/hooks/index.d.ts +0 -13
  754. package/dist/hooks/index.d.ts.map +0 -1
  755. package/dist/hooks/useClickOutside.d.ts +0 -9
  756. package/dist/hooks/useClickOutside.d.ts.map +0 -1
  757. package/dist/hooks/useControllable.d.ts +0 -24
  758. package/dist/hooks/useControllable.d.ts.map +0 -1
  759. package/dist/hooks/useDisclosure.d.ts +0 -19
  760. package/dist/hooks/useDisclosure.d.ts.map +0 -1
  761. package/dist/hooks/useFocusTrap.d.ts +0 -21
  762. package/dist/hooks/useFocusTrap.d.ts.map +0 -1
  763. package/dist/hooks/useId.d.ts +0 -9
  764. package/dist/hooks/useId.d.ts.map +0 -1
  765. package/dist/hooks/useKeyboardNavigation.d.ts +0 -35
  766. package/dist/hooks/useKeyboardNavigation.d.ts.map +0 -1
  767. package/dist/hooks/useMediaQuery.d.ts +0 -13
  768. package/dist/hooks/useMediaQuery.d.ts.map +0 -1
  769. package/dist/index.d.ts.map +0 -1
  770. package/dist/types/common.d.ts +0 -90
  771. package/dist/types/common.d.ts.map +0 -1
  772. package/dist/types/index.d.ts +0 -7
  773. package/dist/types/index.d.ts.map +0 -1
  774. package/dist/utils/index.d.ts +0 -7
  775. package/dist/utils/index.d.ts.map +0 -1
  776. package/dist/utils/styles.d.ts +0 -17
  777. package/dist/utils/styles.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.cjs","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n"],"names":["sizeMap","CloseIcon","jsx","Drawer","forwardRef","isOpen","onClose","placement","size","title","closeOnOverlayClick","closeOnEscape","showCloseButton","showOverlay","className","style","children","testId","props","ref","drawerRef","useRef","previousActiveElement","useEffect","drawer","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","isHorizontal","drawerSize","overlayStyle","drawerStyle","base","headerStyle","titleStyle","closeButtonStyle","contentStyle","drawerContent","jsxs","Fragment","node","cx","createPortal"],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ import { jsxs as c, Fragment as Y, jsx as e } from "react/jsx-runtime";
2
+ import { forwardRef as K, useRef as g, useEffect as P, useCallback as W } from "react";
3
+ import { createPortal as $ } from "react-dom";
4
+ import { cx as A } from "../../../utils/styles.js";
5
+ const B = {
6
+ sm: "320px",
7
+ md: "400px",
8
+ lg: "560px",
9
+ xl: "720px",
10
+ full: "100%"
11
+ };
12
+ function H() {
13
+ return /* @__PURE__ */ e("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", children: /* @__PURE__ */ e("path", { d: "M4 4l8 8M12 4l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) });
14
+ }
15
+ const q = K(function({
16
+ isOpen: l,
17
+ onClose: a,
18
+ placement: t = "right",
19
+ size: d = "md",
20
+ title: n,
21
+ closeOnOverlayClick: u = !0,
22
+ closeOnEscape: y = !0,
23
+ showCloseButton: f = !0,
24
+ showOverlay: p = !0,
25
+ className: x,
26
+ style: S,
27
+ children: E,
28
+ testId: C,
29
+ ...D
30
+ }, s) {
31
+ const m = g(null), b = g(null);
32
+ P(() => {
33
+ if (!l) return;
34
+ b.current = document.activeElement;
35
+ const r = m.current;
36
+ r && r.focus();
37
+ const h = (o) => {
38
+ if (o.key === "Escape" && y) {
39
+ a();
40
+ return;
41
+ }
42
+ if (o.key === "Tab" && r) {
43
+ const i = r.querySelectorAll(
44
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
45
+ ), v = i[0], w = i[i.length - 1];
46
+ o.shiftKey && document.activeElement === v ? (o.preventDefault(), w?.focus()) : !o.shiftKey && document.activeElement === w && (o.preventDefault(), v?.focus());
47
+ }
48
+ };
49
+ return document.addEventListener("keydown", h), document.body.style.overflow = "hidden", () => {
50
+ document.removeEventListener("keydown", h), document.body.style.overflow = "", b.current?.focus();
51
+ };
52
+ }, [l, y, a]);
53
+ const z = W(
54
+ (r) => {
55
+ r.target === r.currentTarget && u && a();
56
+ },
57
+ [u, a]
58
+ );
59
+ if (!l) return null;
60
+ const N = t === "left" || t === "right", k = B[d], T = {
61
+ position: "fixed",
62
+ inset: 0,
63
+ zIndex: "var(--brycks-z-drawer)",
64
+ display: "flex",
65
+ backgroundColor: p ? "var(--brycks-background-overlay)" : "transparent",
66
+ animation: "brycks-drawer-overlay-in 200ms ease-out"
67
+ }, I = {
68
+ ...(() => {
69
+ const r = {
70
+ position: "absolute",
71
+ backgroundColor: "var(--brycks-background-elevated)",
72
+ boxShadow: "var(--brycks-shadow-2xl)",
73
+ display: "flex",
74
+ flexDirection: "column",
75
+ overflow: "hidden"
76
+ };
77
+ return N ? {
78
+ ...r,
79
+ top: 0,
80
+ bottom: 0,
81
+ [t]: 0,
82
+ width: k,
83
+ maxWidth: "100vw"
84
+ } : {
85
+ ...r,
86
+ left: 0,
87
+ right: 0,
88
+ [t]: 0,
89
+ height: k,
90
+ maxHeight: "100vh"
91
+ };
92
+ })(),
93
+ animation: `brycks-drawer-${t}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,
94
+ outline: "none",
95
+ ...S
96
+ }, M = {
97
+ display: "flex",
98
+ alignItems: "center",
99
+ justifyContent: "space-between",
100
+ padding: "16px 20px",
101
+ borderBottom: "1px solid var(--brycks-border-muted)",
102
+ flexShrink: 0
103
+ }, j = {
104
+ fontSize: 18,
105
+ fontWeight: 600,
106
+ color: "var(--brycks-foreground-default)",
107
+ margin: 0
108
+ }, L = {
109
+ display: "flex",
110
+ alignItems: "center",
111
+ justifyContent: "center",
112
+ width: 32,
113
+ height: 32,
114
+ borderRadius: "var(--brycks-radius-md)",
115
+ color: "var(--brycks-foreground-muted)",
116
+ transition: "all 150ms ease-out"
117
+ }, R = {
118
+ flex: 1,
119
+ overflow: "auto",
120
+ padding: 20
121
+ }, X = /* @__PURE__ */ c(Y, { children: [
122
+ /* @__PURE__ */ e("style", { children: `
123
+ @keyframes brycks-drawer-overlay-in {
124
+ from { opacity: 0; }
125
+ to { opacity: 1; }
126
+ }
127
+ @keyframes brycks-drawer-left-in {
128
+ from { transform: translateX(-100%); }
129
+ to { transform: translateX(0); }
130
+ }
131
+ @keyframes brycks-drawer-right-in {
132
+ from { transform: translateX(100%); }
133
+ to { transform: translateX(0); }
134
+ }
135
+ @keyframes brycks-drawer-top-in {
136
+ from { transform: translateY(-100%); }
137
+ to { transform: translateY(0); }
138
+ }
139
+ @keyframes brycks-drawer-bottom-in {
140
+ from { transform: translateY(100%); }
141
+ to { transform: translateY(0); }
142
+ }
143
+ ` }),
144
+ /* @__PURE__ */ e(
145
+ "div",
146
+ {
147
+ className: "brycks-drawer-overlay",
148
+ style: T,
149
+ onClick: z,
150
+ "aria-hidden": "true",
151
+ children: /* @__PURE__ */ c(
152
+ "div",
153
+ {
154
+ ref: (r) => {
155
+ m.current = r, typeof s == "function" ? s(r) : s && (s.current = r);
156
+ },
157
+ role: "dialog",
158
+ "aria-modal": "true",
159
+ "aria-labelledby": n ? "brycks-drawer-title" : void 0,
160
+ className: A("brycks-drawer", `brycks-drawer--${t}`, `brycks-drawer--${d}`, x),
161
+ style: I,
162
+ tabIndex: -1,
163
+ "data-testid": C,
164
+ ...D,
165
+ children: [
166
+ (n || f) && /* @__PURE__ */ c("div", { className: "brycks-drawer-header", style: M, children: [
167
+ n && /* @__PURE__ */ e("h2", { id: "brycks-drawer-title", style: j, children: n }),
168
+ f && /* @__PURE__ */ e(
169
+ "button",
170
+ {
171
+ type: "button",
172
+ className: "brycks-drawer-close",
173
+ style: L,
174
+ onClick: a,
175
+ "aria-label": "Close drawer",
176
+ onMouseEnter: (r) => {
177
+ r.currentTarget.style.backgroundColor = "var(--brycks-background-muted)", r.currentTarget.style.color = "var(--brycks-foreground-default)";
178
+ },
179
+ onMouseLeave: (r) => {
180
+ r.currentTarget.style.backgroundColor = "transparent", r.currentTarget.style.color = "var(--brycks-foreground-muted)";
181
+ },
182
+ children: /* @__PURE__ */ e(H, {})
183
+ }
184
+ )
185
+ ] }),
186
+ /* @__PURE__ */ e("div", { className: "brycks-drawer-content", style: R, children: E })
187
+ ]
188
+ }
189
+ )
190
+ }
191
+ )
192
+ ] });
193
+ return $(X, document.body);
194
+ });
195
+ q.displayName = "Drawer";
196
+ export {
197
+ q as Drawer
198
+ };
199
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.js","sources":["../../../../src/components/feedback/Drawer/Drawer.tsx"],"sourcesContent":["/**\n * Drawer Component\n *\n * A slide-out panel that can appear from any edge of the screen.\n * Supports focus trapping and keyboard navigation.\n */\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n useCallback,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\n\nexport type DrawerPlacement = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nexport interface DrawerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Whether the drawer is open */\n isOpen: boolean\n /** Callback when drawer should close */\n onClose: () => void\n /** Drawer placement */\n placement?: DrawerPlacement\n /** Drawer size */\n size?: DrawerSize\n /** Drawer title */\n title?: ReactNode\n /** Whether to close on overlay click */\n closeOnOverlayClick?: boolean\n /** Whether to close on escape key */\n closeOnEscape?: boolean\n /** Whether to show close button */\n showCloseButton?: boolean\n /** Whether to show overlay */\n showOverlay?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeMap: Record<DrawerSize, string> = {\n sm: '320px',\n md: '400px',\n lg: '560px',\n xl: '720px',\n full: '100%',\n}\n\nfunction CloseIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n {\n isOpen,\n onClose,\n placement = 'right',\n size = 'md',\n title,\n closeOnOverlayClick = true,\n closeOnEscape = true,\n showCloseButton = true,\n showOverlay = true,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const drawerRef = useRef<HTMLDivElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n\n // Focus trap and keyboard handling\n useEffect(() => {\n if (!isOpen) return\n\n previousActiveElement.current = document.activeElement as HTMLElement\n const drawer = drawerRef.current\n if (drawer) {\n drawer.focus()\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n onClose()\n return\n }\n\n if (e.key === 'Tab' && drawer) {\n const focusableElements = drawer.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement?.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement?.focus()\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n document.body.style.overflow = ''\n previousActiveElement.current?.focus()\n }\n }, [isOpen, closeOnEscape, onClose])\n\n const handleOverlayClick = useCallback(\n (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && closeOnOverlayClick) {\n onClose()\n }\n },\n [closeOnOverlayClick, onClose]\n )\n\n if (!isOpen) return null\n\n const isHorizontal = placement === 'left' || placement === 'right'\n const drawerSize = sizeMap[size]\n\n const overlayStyle: CSSProperties = {\n position: 'fixed',\n inset: 0,\n zIndex: 'var(--brycks-z-drawer)' as unknown as number,\n display: 'flex',\n backgroundColor: showOverlay ? 'var(--brycks-background-overlay)' : 'transparent',\n animation: 'brycks-drawer-overlay-in 200ms ease-out',\n }\n\n const getPositionStyles = (): CSSProperties => {\n const base: CSSProperties = {\n position: 'absolute',\n backgroundColor: 'var(--brycks-background-elevated)',\n boxShadow: 'var(--brycks-shadow-2xl)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n\n if (isHorizontal) {\n return {\n ...base,\n top: 0,\n bottom: 0,\n [placement]: 0,\n width: drawerSize,\n maxWidth: '100vw',\n }\n }\n\n return {\n ...base,\n left: 0,\n right: 0,\n [placement]: 0,\n height: drawerSize,\n maxHeight: '100vh',\n }\n }\n\n const drawerStyle: CSSProperties = {\n ...getPositionStyles(),\n animation: `brycks-drawer-${placement}-in 250ms cubic-bezier(0.32, 0.72, 0, 1)`,\n outline: 'none',\n ...style,\n }\n\n const headerStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '16px 20px',\n borderBottom: '1px solid var(--brycks-border-muted)',\n flexShrink: 0,\n }\n\n const titleStyle: CSSProperties = {\n fontSize: 18,\n fontWeight: 600,\n color: 'var(--brycks-foreground-default)',\n margin: 0,\n }\n\n const closeButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 'var(--brycks-radius-md)',\n color: 'var(--brycks-foreground-muted)',\n transition: 'all 150ms ease-out',\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n overflow: 'auto',\n padding: 20,\n }\n\n const drawerContent = (\n <>\n <style>\n {`\n @keyframes brycks-drawer-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes brycks-drawer-left-in {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-right-in {\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n }\n @keyframes brycks-drawer-top-in {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n @keyframes brycks-drawer-bottom-in {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n `}\n </style>\n <div\n className=\"brycks-drawer-overlay\"\n style={overlayStyle}\n onClick={handleOverlayClick}\n aria-hidden=\"true\"\n >\n <div\n ref={(node) => {\n (drawerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? 'brycks-drawer-title' : undefined}\n className={cx('brycks-drawer', `brycks-drawer--${placement}`, `brycks-drawer--${size}`, className)}\n style={drawerStyle}\n tabIndex={-1}\n data-testid={testId}\n {...props}\n >\n {(title || showCloseButton) && (\n <div className=\"brycks-drawer-header\" style={headerStyle}>\n {title && <h2 id=\"brycks-drawer-title\" style={titleStyle}>{title}</h2>}\n {showCloseButton && (\n <button\n type=\"button\"\n className=\"brycks-drawer-close\"\n style={closeButtonStyle}\n onClick={onClose}\n aria-label=\"Close drawer\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <CloseIcon />\n </button>\n )}\n </div>\n )}\n <div className=\"brycks-drawer-content\" style={contentStyle}>\n {children}\n </div>\n </div>\n </div>\n </>\n )\n\n return createPortal(drawerContent, document.body)\n})\n\nDrawer.displayName = 'Drawer'\n"],"names":["sizeMap","CloseIcon","jsx","Drawer","forwardRef","isOpen","onClose","placement","size","title","closeOnOverlayClick","closeOnEscape","showCloseButton","showOverlay","className","style","children","testId","props","ref","drawerRef","useRef","previousActiveElement","useEffect","drawer","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","isHorizontal","drawerSize","overlayStyle","drawerStyle","base","headerStyle","titleStyle","closeButtonStyle","contentStyle","drawerContent","jsxs","Fragment","node","cx","createPortal"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),K=require("react-dom"),z=require("../../../utils/styles.cjs"),A={sm:"400px",md:"500px",lg:"640px",xl:"800px",full:"calc(100vw - 48px)"},B=r.memo(function(){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}),p=r.forwardRef(function({isOpen:o,onClose:a,size:l="md",title:s,description:i,closeOnOverlayClick:m=!0,closeOnEscape:f=!0,showCloseButton:b=!0,className:w,style:v,testId:E,children:S,...M},c){const k=r.useRef(null),u=r.useRef(null),d=r.useRef(!1);r.useEffect(()=>{o&&!d.current?(u.current=document.activeElement,d.current=!0):!o&&d.current&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),u.current?.focus(),u.current=null,d.current=!1)},[o]),r.useEffect(()=>{if(!o)return;const e=k.current;e&&e.focus();const x=n=>{if(n.key==="Escape"&&f){a();return}if(n.key==="Tab"&&e){const y=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),g=y[0],h=y[y.length-1];n.shiftKey&&document.activeElement===g?(n.preventDefault(),h?.focus()):!n.shiftKey&&document.activeElement===h&&(n.preventDefault(),g?.focus())}};return document.addEventListener("keydown",x),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",x),document.body.style.overflow=""}},[o,f,a]);const C=r.useCallback(e=>{e.target===e.currentTarget&&m&&a()},[m,a]),R=r.useMemo(()=>({position:"fixed",inset:0,zIndex:"var(--brycks-z-modal)",display:"flex",alignItems:"center",justifyContent:"center",padding:24,backgroundColor:"var(--brycks-background-overlay)",backdropFilter:"blur(4px)",animation:"brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)"}),[]),L=r.useMemo(()=>({position:"relative",width:"100%",maxWidth:A[l],maxHeight:l==="full"?"calc(100vh - 48px)":"85vh",backgroundColor:"var(--brycks-background-elevated)",borderRadius:"var(--brycks-radius-xl)",boxShadow:"var(--brycks-shadow-2xl)",display:"flex",flexDirection:"column",overflow:"hidden",animation:"brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)",outline:"none",...v}),[l,v]);if(!o)return null;const T={display:"flex",alignItems:"flex-start",justifyContent:"space-between",padding:"20px 24px",borderBottom:"1px solid var(--brycks-border-muted)"},I={display:"flex",flexDirection:"column",gap:4},D={fontSize:18,fontWeight:600,color:"var(--brycks-foreground-default)",margin:0,lineHeight:1.3},N={fontSize:14,color:"var(--brycks-foreground-muted)",margin:0},q={display:"flex",alignItems:"center",justifyContent:"center",width:32,height:32,borderRadius:"var(--brycks-radius-md)",color:"var(--brycks-foreground-muted)",transition:"all var(--brycks-duration-fast) var(--brycks-ease-out)",marginLeft:12,flexShrink:0},W={flex:1,overflow:"auto",padding:24},H=t.jsx("div",{className:"brycks-modal-overlay",style:R,onClick:C,children:t.jsxs("div",{ref:e=>{k.current=e,typeof c=="function"?c(e):c&&(c.current=e)},role:"dialog","aria-modal":"true","aria-labelledby":s?"brycks-modal-title":void 0,"aria-describedby":i?"brycks-modal-description":void 0,className:z.cx("brycks-modal",`brycks-modal--${l}`,w),style:L,tabIndex:-1,"data-testid":E,...M,children:[(s||b)&&t.jsxs("div",{className:"brycks-modal-header",style:T,children:[t.jsxs("div",{style:I,children:[s&&t.jsx("h2",{id:"brycks-modal-title",style:D,children:s}),i&&t.jsx("p",{id:"brycks-modal-description",style:N,children:i})]}),b&&t.jsx("button",{type:"button",className:"brycks-modal-close",style:q,onClick:a,"aria-label":"Close modal",onMouseEnter:e=>{e.currentTarget.style.backgroundColor="var(--brycks-background-muted)",e.currentTarget.style.color="var(--brycks-foreground-default)"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent",e.currentTarget.style.color="var(--brycks-foreground-muted)"},children:t.jsx(B,{})})]}),t.jsx("div",{className:"brycks-modal-content",style:W,children:S})]})});return K.createPortal(H,document.body)});p.displayName="Modal";exports.Modal=p;
2
+ //# sourceMappingURL=Modal.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.cjs","sources":["../../../../src/components/feedback/Modal/Modal.tsx"],"sourcesContent":["/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n memo,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon - memoized to prevent re-renders */\r\nconst CloseIcon = memo(function CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n})\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n const wasOpen = useRef(false)\r\n\r\n // Track previous open state to handle focus restoration before unmount\r\n useEffect(() => {\r\n // Modal just opened\r\n if (isOpen && !wasOpen.current) {\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n wasOpen.current = true\r\n }\r\n // Modal is about to close - restore focus BEFORE unmount\r\n else if (!isOpen && wasOpen.current) {\r\n // Blur any focused element inside modal to prevent aria-hidden warning\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur()\r\n }\r\n // Restore focus to previous element\r\n previousActiveElement.current?.focus()\r\n previousActiveElement.current = null\r\n wasOpen.current = false\r\n }\r\n }, [isOpen])\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n // Memoize styles to prevent object recreation on every render\r\n const overlayStyle = useMemo<CSSProperties>(() => ({\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)',\r\n }), [])\r\n\r\n const modalStyle = useMemo<CSSProperties>(() => ({\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)',\r\n outline: 'none',\r\n ...style,\r\n }), [size, style])\r\n\r\n if (!isOpen) return null\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n"],"names":["sizeWidths","CloseIcon","memo","jsx","Modal","forwardRef","isOpen","onClose","size","title","description","closeOnOverlayClick","closeOnEscape","showCloseButton","className","style","testId","children","props","ref","modalRef","useRef","previousActiveElement","wasOpen","useEffect","modal","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","overlayStyle","useMemo","modalStyle","headerStyle","titleContainerStyle","titleStyle","descriptionStyle","closeButtonStyle","contentStyle","modalContent","jsxs","node","cx","createPortal"],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { jsx as t, jsxs as m } from "react/jsx-runtime";
2
+ import { forwardRef as B, useRef as y, useEffect as w, useCallback as q, useMemo as E, memo as F } from "react";
3
+ import { createPortal as P } from "react-dom";
4
+ import { cx as $ } from "../../../utils/styles.js";
5
+ const G = {
6
+ sm: "400px",
7
+ md: "500px",
8
+ lg: "640px",
9
+ xl: "800px",
10
+ full: "calc(100vw - 48px)"
11
+ }, J = F(function() {
12
+ return /* @__PURE__ */ t("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ t(
13
+ "path",
14
+ {
15
+ d: "M4 4L12 12M12 4L4 12",
16
+ stroke: "currentColor",
17
+ strokeWidth: "1.5",
18
+ strokeLinecap: "round"
19
+ }
20
+ ) });
21
+ }), Q = B(function({
22
+ isOpen: r,
23
+ onClose: n,
24
+ size: a = "md",
25
+ title: l,
26
+ description: d,
27
+ closeOnOverlayClick: f = !0,
28
+ closeOnEscape: b = !0,
29
+ showCloseButton: v = !0,
30
+ className: C,
31
+ style: k,
32
+ testId: M,
33
+ children: L,
34
+ ...I
35
+ }, c) {
36
+ const g = y(null), i = y(null), s = y(!1);
37
+ w(() => {
38
+ r && !s.current ? (i.current = document.activeElement, s.current = !0) : !r && s.current && (document.activeElement instanceof HTMLElement && document.activeElement.blur(), i.current?.focus(), i.current = null, s.current = !1);
39
+ }, [r]), w(() => {
40
+ if (!r) return;
41
+ const e = g.current;
42
+ e && e.focus();
43
+ const h = (o) => {
44
+ if (o.key === "Escape" && b) {
45
+ n();
46
+ return;
47
+ }
48
+ if (o.key === "Tab" && e) {
49
+ const u = e.querySelectorAll(
50
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
51
+ ), p = u[0], x = u[u.length - 1];
52
+ o.shiftKey && document.activeElement === p ? (o.preventDefault(), x?.focus()) : !o.shiftKey && document.activeElement === x && (o.preventDefault(), p?.focus());
53
+ }
54
+ };
55
+ return document.addEventListener("keydown", h), document.body.style.overflow = "hidden", () => {
56
+ document.removeEventListener("keydown", h), document.body.style.overflow = "";
57
+ };
58
+ }, [r, b, n]);
59
+ const T = q(
60
+ (e) => {
61
+ e.target === e.currentTarget && f && n();
62
+ },
63
+ [f, n]
64
+ ), N = E(() => ({
65
+ position: "fixed",
66
+ inset: 0,
67
+ zIndex: "var(--brycks-z-modal)",
68
+ display: "flex",
69
+ alignItems: "center",
70
+ justifyContent: "center",
71
+ padding: 24,
72
+ backgroundColor: "var(--brycks-background-overlay)",
73
+ backdropFilter: "blur(4px)",
74
+ animation: "brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)"
75
+ }), []), j = E(() => ({
76
+ position: "relative",
77
+ width: "100%",
78
+ maxWidth: G[a],
79
+ maxHeight: a === "full" ? "calc(100vh - 48px)" : "85vh",
80
+ backgroundColor: "var(--brycks-background-elevated)",
81
+ borderRadius: "var(--brycks-radius-xl)",
82
+ boxShadow: "var(--brycks-shadow-2xl)",
83
+ display: "flex",
84
+ flexDirection: "column",
85
+ overflow: "hidden",
86
+ animation: "brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)",
87
+ outline: "none",
88
+ ...k
89
+ }), [a, k]);
90
+ if (!r) return null;
91
+ const D = {
92
+ display: "flex",
93
+ alignItems: "flex-start",
94
+ justifyContent: "space-between",
95
+ padding: "20px 24px",
96
+ borderBottom: "1px solid var(--brycks-border-muted)"
97
+ }, R = {
98
+ display: "flex",
99
+ flexDirection: "column",
100
+ gap: 4
101
+ }, W = {
102
+ fontSize: 18,
103
+ fontWeight: 600,
104
+ color: "var(--brycks-foreground-default)",
105
+ margin: 0,
106
+ lineHeight: 1.3
107
+ }, H = {
108
+ fontSize: 14,
109
+ color: "var(--brycks-foreground-muted)",
110
+ margin: 0
111
+ }, K = {
112
+ display: "flex",
113
+ alignItems: "center",
114
+ justifyContent: "center",
115
+ width: 32,
116
+ height: 32,
117
+ borderRadius: "var(--brycks-radius-md)",
118
+ color: "var(--brycks-foreground-muted)",
119
+ transition: "all var(--brycks-duration-fast) var(--brycks-ease-out)",
120
+ marginLeft: 12,
121
+ flexShrink: 0
122
+ }, z = {
123
+ flex: 1,
124
+ overflow: "auto",
125
+ padding: 24
126
+ }, A = /* @__PURE__ */ t(
127
+ "div",
128
+ {
129
+ className: "brycks-modal-overlay",
130
+ style: N,
131
+ onClick: T,
132
+ children: /* @__PURE__ */ m(
133
+ "div",
134
+ {
135
+ ref: (e) => {
136
+ g.current = e, typeof c == "function" ? c(e) : c && (c.current = e);
137
+ },
138
+ role: "dialog",
139
+ "aria-modal": "true",
140
+ "aria-labelledby": l ? "brycks-modal-title" : void 0,
141
+ "aria-describedby": d ? "brycks-modal-description" : void 0,
142
+ className: $("brycks-modal", `brycks-modal--${a}`, C),
143
+ style: j,
144
+ tabIndex: -1,
145
+ "data-testid": M,
146
+ ...I,
147
+ children: [
148
+ (l || v) && /* @__PURE__ */ m("div", { className: "brycks-modal-header", style: D, children: [
149
+ /* @__PURE__ */ m("div", { style: R, children: [
150
+ l && /* @__PURE__ */ t("h2", { id: "brycks-modal-title", style: W, children: l }),
151
+ d && /* @__PURE__ */ t("p", { id: "brycks-modal-description", style: H, children: d })
152
+ ] }),
153
+ v && /* @__PURE__ */ t(
154
+ "button",
155
+ {
156
+ type: "button",
157
+ className: "brycks-modal-close",
158
+ style: K,
159
+ onClick: n,
160
+ "aria-label": "Close modal",
161
+ onMouseEnter: (e) => {
162
+ e.currentTarget.style.backgroundColor = "var(--brycks-background-muted)", e.currentTarget.style.color = "var(--brycks-foreground-default)";
163
+ },
164
+ onMouseLeave: (e) => {
165
+ e.currentTarget.style.backgroundColor = "transparent", e.currentTarget.style.color = "var(--brycks-foreground-muted)";
166
+ },
167
+ children: /* @__PURE__ */ t(J, {})
168
+ }
169
+ )
170
+ ] }),
171
+ /* @__PURE__ */ t("div", { className: "brycks-modal-content", style: z, children: L })
172
+ ]
173
+ }
174
+ )
175
+ }
176
+ );
177
+ return P(A, document.body);
178
+ });
179
+ Q.displayName = "Modal";
180
+ export {
181
+ Q as Modal
182
+ };
183
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sources":["../../../../src/components/feedback/Modal/Modal.tsx"],"sourcesContent":["/**\r\n * Modal Component\r\n *\r\n * Accessible modal dialog with smooth Apple-inspired animations.\r\n * Supports focus trapping and keyboard navigation.\r\n */\r\n\r\nimport {\r\n forwardRef,\r\n useEffect,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n memo,\r\n type CSSProperties,\r\n type ReactNode,\r\n type HTMLAttributes,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cx } from '../../../utils/styles'\r\n\r\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\r\n /** Whether the modal is open */\r\n isOpen: boolean\r\n /** Callback when modal should close */\r\n onClose: () => void\r\n /** Modal size */\r\n size?: ModalSize\r\n /** Modal title */\r\n title?: ReactNode\r\n /** Modal description */\r\n description?: ReactNode\r\n /** Whether to close on overlay click */\r\n closeOnOverlayClick?: boolean\r\n /** Whether to close on escape key */\r\n closeOnEscape?: boolean\r\n /** Whether to show close button */\r\n showCloseButton?: boolean\r\n /** Custom class name */\r\n className?: string\r\n /** Test ID */\r\n testId?: string\r\n /** Modal content */\r\n children?: ReactNode\r\n}\r\n\r\nconst sizeWidths: Record<ModalSize, string> = {\r\n sm: '400px',\r\n md: '500px',\r\n lg: '640px',\r\n xl: '800px',\r\n full: 'calc(100vw - 48px)',\r\n}\r\n\r\n/** Close icon - memoized to prevent re-renders */\r\nconst CloseIcon = memo(function CloseIcon() {\r\n return (\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n <path\r\n d=\"M4 4L12 12M12 4L4 12\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n />\r\n </svg>\r\n )\r\n})\r\n\r\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(function Modal(\r\n {\r\n isOpen,\r\n onClose,\r\n size = 'md',\r\n title,\r\n description,\r\n closeOnOverlayClick = true,\r\n closeOnEscape = true,\r\n showCloseButton = true,\r\n className,\r\n style,\r\n testId,\r\n children,\r\n ...props\r\n },\r\n ref\r\n) {\r\n const modalRef = useRef<HTMLDivElement>(null)\r\n const previousActiveElement = useRef<HTMLElement | null>(null)\r\n const wasOpen = useRef(false)\r\n\r\n // Track previous open state to handle focus restoration before unmount\r\n useEffect(() => {\r\n // Modal just opened\r\n if (isOpen && !wasOpen.current) {\r\n previousActiveElement.current = document.activeElement as HTMLElement\r\n wasOpen.current = true\r\n }\r\n // Modal is about to close - restore focus BEFORE unmount\r\n else if (!isOpen && wasOpen.current) {\r\n // Blur any focused element inside modal to prevent aria-hidden warning\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur()\r\n }\r\n // Restore focus to previous element\r\n previousActiveElement.current?.focus()\r\n previousActiveElement.current = null\r\n wasOpen.current = false\r\n }\r\n }, [isOpen])\r\n\r\n // Focus trap and keyboard handling\r\n useEffect(() => {\r\n if (!isOpen) return\r\n\r\n const modal = modalRef.current\r\n if (modal) {\r\n modal.focus()\r\n }\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n onClose()\r\n return\r\n }\r\n\r\n if (e.key === 'Tab' && modal) {\r\n const focusableElements = modal.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n )\r\n const firstElement = focusableElements[0]\r\n const lastElement = focusableElements[focusableElements.length - 1]\r\n\r\n if (e.shiftKey && document.activeElement === firstElement) {\r\n e.preventDefault()\r\n lastElement?.focus()\r\n } else if (!e.shiftKey && document.activeElement === lastElement) {\r\n e.preventDefault()\r\n firstElement?.focus()\r\n }\r\n }\r\n }\r\n\r\n document.addEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = 'hidden'\r\n\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown)\r\n document.body.style.overflow = ''\r\n }\r\n }, [isOpen, closeOnEscape, onClose])\r\n\r\n const handleOverlayClick = useCallback(\r\n (e: React.MouseEvent) => {\r\n if (e.target === e.currentTarget && closeOnOverlayClick) {\r\n onClose()\r\n }\r\n },\r\n [closeOnOverlayClick, onClose]\r\n )\r\n\r\n // Memoize styles to prevent object recreation on every render\r\n const overlayStyle = useMemo<CSSProperties>(() => ({\r\n position: 'fixed',\r\n inset: 0,\r\n zIndex: 'var(--brycks-z-modal)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 24,\r\n backgroundColor: 'var(--brycks-background-overlay)',\r\n backdropFilter: 'blur(4px)',\r\n animation: 'brycks-fade-in var(--brycks-duration-normal) var(--brycks-ease-out)',\r\n }), [])\r\n\r\n const modalStyle = useMemo<CSSProperties>(() => ({\r\n position: 'relative',\r\n width: '100%',\r\n maxWidth: sizeWidths[size],\r\n maxHeight: size === 'full' ? 'calc(100vh - 48px)' : '85vh',\r\n backgroundColor: 'var(--brycks-background-elevated)',\r\n borderRadius: 'var(--brycks-radius-xl)',\r\n boxShadow: 'var(--brycks-shadow-2xl)',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden',\r\n animation: 'brycks-scale-in var(--brycks-duration-normal) var(--brycks-ease-spring)',\r\n outline: 'none',\r\n ...style,\r\n }), [size, style])\r\n\r\n if (!isOpen) return null\r\n\r\n const headerStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n justifyContent: 'space-between',\r\n padding: '20px 24px',\r\n borderBottom: '1px solid var(--brycks-border-muted)',\r\n }\r\n\r\n const titleContainerStyle: CSSProperties = {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: 4,\r\n }\r\n\r\n const titleStyle: CSSProperties = {\r\n fontSize: 18,\r\n fontWeight: 600,\r\n color: 'var(--brycks-foreground-default)',\r\n margin: 0,\r\n lineHeight: 1.3,\r\n }\r\n\r\n const descriptionStyle: CSSProperties = {\r\n fontSize: 14,\r\n color: 'var(--brycks-foreground-muted)',\r\n margin: 0,\r\n }\r\n\r\n const closeButtonStyle: CSSProperties = {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n width: 32,\r\n height: 32,\r\n borderRadius: 'var(--brycks-radius-md)',\r\n color: 'var(--brycks-foreground-muted)',\r\n transition: 'all var(--brycks-duration-fast) var(--brycks-ease-out)',\r\n marginLeft: 12,\r\n flexShrink: 0,\r\n }\r\n\r\n const contentStyle: CSSProperties = {\r\n flex: 1,\r\n overflow: 'auto',\r\n padding: 24,\r\n }\r\n\r\n const modalContent = (\r\n <div\r\n className=\"brycks-modal-overlay\"\r\n style={overlayStyle}\r\n onClick={handleOverlayClick}\r\n >\r\n <div\r\n ref={(node) => {\r\n (modalRef as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n if (typeof ref === 'function') ref(node)\r\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\r\n }}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={title ? 'brycks-modal-title' : undefined}\r\n aria-describedby={description ? 'brycks-modal-description' : undefined}\r\n className={cx('brycks-modal', `brycks-modal--${size}`, className)}\r\n style={modalStyle}\r\n tabIndex={-1}\r\n data-testid={testId}\r\n {...props}\r\n >\r\n {(title || showCloseButton) && (\r\n <div className=\"brycks-modal-header\" style={headerStyle}>\r\n <div style={titleContainerStyle}>\r\n {title && (\r\n <h2 id=\"brycks-modal-title\" style={titleStyle}>\r\n {title}\r\n </h2>\r\n )}\r\n {description && (\r\n <p id=\"brycks-modal-description\" style={descriptionStyle}>\r\n {description}\r\n </p>\r\n )}\r\n </div>\r\n {showCloseButton && (\r\n <button\r\n type=\"button\"\r\n className=\"brycks-modal-close\"\r\n style={closeButtonStyle}\r\n onClick={onClose}\r\n aria-label=\"Close modal\"\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent'\r\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\r\n }}\r\n >\r\n <CloseIcon />\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n <div className=\"brycks-modal-content\" style={contentStyle}>\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n\r\n return createPortal(modalContent, document.body)\r\n})\r\n\r\nModal.displayName = 'Modal'\r\n"],"names":["sizeWidths","CloseIcon","memo","jsx","Modal","forwardRef","isOpen","onClose","size","title","description","closeOnOverlayClick","closeOnEscape","showCloseButton","className","style","testId","children","props","ref","modalRef","useRef","previousActiveElement","wasOpen","useEffect","modal","handleKeyDown","e","focusableElements","firstElement","lastElement","handleOverlayClick","useCallback","overlayStyle","useMemo","modalStyle","headerStyle","titleContainerStyle","titleStyle","descriptionStyle","closeButtonStyle","contentStyle","modalContent","jsxs","node","cx","createPortal"],"mappings":";;;;AAgDA,MAAMA,IAAwC;AAAA,EAC5C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR,GAGMC,IAAYC,EAAK,WAAqB;AAC1C,SACE,gBAAAC,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACtE,UAAA,gBAAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,IAAA;AAAA,EAAA,GAElB;AAEJ,CAAC,GAEYC,IAAQC,EAAuC,SAC1D;AAAA,EACE,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,qBAAAC,IAAsB;AAAA,EACtB,eAAAC,IAAgB;AAAA,EAChB,iBAAAC,IAAkB;AAAA,EAClB,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAWC,EAAuB,IAAI,GACtCC,IAAwBD,EAA2B,IAAI,GACvDE,IAAUF,EAAO,EAAK;AAG5B,EAAAG,EAAU,MAAM;AAEd,IAAIlB,KAAU,CAACiB,EAAQ,WACrBD,EAAsB,UAAU,SAAS,eACzCC,EAAQ,UAAU,MAGX,CAACjB,KAAUiB,EAAQ,YAEtB,SAAS,yBAAyB,eACpC,SAAS,cAAc,KAAA,GAGzBD,EAAsB,SAAS,MAAA,GAC/BA,EAAsB,UAAU,MAChCC,EAAQ,UAAU;AAAA,EAEtB,GAAG,CAACjB,CAAM,CAAC,GAGXkB,EAAU,MAAM;AACd,QAAI,CAAClB,EAAQ;AAEb,UAAMmB,IAAQL,EAAS;AACvB,IAAIK,KACFA,EAAM,MAAA;AAGR,UAAMC,IAAgB,CAACC,MAAqB;AAC1C,UAAIA,EAAE,QAAQ,YAAYf,GAAe;AACvC,QAAAL,EAAA;AACA;AAAA,MACF;AAEA,UAAIoB,EAAE,QAAQ,SAASF,GAAO;AAC5B,cAAMG,IAAoBH,EAAM;AAAA,UAC9B;AAAA,QAAA,GAEII,IAAeD,EAAkB,CAAC,GAClCE,IAAcF,EAAkBA,EAAkB,SAAS,CAAC;AAElE,QAAID,EAAE,YAAY,SAAS,kBAAkBE,KAC3CF,EAAE,eAAA,GACFG,GAAa,MAAA,KACJ,CAACH,EAAE,YAAY,SAAS,kBAAkBG,MACnDH,EAAE,eAAA,GACFE,GAAc,MAAA;AAAA,MAElB;AAAA,IACF;AAEA,oBAAS,iBAAiB,WAAWH,CAAa,GAClD,SAAS,KAAK,MAAM,WAAW,UAExB,MAAM;AACX,eAAS,oBAAoB,WAAWA,CAAa,GACrD,SAAS,KAAK,MAAM,WAAW;AAAA,IACjC;AAAA,EACF,GAAG,CAACpB,GAAQM,GAAeL,CAAO,CAAC;AAEnC,QAAMwB,IAAqBC;AAAA,IACzB,CAAC,MAAwB;AACvB,MAAI,EAAE,WAAW,EAAE,iBAAiBrB,KAClCJ,EAAA;AAAA,IAEJ;AAAA,IACA,CAACI,GAAqBJ,CAAO;AAAA,EAAA,GAIzB0B,IAAeC,EAAuB,OAAO;AAAA,IACjD,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,WAAW;AAAA,EAAA,IACT,CAAA,CAAE,GAEAC,IAAaD,EAAuB,OAAO;AAAA,IAC/C,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAUlC,EAAWQ,CAAI;AAAA,IACzB,WAAWA,MAAS,SAAS,uBAAuB;AAAA,IACpD,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,eAAe;AAAA,IACf,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,IACT,GAAGO;AAAA,EAAA,IACD,CAACP,GAAMO,CAAK,CAAC;AAEjB,MAAI,CAACT,EAAQ,QAAO;AAEpB,QAAM8B,IAA6B;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,EAAA,GAGVC,IAAqC;AAAA,IACzC,SAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAK;AAAA,EAAA,GAGDC,IAA4B;AAAA,IAChC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA,GAGRC,IAAkC;AAAA,IACtC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA,GAGJC,IAAkC;AAAA,IACtC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA,GAGRC,IAA8B;AAAA,IAClC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,EAAA,GAGLC,IACJ,gBAAAvC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAU;AAAA,MACV,OAAO8B;AAAA,MACP,SAASF;AAAA,MAET,UAAA,gBAAAY;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK,CAACC,MAAS;AACZ,YAAAxB,EAA2D,UAAUwB,GAClE,OAAOzB,KAAQ,aAAYA,EAAIyB,CAAI,IAC9BzB,MAAMA,EAAsD,UAAUyB;AAAA,UACjF;AAAA,UACA,MAAK;AAAA,UACL,cAAW;AAAA,UACX,mBAAiBnC,IAAQ,uBAAuB;AAAA,UAChD,oBAAkBC,IAAc,6BAA6B;AAAA,UAC7D,WAAWmC,EAAG,gBAAgB,iBAAiBrC,CAAI,IAAIM,CAAS;AAAA,UAChE,OAAOqB;AAAA,UACP,UAAU;AAAA,UACV,eAAanB;AAAA,UACZ,GAAGE;AAAA,UAEF,UAAA;AAAA,aAAAT,KAASI,MACT,gBAAA8B,EAAC,OAAA,EAAI,WAAU,uBAAsB,OAAOP,GAC1C,UAAA;AAAA,cAAA,gBAAAO,EAAC,OAAA,EAAI,OAAON,GACT,UAAA;AAAA,gBAAA5B,uBACE,MAAA,EAAG,IAAG,sBAAqB,OAAO6B,GAChC,UAAA7B,GACH;AAAA,gBAEDC,KACC,gBAAAP,EAAC,KAAA,EAAE,IAAG,4BAA2B,OAAOoC,GACrC,UAAA7B,EAAA,CACH;AAAA,cAAA,GAEJ;AAAA,cACCG,KACC,gBAAAV;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,OAAOqC;AAAA,kBACP,SAASjC;AAAA,kBACT,cAAW;AAAA,kBACX,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB,kCACxC,EAAE,cAAc,MAAM,QAAQ;AAAA,kBAChC;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB,eACxC,EAAE,cAAc,MAAM,QAAQ;AAAA,kBAChC;AAAA,kBAEA,4BAACN,GAAA,CAAA,CAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACb,GAEJ;AAAA,8BAGD,OAAA,EAAI,WAAU,wBAAuB,OAAOwC,GAC1C,UAAAxB,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAIN,SAAO6B,EAAaJ,GAAc,SAAS,IAAI;AACjD,CAAC;AAEDtC,EAAM,cAAc;"}
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),t=require("react"),V=require("react-dom"),Z=require("../../../utils/styles.cjs"),$=require("../../../hooks/useClickOutside.cjs"),D=require("../../../hooks/useMediaQuery.cjs"),q=t.forwardRef(function({content:I,children:C,placement:w="bottom",trigger:r="click",isOpen:y,defaultOpen:z=!1,onOpenChange:E,offset:u=8,openDelay:M=200,closeDelay:x=200,closeOnOutsideClick:A=!0,showArrow:te=!0,className:B,style:F,testId:N,...X},h){const[Y,Q]=t.useState(z),[P,W]=t.useState({top:0,left:0}),[v,T]=t.useState(!1),R=t.useRef(null),L=t.useRef(null),d=t.useRef(null),f=t.useRef(null),O=t.useId(),_=D.usePrefersReducedMotion(),s=y??Y,n=t.useCallback(e=>{y===void 0&&Q(e),E?.(e)},[y,E]),G=$.useClickOutside(()=>{A&&r==="click"&&s&&n(!1)},{enabled:s&&r==="click"});t.useEffect(()=>(T(!0),()=>T(!1)),[]),t.useEffect(()=>{if(!s||!R.current||!v)return;const e=()=>{const S=R.current,j=L.current;if(!S||!j)return;const o=S.getBoundingClientRect(),c=j.getBoundingClientRect(),p=window.scrollX,b=window.scrollY;let a=0,i=0;switch(w){case"top":case"top-start":case"top-end":a=o.top+b-c.height-u;break;case"bottom":case"bottom-start":case"bottom-end":a=o.bottom+b+u;break;case"left":case"left-start":case"left-end":i=o.left+p-c.width-u;break;case"right":case"right-start":case"right-end":i=o.right+p+u;break}switch(w){case"top":case"bottom":i=o.left+p+(o.width-c.width)/2;break;case"top-start":case"bottom-start":i=o.left+p;break;case"top-end":case"bottom-end":i=o.right+p-c.width;break;case"left":case"right":a=o.top+b+(o.height-c.height)/2;break;case"left-start":case"right-start":a=o.top+b;break;case"left-end":case"right-end":a=o.bottom+b-c.height;break}W({top:a,left:i})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[s,w,u,v]),t.useEffect(()=>()=>{d.current&&clearTimeout(d.current),f.current&&clearTimeout(f.current)},[]);const m=t.useCallback(()=>{f.current&&clearTimeout(f.current),r==="hover"?d.current=setTimeout(()=>n(!0),M):n(!0)},[r,M,n]),k=t.useCallback(()=>{d.current&&clearTimeout(d.current),r==="hover"?f.current=setTimeout(()=>n(!1),x):n(!1)},[r,x,n]),H=t.useCallback(()=>{s?k():m()},[s,m,k]),g=C.props,J=t.cloneElement(C,{ref:R,"aria-expanded":s,"aria-haspopup":"dialog","aria-controls":s?O:void 0,...r==="click"&&{onClick:e=>{g.onClick?.(e),H()}},...r==="hover"&&{onMouseEnter:e=>{g.onMouseEnter?.(e),m()},onMouseLeave:e=>{g.onMouseLeave?.(e),k()}}}),K={position:"absolute",top:P.top,left:P.left,zIndex:"var(--brycks-z-popover)",backgroundColor:"var(--brycks-background-elevated)",border:"1px solid var(--brycks-border-default)",borderRadius:"var(--brycks-radius-lg)",boxShadow:"var(--brycks-shadow-lg)",padding:"var(--brycks-space-3)",minWidth:120,animation:_?"none":"brycks-popover-in 150ms ease-out",...F},U=s&&v&&l.jsxs(l.Fragment,{children:[l.jsx("style",{children:`
2
+ @keyframes brycks-popover-in {
3
+ from { opacity: 0; transform: scale(0.95); }
4
+ to { opacity: 1; transform: scale(1); }
5
+ }
6
+ `}),l.jsx("div",{ref:e=>{L.current=e,G.current=e,typeof h=="function"?h(e):h&&(h.current=e)},id:O,className:Z.cx("brycks-popover",B),style:K,role:"dialog","aria-modal":"false","data-testid":N,onMouseEnter:r==="hover"?m:void 0,onMouseLeave:r==="hover"?k:void 0,...X,children:I})]});return l.jsxs(l.Fragment,{children:[J,v&&V.createPortal(U,document.body)]})});q.displayName="Popover";exports.Popover=q;
7
+ //# sourceMappingURL=Popover.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.cjs","sources":["../../../../src/components/feedback/Popover/Popover.tsx"],"sourcesContent":["/**\n * Popover Component\n *\n * A floating content panel that appears relative to a trigger element.\n * Supports different placements and can be triggered by click or hover.\n */\n\nimport React, {\n forwardRef,\n useState,\n useEffect,\n useRef,\n useCallback,\n cloneElement,\n useId,\n type CSSProperties,\n type ReactNode,\n type ReactElement,\n type HTMLAttributes,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { useClickOutside } from '../../../hooks/useClickOutside'\nimport { usePrefersReducedMotion } from '../../../hooks/useMediaQuery'\n\nexport type PopoverPlacement =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n\nexport type PopoverTrigger = 'click' | 'hover'\n\nexport interface PopoverProps extends Omit<HTMLAttributes<HTMLDivElement>, 'content'> {\n /** Popover content */\n content: ReactNode\n /** Trigger element */\n children: ReactElement\n /** Placement relative to trigger */\n placement?: PopoverPlacement\n /** How to trigger the popover */\n trigger?: PopoverTrigger\n /** Whether the popover is open (controlled) */\n isOpen?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Callback when open state changes */\n onOpenChange?: (isOpen: boolean) => void\n /** Offset from trigger in pixels */\n offset?: number\n /** Delay before showing (hover trigger) */\n openDelay?: number\n /** Delay before hiding (hover trigger) */\n closeDelay?: number\n /** Whether to close on outside click */\n closeOnOutsideClick?: boolean\n /** Whether to show arrow */\n showArrow?: boolean\n /** Custom class name for content */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover(\n {\n content,\n children,\n placement = 'bottom',\n trigger = 'click',\n isOpen: controlledIsOpen,\n defaultOpen = false,\n onOpenChange,\n offset = 8,\n openDelay = 200,\n closeDelay = 200,\n closeOnOutsideClick = true,\n showArrow: _showArrow = true,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [internalIsOpen, setInternalIsOpen] = useState(defaultOpen)\n const [position, setPosition] = useState({ top: 0, left: 0 })\n const [mounted, setMounted] = useState(false)\n const triggerRef = useRef<HTMLElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const openTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout>>(null)\n const popoverId = useId()\n const prefersReducedMotion = usePrefersReducedMotion()\n\n const isOpen = controlledIsOpen ?? internalIsOpen\n\n const setIsOpen = useCallback(\n (open: boolean) => {\n if (controlledIsOpen === undefined) {\n setInternalIsOpen(open)\n }\n onOpenChange?.(open)\n },\n [controlledIsOpen, onOpenChange]\n )\n\n // Click outside handler\n const clickOutsideRef = useClickOutside<HTMLDivElement>(() => {\n if (closeOnOutsideClick && trigger === 'click' && isOpen) {\n setIsOpen(false)\n }\n }, { enabled: isOpen && trigger === 'click' })\n\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current || !mounted) return\n\n const updatePosition = () => {\n const trigger = triggerRef.current\n const content = contentRef.current\n if (!trigger || !content) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const contentRect = content.getBoundingClientRect()\n const scrollX = window.scrollX\n const scrollY = window.scrollY\n\n let top = 0\n let left = 0\n\n // Calculate base position\n switch (placement) {\n case 'top':\n case 'top-start':\n case 'top-end':\n top = triggerRect.top + scrollY - contentRect.height - offset\n break\n case 'bottom':\n case 'bottom-start':\n case 'bottom-end':\n top = triggerRect.bottom + scrollY + offset\n break\n case 'left':\n case 'left-start':\n case 'left-end':\n left = triggerRect.left + scrollX - contentRect.width - offset\n break\n case 'right':\n case 'right-start':\n case 'right-end':\n left = triggerRect.right + scrollX + offset\n break\n }\n\n // Calculate alignment\n switch (placement) {\n case 'top':\n case 'bottom':\n left = triggerRect.left + scrollX + (triggerRect.width - contentRect.width) / 2\n break\n case 'top-start':\n case 'bottom-start':\n left = triggerRect.left + scrollX\n break\n case 'top-end':\n case 'bottom-end':\n left = triggerRect.right + scrollX - contentRect.width\n break\n case 'left':\n case 'right':\n top = triggerRect.top + scrollY + (triggerRect.height - contentRect.height) / 2\n break\n case 'left-start':\n case 'right-start':\n top = triggerRect.top + scrollY\n break\n case 'left-end':\n case 'right-end':\n top = triggerRect.bottom + scrollY - contentRect.height\n break\n }\n\n setPosition({ top, left })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen, placement, offset, mounted])\n\n // Cleanup timeouts\n useEffect(() => {\n return () => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n }\n }, [])\n\n const handleOpen = useCallback(() => {\n if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current)\n if (trigger === 'hover') {\n openTimeoutRef.current = setTimeout(() => setIsOpen(true), openDelay)\n } else {\n setIsOpen(true)\n }\n }, [trigger, openDelay, setIsOpen])\n\n const handleClose = useCallback(() => {\n if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current)\n if (trigger === 'hover') {\n closeTimeoutRef.current = setTimeout(() => setIsOpen(false), closeDelay)\n } else {\n setIsOpen(false)\n }\n }, [trigger, closeDelay, setIsOpen])\n\n const handleToggle = useCallback(() => {\n if (isOpen) {\n handleClose()\n } else {\n handleOpen()\n }\n }, [isOpen, handleOpen, handleClose])\n\n // Clone trigger with event handlers and ARIA attributes\n const childProps = children.props as Record<string, unknown>\n const triggerElement = cloneElement(children as ReactElement<Record<string, unknown>>, {\n ref: triggerRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? popoverId : undefined,\n ...(trigger === 'click' && {\n onClick: (e: React.MouseEvent) => {\n (childProps.onClick as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleToggle()\n },\n }),\n ...(trigger === 'hover' && {\n onMouseEnter: (e: React.MouseEvent) => {\n (childProps.onMouseEnter as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleOpen()\n },\n onMouseLeave: (e: React.MouseEvent) => {\n (childProps.onMouseLeave as ((e: React.MouseEvent) => void) | undefined)?.(e)\n handleClose()\n },\n }),\n })\n\n const contentStyle: CSSProperties = {\n position: 'absolute',\n top: position.top,\n left: position.left,\n zIndex: 'var(--brycks-z-popover)',\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n padding: 'var(--brycks-space-3)',\n minWidth: 120,\n animation: prefersReducedMotion ? 'none' : 'brycks-popover-in 150ms ease-out',\n ...style,\n }\n\n const popoverContent = isOpen && mounted && (\n <>\n <style>\n {`\n @keyframes brycks-popover-in {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n }\n `}\n </style>\n <div\n ref={(node) => {\n (contentRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (clickOutsideRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n id={popoverId}\n className={cx('brycks-popover', className)}\n style={contentStyle}\n role=\"dialog\"\n aria-modal=\"false\"\n data-testid={testId}\n onMouseEnter={trigger === 'hover' ? handleOpen : undefined}\n onMouseLeave={trigger === 'hover' ? handleClose : undefined}\n {...props}\n >\n {content}\n </div>\n </>\n )\n\n return (\n <>\n {triggerElement}\n {mounted && createPortal(popoverContent, document.body)}\n </>\n )\n})\n\nPopover.displayName = 'Popover'\n"],"names":["Popover","forwardRef","content","children","placement","trigger","controlledIsOpen","defaultOpen","onOpenChange","offset","openDelay","closeDelay","closeOnOutsideClick","_showArrow","className","style","testId","props","ref","internalIsOpen","setInternalIsOpen","useState","position","setPosition","mounted","setMounted","triggerRef","useRef","contentRef","openTimeoutRef","closeTimeoutRef","popoverId","useId","prefersReducedMotion","usePrefersReducedMotion","isOpen","setIsOpen","useCallback","open","clickOutsideRef","useClickOutside","useEffect","updatePosition","triggerRect","contentRect","scrollX","scrollY","top","left","handleOpen","handleClose","handleToggle","childProps","triggerElement","cloneElement","contentStyle","popoverContent","jsxs","Fragment","jsx","node","cx","createPortal"],"mappings":"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"}