@okam/stack-ui 1.25.2 → 1.25.3

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 (382) hide show
  1. package/.eslintrc.js +32 -0
  2. package/.storybook/.eslintrc.js +29 -0
  3. package/.storybook/main.ts +33 -0
  4. package/.storybook/preview.js +56 -0
  5. package/.storybook/tsconfig.json +17 -0
  6. package/CHANGELOG.md +574 -0
  7. package/README.md +8 -0
  8. package/package.json +1 -1
  9. package/postcss.config.js +15 -0
  10. package/project.json +77 -0
  11. package/src/_stories/icons/code-brackets.svg +1 -0
  12. package/src/_stories/icons/colors.svg +1 -0
  13. package/src/_stories/icons/comments.svg +1 -0
  14. package/src/_stories/icons/direction.svg +1 -0
  15. package/src/_stories/icons/flow.svg +1 -0
  16. package/src/_stories/icons/plugin.svg +1 -0
  17. package/src/_stories/icons/repo.svg +1 -0
  18. package/src/_stories/icons/stackalt.svg +1 -0
  19. package/src/components/Accordion/accordion.stories.mdx +240 -0
  20. package/src/components/Accordion/components/AccordionItem.tsx +53 -0
  21. package/src/components/Accordion/components/AriaAccordionItem.tsx +76 -0
  22. package/src/components/Accordion/hooks/useAccordionState.ts +46 -0
  23. package/src/components/Accordion/index.tsx +38 -0
  24. package/{components/Accordion/interface.d.ts → src/components/Accordion/interface.ts} +23 -17
  25. package/src/components/Alerts/alerts.stories.mdx +282 -0
  26. package/src/components/Alerts/components/AlertsCloseButton.tsx +20 -0
  27. package/src/components/Alerts/components/AlertsItem.tsx +39 -0
  28. package/src/components/Alerts/components/AlertsNavigationButton.tsx +71 -0
  29. package/src/components/Alerts/components/AlertsSwiper.tsx +125 -0
  30. package/src/components/Alerts/components/pagination/AlertsPagination.tsx +32 -0
  31. package/src/components/Alerts/components/pagination/AlertsPaginationBullet.tsx +61 -0
  32. package/src/components/Alerts/index.tsx +54 -0
  33. package/src/components/Alerts/interface.ts +51 -0
  34. package/src/components/Box/box.stories.mdx +27 -0
  35. package/src/components/Box/index.tsx +36 -0
  36. package/src/components/Box/interface.ts +10 -0
  37. package/src/components/Button/button.stories.mdx +99 -0
  38. package/src/components/Button/index.tsx +92 -0
  39. package/src/components/Button/interface.ts +22 -0
  40. package/src/components/Calendar/RangeCalendar.tsx +61 -0
  41. package/src/components/Calendar/calendar.stories.mdx +28 -0
  42. package/src/components/Calendar/components/CalendarCell.tsx +60 -0
  43. package/src/components/Calendar/components/CalendarGrid.tsx +44 -0
  44. package/src/components/Calendar/index.tsx +63 -0
  45. package/src/components/Calendar/interface.ts +37 -0
  46. package/src/components/Carousel/carousel.stories.mdx +182 -0
  47. package/src/components/Carousel/index.tsx +99 -0
  48. package/src/components/Carousel/interface.ts +26 -0
  49. package/src/components/Date/date.stories.mdx +122 -0
  50. package/src/components/Date/index.tsx +35 -0
  51. package/src/components/Date/interface.ts +7 -0
  52. package/src/components/Dialog/index.tsx +14 -0
  53. package/src/components/Dialog/interface.ts +6 -0
  54. package/src/components/DirectusImg/index.tsx +59 -0
  55. package/src/components/DirectusImg/interface.ts +19 -0
  56. package/src/components/Icon/index.tsx +40 -0
  57. package/src/components/Icon/interface.ts +8 -0
  58. package/src/components/Img/img.stories.mdx +28 -0
  59. package/src/components/Img/index.tsx +30 -0
  60. package/src/components/Img/interface.ts +9 -0
  61. package/src/components/Lightbox/hooks/overlay/index.tsx +36 -0
  62. package/src/components/Lightbox/index.tsx +82 -0
  63. package/src/components/Lightbox/interface.ts +28 -0
  64. package/src/components/Lightbox/lightbox.stories.mdx +79 -0
  65. package/src/components/Menu/Menu.tsx +43 -0
  66. package/src/components/Menu/MenuSidePanel.tsx +41 -0
  67. package/src/components/Menu/components/InnerContent.tsx +26 -0
  68. package/src/components/Menu/components/MenuItems.tsx +133 -0
  69. package/src/components/Menu/components/TabContainer.tsx +13 -0
  70. package/src/components/Menu/interface.ts +41 -0
  71. package/src/components/Menu/menu.stories.mdx +23 -0
  72. package/src/components/Modal/components/ModalDialog.tsx +31 -0
  73. package/src/components/Modal/components/ModalOverlay.tsx +21 -0
  74. package/src/components/Modal/index.tsx +32 -0
  75. package/{components/Modal/interface.d.ts → src/components/Modal/interface.ts} +14 -11
  76. package/src/components/Popover/index.tsx +138 -0
  77. package/src/components/Popover/interface.ts +25 -0
  78. package/src/components/Popover/popover.stories.mdx +66 -0
  79. package/src/components/ShareButton/index.tsx +172 -0
  80. package/src/components/ShareButton/interface.ts +29 -0
  81. package/src/components/ShareButton/share-button.stories.mdx +48 -0
  82. package/src/components/ShareButton/utils/generateUtmTags.ts +4 -0
  83. package/src/components/ShareButton/utils/useFacebookShareUrl.ts +15 -0
  84. package/src/components/ShareButton/utils/useMailToShareUrl.ts +15 -0
  85. package/src/components/ShareButton/utils/useTwitterShareUrl.ts +15 -0
  86. package/src/components/ShareButton/utils/useWindow.ts +17 -0
  87. package/src/components/SidePanel/index.tsx +43 -0
  88. package/src/components/SidePanel/interface.ts +16 -0
  89. package/src/components/SidePanel/side-panel.stories.mdx +44 -0
  90. package/src/components/TabList/components/Tab/Tab.tsx +19 -0
  91. package/src/components/TabList/components/TabPanel/TabPanel.tsx +27 -0
  92. package/src/components/TabList/index.tsx +44 -0
  93. package/src/components/TabList/interface.ts +23 -0
  94. package/src/components/Typography/index.tsx +35 -0
  95. package/src/components/Typography/interface.ts +9 -0
  96. package/src/components/Typography/typo.stories.mdx +157 -0
  97. package/src/components/WysiwygBlock/index.tsx +20 -0
  98. package/src/components/WysiwygBlock/interface.ts +7 -0
  99. package/src/components/WysiwygBlock/wysiwyg.stories.mdx +53 -0
  100. package/src/components/fields/Checkbox/Checkbox.interface.ts +21 -0
  101. package/src/components/fields/Checkbox/Checkbox.stories.mdx +127 -0
  102. package/src/components/fields/Checkbox/index.tsx +62 -0
  103. package/src/components/fields/CheckboxGroup/checkbox-group.stories.mdx +59 -0
  104. package/src/components/fields/CheckboxGroup/components/CheckboxGroupItem/index.tsx +66 -0
  105. package/src/components/fields/CheckboxGroup/index.tsx +49 -0
  106. package/src/components/fields/CheckboxGroup/interface.ts +17 -0
  107. package/src/components/fields/DatePicker/DateRangePicker.tsx +73 -0
  108. package/src/components/fields/DatePicker/components/CalendarPopover.tsx +31 -0
  109. package/src/components/fields/DatePicker/components/DateField.tsx +61 -0
  110. package/src/components/fields/DatePicker/date-picker.stories.mdx +55 -0
  111. package/src/components/fields/DatePicker/index.tsx +71 -0
  112. package/src/components/fields/DatePicker/interface.ts +69 -0
  113. package/src/components/fields/Radio/Radio.interface.ts +30 -0
  114. package/src/components/fields/Radio/index.tsx +63 -0
  115. package/src/components/fields/RadioGroup/index.tsx +33 -0
  116. package/src/components/fields/RadioGroup/interface.ts +10 -0
  117. package/src/components/fields/RadioGroup/radio-group.stories.mdx +56 -0
  118. package/src/components/fields/SearchField/index.tsx +59 -0
  119. package/src/components/fields/SearchField/interface.ts +10 -0
  120. package/src/components/fields/SearchField/search.stories.mdx +91 -0
  121. package/src/components/fields/Select/Select.interface.ts +24 -0
  122. package/src/components/fields/Select/Select.stories.mdx +53 -0
  123. package/src/components/fields/Select/Select.tsx +108 -0
  124. package/{components/fields/Select/components/Listbox.interface.d.ts → src/components/fields/Select/components/Listbox.interface.ts} +11 -8
  125. package/src/components/fields/Select/components/Listbox.tsx +40 -0
  126. package/src/components/fields/Select/components/Popover.interface.ts +14 -0
  127. package/src/components/fields/Select/components/Popover.tsx +32 -0
  128. package/{components/fields/SelectItem/SelectItem.interface.d.ts → src/components/fields/SelectItem/SelectItem.interface.ts} +4 -3
  129. package/src/components/fields/SelectItem/SelectItem.tsx +10 -0
  130. package/src/components/fields/TextArea/index.tsx +105 -0
  131. package/src/components/fields/TextArea/textArea.stories.mdx +60 -0
  132. package/src/components/fields/TextInputField/index.tsx +107 -0
  133. package/src/components/fields/TextInputField/interface.ts +30 -0
  134. package/src/components/fields/TextInputField/text-input-field.stories.mdx +64 -0
  135. package/src/components/icons/ArrowDown.tsx +11 -0
  136. package/src/components/icons/ArrowLeft.tsx +18 -0
  137. package/src/components/icons/ArrowRight.tsx +18 -0
  138. package/src/components/icons/Check.tsx +11 -0
  139. package/src/components/icons/ChevronLeft.tsx +11 -0
  140. package/src/components/icons/ChevronRight.tsx +11 -0
  141. package/src/components/icons/CloseBtn.tsx +11 -0
  142. package/src/components/icons/Facebook.tsx +14 -0
  143. package/src/components/icons/FacebookColored.tsx +16 -0
  144. package/src/components/icons/FacebookRounded.tsx +16 -0
  145. package/src/components/icons/Globe.tsx +38 -0
  146. package/src/components/icons/IconFallback.tsx +8 -0
  147. package/src/components/icons/Instagram.tsx +14 -0
  148. package/src/components/icons/InstagramColored.tsx +59 -0
  149. package/src/components/icons/Link.tsx +14 -0
  150. package/src/components/icons/LinkedIn.tsx +16 -0
  151. package/src/components/icons/Mail.tsx +16 -0
  152. package/src/components/icons/Plus.tsx +18 -0
  153. package/src/components/icons/Search.tsx +19 -0
  154. package/src/components/icons/Share.tsx +16 -0
  155. package/src/components/icons/Twitter.tsx +16 -0
  156. package/src/components/icons/TwitterColored.tsx +16 -0
  157. package/src/components/icons/Upload.tsx +14 -0
  158. package/src/components/icons/X.tsx +14 -0
  159. package/src/components/icons/YouTube.tsx +16 -0
  160. package/src/components/icons/YouTubeColored.tsx +17 -0
  161. package/src/components/icons/index.ts +24 -0
  162. package/src/examples/PageLayout/index.tsx +61 -0
  163. package/src/examples/PageLayout/layout.stories.mdx +35 -0
  164. package/{index.d.ts → src/index.ts} +72 -57
  165. package/src/message.tsx +8 -0
  166. package/src/providers/Accordion/index.tsx +15 -0
  167. package/src/providers/Accordion/interface.ts +14 -0
  168. package/src/providers/Alerts/index.tsx +15 -0
  169. package/src/providers/Alerts/interface.ts +11 -0
  170. package/src/providers/CheckboxGroup/index.tsx +22 -0
  171. package/{providers/CheckboxGroup/interface.d.ts → src/providers/CheckboxGroup/interface.ts} +5 -4
  172. package/src/providers/Client/index.tsx +21 -0
  173. package/src/providers/Client/interface.ts +13 -0
  174. package/src/providers/Menu/index.tsx +43 -0
  175. package/src/providers/Menu/interface.ts +32 -0
  176. package/src/providers/RadioGroup/RadioGroup.interface.ts +8 -0
  177. package/src/providers/RadioGroup/RadioGroup.tsx +25 -0
  178. package/src/providers/SidePanel/index.tsx +55 -0
  179. package/src/providers/SidePanel/interface.ts +26 -0
  180. package/src/providers/Theme/hooks.ts +25 -0
  181. package/src/providers/Theme/index.tsx +40 -0
  182. package/src/providers/Theme/interface.ts +28 -0
  183. package/src/providers/Theme/utils.ts +3 -0
  184. package/src/providers/UserSearchQuery/index.tsx +20 -0
  185. package/src/providers/UserSearchQuery/interface.ts +12 -0
  186. package/src/storybook/Lightbox/LightboxControlledState.tsx +28 -0
  187. package/src/storybook/Menu/Menu.tsx +177 -0
  188. package/src/storybook/Menu/NestedMenu.tsx +24 -0
  189. package/src/storybook/Menu/mock.tsx +84 -0
  190. package/src/storybook/SelectField/index.tsx +57 -0
  191. package/src/storybook/ShareButtonExample/index.tsx +66 -0
  192. package/src/tailwind.css +3 -0
  193. package/src/theme/Accordion/index.tsx +101 -0
  194. package/src/theme/Alerts/index.ts +97 -0
  195. package/src/theme/Box/index.ts +45 -0
  196. package/src/theme/Button/index.tsx +72 -0
  197. package/src/theme/Calendar/index.tsx +167 -0
  198. package/src/theme/Carousel/index.ts +36 -0
  199. package/src/theme/Checkbox/index.ts +49 -0
  200. package/src/theme/CheckboxGroup/index.ts +14 -0
  201. package/src/theme/DatePicker/index.tsx +42 -0
  202. package/src/theme/Image/index.ts +8 -0
  203. package/src/theme/LightBox/index.ts +56 -0
  204. package/src/theme/Radio/index.ts +31 -0
  205. package/src/theme/RadioGroup/index.ts +14 -0
  206. package/src/theme/Search/index.ts +20 -0
  207. package/src/theme/ShareButton/index.tsx +76 -0
  208. package/src/theme/SidePanel/index.ts +9 -0
  209. package/src/theme/TextArea/index.ts +25 -0
  210. package/src/theme/Typography/index.tsx +44 -0
  211. package/src/theme/index.tsx +178 -0
  212. package/src/transitions/AccordionTransition.tsx +26 -0
  213. package/src/transitions/ModalTransition.tsx +38 -0
  214. package/src/transitions/RenderWithOpacity.tsx +25 -0
  215. package/src/transitions/RenderWithSlide.tsx +21 -0
  216. package/src/transitions/SidePanelTransition.tsx +30 -0
  217. package/src/types/components.ts +34 -0
  218. package/static/images/image.png +0 -0
  219. package/tailwind.config.js +14 -0
  220. package/tsconfig.json +20 -0
  221. package/tsconfig.lib.json +25 -0
  222. package/vite.config.ts +58 -0
  223. package/components/Accordion/components/AccordionItem.d.ts +0 -3
  224. package/components/Accordion/components/AriaAccordionItem.d.ts +0 -3
  225. package/components/Accordion/hooks/useAccordionState.d.ts +0 -10
  226. package/components/Accordion/index.d.ts +0 -3
  227. package/components/Alerts/components/AlertsCloseButton.d.ts +0 -4
  228. package/components/Alerts/components/AlertsItem.d.ts +0 -3
  229. package/components/Alerts/components/AlertsNavigationButton.d.ts +0 -8
  230. package/components/Alerts/components/AlertsSwiper.d.ts +0 -3
  231. package/components/Alerts/components/pagination/AlertsPagination.d.ts +0 -3
  232. package/components/Alerts/components/pagination/AlertsPaginationBullet.d.ts +0 -3
  233. package/components/Alerts/index.d.ts +0 -3
  234. package/components/Alerts/interface.d.ts +0 -41
  235. package/components/Box/index.d.ts +0 -5
  236. package/components/Box/interface.d.ts +0 -10
  237. package/components/Button/index.d.ts +0 -6
  238. package/components/Button/interface.d.ts +0 -20
  239. package/components/Calendar/RangeCalendar.d.ts +0 -3
  240. package/components/Calendar/components/CalendarCell.d.ts +0 -3
  241. package/components/Calendar/components/CalendarGrid.d.ts +0 -3
  242. package/components/Calendar/index.d.ts +0 -3
  243. package/components/Calendar/interface.d.ts +0 -32
  244. package/components/Carousel/index.d.ts +0 -3
  245. package/components/Carousel/interface.d.ts +0 -24
  246. package/components/Date/index.d.ts +0 -3
  247. package/components/Date/interface.d.ts +0 -6
  248. package/components/Dialog/index.d.ts +0 -2
  249. package/components/Dialog/interface.d.ts +0 -6
  250. package/components/DirectusImg/index.d.ts +0 -3
  251. package/components/DirectusImg/interface.d.ts +0 -13
  252. package/components/Icon/index.d.ts +0 -3
  253. package/components/Icon/interface.d.ts +0 -7
  254. package/components/Img/index.d.ts +0 -3
  255. package/components/Img/interface.d.ts +0 -6
  256. package/components/Lightbox/index.d.ts +0 -3
  257. package/components/Lightbox/interface.d.ts +0 -25
  258. package/components/Menu/Menu.d.ts +0 -3
  259. package/components/Menu/MenuSidePanel.d.ts +0 -3
  260. package/components/Menu/components/InnerContent.d.ts +0 -3
  261. package/components/Menu/components/MenuItems.d.ts +0 -3
  262. package/components/Menu/components/TabContainer.d.ts +0 -3
  263. package/components/Menu/interface.d.ts +0 -31
  264. package/components/Modal/components/ModalDialog.d.ts +0 -3
  265. package/components/Modal/components/ModalOverlay.d.ts +0 -3
  266. package/components/Modal/index.d.ts +0 -3
  267. package/components/Popover/index.d.ts +0 -3
  268. package/components/Popover/interface.d.ts +0 -21
  269. package/components/ShareButton/index.d.ts +0 -4
  270. package/components/ShareButton/interface.d.ts +0 -26
  271. package/components/ShareButton/utils/generateUtmTags.d.ts +0 -2
  272. package/components/ShareButton/utils/useFacebookShareUrl.d.ts +0 -2
  273. package/components/ShareButton/utils/useMailToShareUrl.d.ts +0 -2
  274. package/components/ShareButton/utils/useTwitterShareUrl.d.ts +0 -2
  275. package/components/ShareButton/utils/useWindow.d.ts +0 -5
  276. package/components/SidePanel/index.d.ts +0 -4
  277. package/components/SidePanel/interface.d.ts +0 -12
  278. package/components/TabList/components/TabPanel/TabPanel.d.ts +0 -4
  279. package/components/TabList/interface.d.ts +0 -18
  280. package/components/Typography/index.d.ts +0 -5
  281. package/components/Typography/interface.d.ts +0 -9
  282. package/components/WysiwygBlock/index.d.ts +0 -3
  283. package/components/WysiwygBlock/interface.d.ts +0 -5
  284. package/components/fields/Checkbox/Checkbox.interface.d.ts +0 -18
  285. package/components/fields/Checkbox/index.d.ts +0 -3
  286. package/components/fields/CheckboxGroup/components/CheckboxGroupItem/index.d.ts +0 -3
  287. package/components/fields/CheckboxGroup/index.d.ts +0 -3
  288. package/components/fields/CheckboxGroup/interface.d.ts +0 -13
  289. package/components/fields/DatePicker/DateRangePicker.d.ts +0 -3
  290. package/components/fields/DatePicker/components/CalendarPopover.d.ts +0 -2
  291. package/components/fields/DatePicker/components/DateField.d.ts +0 -4
  292. package/components/fields/DatePicker/index.d.ts +0 -3
  293. package/components/fields/DatePicker/interface.d.ts +0 -37
  294. package/components/fields/Radio/Radio.interface.d.ts +0 -26
  295. package/components/fields/Radio/index.d.ts +0 -4
  296. package/components/fields/RadioGroup/index.d.ts +0 -3
  297. package/components/fields/RadioGroup/interface.d.ts +0 -9
  298. package/components/fields/SearchField/index.d.ts +0 -3
  299. package/components/fields/SearchField/interface.d.ts +0 -9
  300. package/components/fields/Select/Select.d.ts +0 -4
  301. package/components/fields/Select/Select.interface.d.ts +0 -26
  302. package/components/fields/Select/components/Listbox.d.ts +0 -4
  303. package/components/fields/Select/components/Popover.d.ts +0 -3
  304. package/components/fields/Select/components/Popover.interface.d.ts +0 -13
  305. package/components/fields/SelectItem/SelectItem.d.ts +0 -3
  306. package/components/fields/TextArea/index.d.ts +0 -4
  307. package/components/fields/TextInputField/index.d.ts +0 -4
  308. package/components/fields/TextInputField/interface.d.ts +0 -24
  309. package/components/icons/ArrowDown.d.ts +0 -3
  310. package/components/icons/ArrowLeft.d.ts +0 -3
  311. package/components/icons/ArrowRight.d.ts +0 -3
  312. package/components/icons/Check.d.ts +0 -3
  313. package/components/icons/ChevronLeft.d.ts +0 -3
  314. package/components/icons/ChevronRight.d.ts +0 -3
  315. package/components/icons/CloseBtn.d.ts +0 -3
  316. package/components/icons/Facebook.d.ts +0 -3
  317. package/components/icons/FacebookColored.d.ts +0 -3
  318. package/components/icons/FacebookRounded.d.ts +0 -3
  319. package/components/icons/Globe.d.ts +0 -3
  320. package/components/icons/IconFallback.d.ts +0 -3
  321. package/components/icons/Instagram.d.ts +0 -3
  322. package/components/icons/InstagramColored.d.ts +0 -3
  323. package/components/icons/Link.d.ts +0 -3
  324. package/components/icons/LinkedIn.d.ts +0 -3
  325. package/components/icons/Mail.d.ts +0 -3
  326. package/components/icons/Plus.d.ts +0 -3
  327. package/components/icons/Search.d.ts +0 -3
  328. package/components/icons/Share.d.ts +0 -3
  329. package/components/icons/Twitter.d.ts +0 -3
  330. package/components/icons/TwitterColored.d.ts +0 -3
  331. package/components/icons/Upload.d.ts +0 -3
  332. package/components/icons/X.d.ts +0 -3
  333. package/components/icons/YouTube.d.ts +0 -3
  334. package/components/icons/YouTubeColored.d.ts +0 -3
  335. package/components/icons/index.d.ts +0 -24
  336. package/index.js +0 -110
  337. package/index.mjs +0 -12897
  338. package/providers/Accordion/index.d.ts +0 -4
  339. package/providers/Accordion/interface.d.ts +0 -12
  340. package/providers/Alerts/index.d.ts +0 -4
  341. package/providers/Alerts/interface.d.ts +0 -9
  342. package/providers/CheckboxGroup/index.d.ts +0 -5
  343. package/providers/Client/index.d.ts +0 -4
  344. package/providers/Client/interface.d.ts +0 -10
  345. package/providers/Menu/index.d.ts +0 -4
  346. package/providers/Menu/interface.d.ts +0 -28
  347. package/providers/RadioGroup/RadioGroup.d.ts +0 -5
  348. package/providers/RadioGroup/RadioGroup.interface.d.ts +0 -7
  349. package/providers/SidePanel/index.d.ts +0 -4
  350. package/providers/SidePanel/interface.d.ts +0 -23
  351. package/providers/Theme/hooks.d.ts +0 -3
  352. package/providers/Theme/index.d.ts +0 -10
  353. package/providers/Theme/interface.d.ts +0 -24
  354. package/providers/Theme/utils.d.ts +0 -2
  355. package/providers/UserSearchQuery/index.d.ts +0 -4
  356. package/providers/UserSearchQuery/interface.d.ts +0 -10
  357. package/style.css +0 -1
  358. package/theme/Accordion/index.d.ts +0 -274
  359. package/theme/Alerts/index.d.ts +0 -1167
  360. package/theme/Box/index.d.ts +0 -214
  361. package/theme/Button/index.d.ts +0 -121
  362. package/theme/Calendar/index.d.ts +0 -366
  363. package/theme/Carousel/index.d.ts +0 -9
  364. package/theme/Checkbox/index.d.ts +0 -159
  365. package/theme/CheckboxGroup/index.d.ts +0 -30
  366. package/theme/DatePicker/index.d.ts +0 -43
  367. package/theme/Image/index.d.ts +0 -3
  368. package/theme/LightBox/index.d.ts +0 -455
  369. package/theme/Radio/index.d.ts +0 -108
  370. package/theme/RadioGroup/index.d.ts +0 -30
  371. package/theme/Search/index.d.ts +0 -30
  372. package/theme/ShareButton/index.d.ts +0 -174
  373. package/theme/SidePanel/index.d.ts +0 -3
  374. package/theme/TextArea/index.d.ts +0 -29
  375. package/theme/Typography/index.d.ts +0 -233
  376. package/theme/index.d.ts +0 -5
  377. package/transitions/AccordionTransition.d.ts +0 -3
  378. package/transitions/ModalTransition.d.ts +0 -7
  379. package/transitions/RenderWithOpacity.d.ts +0 -3
  380. package/transitions/RenderWithSlide.d.ts +0 -7
  381. package/transitions/SidePanelTransition.d.ts +0 -7
  382. package/types/components.d.ts +0 -28
@@ -0,0 +1,66 @@
1
+ 'use client'
2
+
3
+ import { useRef } from 'react'
4
+ import { FocusRing, VisuallyHidden, useCheckboxGroupItem } from 'react-aria'
5
+ import type { CheckboxGroupState } from 'react-stately'
6
+ import { useCheckboxGroupCtx } from '../../../../../providers/CheckboxGroup'
7
+ import useThemeContext from '../../../../../providers/Theme/hooks'
8
+ import Icon from '../../../../Icon'
9
+ import Typography from '../../../../Typography'
10
+ import type { TCheckboxGroupItemProps } from '../../interface'
11
+
12
+ const ContextCheckboxGroupItem = (props: TCheckboxGroupItemProps & { state: CheckboxGroupState }) => {
13
+ const {
14
+ id,
15
+ ariaLabel,
16
+ icon,
17
+ state,
18
+ themeName = 'checkbox',
19
+ customTheme,
20
+ tokens,
21
+ isDisabled = false,
22
+ isError = false,
23
+ value,
24
+ errorMessage,
25
+ label,
26
+ } = props
27
+ const ref = useRef(null)
28
+ const { inputProps } = useCheckboxGroupItem(props, state, ref)
29
+ const { isSelected } = state
30
+
31
+ const checkBoxTokens = { ...tokens, selected: isSelected(value), isDisabled, isError }
32
+ const checkBoxContainerTheme = useThemeContext(`${themeName}.container`, checkBoxTokens, customTheme)
33
+ const checkBoxTheme = useThemeContext(`${themeName}.checkBox`, checkBoxTokens, customTheme)
34
+ const checkMarkTheme = useThemeContext(`${themeName}.checkMark`, checkBoxTokens, customTheme)
35
+ const checkMarkIconTheme = useThemeContext(`${themeName}.checkMarkIcon`, checkBoxTokens, customTheme)
36
+
37
+ return (
38
+ <div>
39
+ <FocusRing focusRingClass="has-focus-ring" within>
40
+ <label className={checkBoxContainerTheme} htmlFor={id} aria-label={ariaLabel} aria-disabled={isDisabled}>
41
+ <VisuallyHidden>
42
+ <input ref={ref} {...inputProps} />
43
+ </VisuallyHidden>
44
+ <div className={checkBoxTheme} aria-checked={isSelected(value)} role="checkbox" aria-labelledby={id}>
45
+ <div className={checkMarkTheme}>{icon && <Icon icon={icon} customTheme={checkMarkIconTheme} />}</div>
46
+ </div>
47
+ <Typography themeName={`${themeName}.label`} tokens={checkBoxTokens}>
48
+ {label}
49
+ </Typography>
50
+ </label>
51
+ </FocusRing>
52
+ {isError && errorMessage && (
53
+ <Typography themeName={`${themeName}.errorMessage`} tokens={checkBoxTokens}>
54
+ {errorMessage}
55
+ </Typography>
56
+ )}
57
+ </div>
58
+ )
59
+ }
60
+
61
+ const CheckboxGroupItem = (props: TCheckboxGroupItemProps) => {
62
+ const state = useCheckboxGroupCtx()
63
+ return state && <ContextCheckboxGroupItem state={state} {...props} />
64
+ }
65
+
66
+ export default CheckboxGroupItem
@@ -0,0 +1,49 @@
1
+ 'use client'
2
+
3
+ /* eslint-disable no-unused-vars */
4
+ import { useCheckboxGroupState } from '@react-stately/checkbox'
5
+ import { useCheckboxGroup } from 'react-aria'
6
+ import { CheckboxGroupProvider } from '../../../providers/CheckboxGroup'
7
+ import Box from '../../Box'
8
+ import Typography from '../../Typography'
9
+ import type { TCheckboxGroupProps } from './interface'
10
+
11
+ const CheckboxGroup = (props: TCheckboxGroupProps) => {
12
+ const {
13
+ label,
14
+ isError = false,
15
+ errorMessage,
16
+ isDisabled = false,
17
+ children,
18
+ themeName = 'checkboxGroup',
19
+ tokens,
20
+ } = props
21
+ const state = useCheckboxGroupState(props)
22
+ const { groupProps, labelProps, errorMessageProps } = useCheckboxGroup(props, state)
23
+
24
+ const CheckboxGroupTokens = { ...tokens, isDisabled }
25
+
26
+ return (
27
+ <Box
28
+ {...groupProps}
29
+ aria-disabled={isDisabled}
30
+ themeName={`${themeName}.checkboxGroup`}
31
+ tokens={CheckboxGroupTokens}
32
+ >
33
+ {label && (
34
+ <Typography {...labelProps} tokens={{ size: 'h6' }}>
35
+ {label}
36
+ </Typography>
37
+ )}
38
+ <Box themeName={`${themeName}.checkboxGroupItemsGroup`}>
39
+ <CheckboxGroupProvider state={state}>{children}</CheckboxGroupProvider>
40
+ </Box>
41
+ {isError && errorMessage && (
42
+ <Typography {...errorMessageProps} tokens={{ isError: true }}>
43
+ {errorMessage}
44
+ </Typography>
45
+ )}
46
+ </Box>
47
+ )
48
+ }
49
+ export default CheckboxGroup
@@ -0,0 +1,17 @@
1
+ import type React from 'react'
2
+ import type { AriaCheckboxGroupItemProps } from 'react-aria'
3
+ import type { CheckboxGroupProps } from 'react-stately'
4
+ import type { TDefaultComponent } from '../../../types/components'
5
+ import type { TCheckboxProps } from '../Checkbox/Checkbox.interface'
6
+
7
+ export interface TCheckboxGroupProps extends TDefaultComponent, CheckboxGroupProps {
8
+ children: React.ReactNode
9
+ isError?: boolean
10
+ isDisabled?: boolean
11
+ errorMessage?: string
12
+ label?: string
13
+ }
14
+
15
+ export type TCheckboxGroupItemProps = TDefaultComponent &
16
+ Omit<AriaCheckboxGroupItemProps, 'children'> &
17
+ Omit<TCheckboxProps, 'children'>
@@ -0,0 +1,73 @@
1
+ 'use client'
2
+
3
+ /* eslint-disable react/require-default-props */
4
+ import { useDateRangePicker } from '@react-aria/datepicker'
5
+ import { useDateRangePickerState } from '@react-stately/datepicker'
6
+ import { useRef } from 'react'
7
+ import useThemeContext from '../../../providers/Theme/hooks'
8
+ import Button from '../../Button'
9
+ import RangeCalendar from '../../Calendar/RangeCalendar'
10
+ import { Dialog } from '../../Dialog'
11
+ import Icon from '../../Icon'
12
+ import { CalendarPopover } from './components/CalendarPopover'
13
+ import DateField from './components/DateField'
14
+ import type { TDateRangePickerProps } from './interface'
15
+
16
+ function DateRangePicker(props: TDateRangePickerProps) {
17
+ const state = useDateRangePickerState(props)
18
+ const ref = useRef(null)
19
+ const {
20
+ labelProps,
21
+ descriptionProps,
22
+ groupProps,
23
+ startFieldProps,
24
+ endFieldProps,
25
+ buttonProps,
26
+ dialogProps,
27
+ calendarProps,
28
+ } = useDateRangePicker(props, state, ref)
29
+
30
+ const { label, buttonLabel, description, themeName = 'datePicker', tokens, popoverPlacement, icon } = props
31
+
32
+ const containerTheme = useThemeContext(`${themeName}.container`, tokens)
33
+ const dateFieldTheme = useThemeContext(`${themeName}.dateField`, tokens)
34
+ const labelTheme = useThemeContext(`${themeName}.label`, tokens)
35
+
36
+ return (
37
+ <div className={containerTheme}>
38
+ {label && <span {...labelProps}>{label}</span>}
39
+ {description && <div {...descriptionProps}>{description}</div>}
40
+ <div {...groupProps} ref={ref}>
41
+ <Button
42
+ themeName={`${themeName}.button`}
43
+ tokens={{ ...tokens }}
44
+ type="button"
45
+ {...buttonProps}
46
+ handlePress={buttonProps.onPress}
47
+ >
48
+ {buttonLabel && <p className={labelTheme}>{buttonLabel}</p>}
49
+ <div className={dateFieldTheme}>
50
+ <DateField {...startFieldProps} /> -
51
+ <DateField {...endFieldProps} />
52
+ {state.validationState === 'invalid' && '❌'}
53
+ </div>
54
+ <Icon themeName={`${themeName}.icon`} tokens={{ ...tokens }} icon={icon ?? 'ArrowDown'} />
55
+ </Button>
56
+ </div>
57
+ {state.isOpen && (
58
+ <CalendarPopover triggerRef={ref} state={state} placement={popoverPlacement}>
59
+ <Dialog {...dialogProps}>
60
+ <div className={dateFieldTheme}>
61
+ <DateField {...startFieldProps} /> -
62
+ <DateField {...endFieldProps} />
63
+ {state.validationState === 'invalid' && '❌'}
64
+ </div>
65
+ <RangeCalendar {...calendarProps} />
66
+ </Dialog>
67
+ </CalendarPopover>
68
+ )}
69
+ </div>
70
+ )
71
+ }
72
+
73
+ export default DateRangePicker
@@ -0,0 +1,31 @@
1
+ import { usePopover, DismissButton, Overlay } from '@react-aria/overlays'
2
+ import * as React from 'react'
3
+ import useThemeContext from '../../../../providers/Theme/hooks'
4
+ import type { TCalendarPopoverProps } from '../interface'
5
+
6
+ export function CalendarPopover({ themeName = 'datePicker', tokens, ...rest }: TCalendarPopoverProps) {
7
+ const ref = React.useRef(null)
8
+ const { state, children } = { ...rest }
9
+
10
+ const { popoverProps, underlayProps } = usePopover(
11
+ {
12
+ ...rest,
13
+ popoverRef: ref,
14
+ },
15
+ state,
16
+ )
17
+
18
+ const underlayTheme = useThemeContext(`${themeName}.calendarUnderlay`, tokens)
19
+ const popoverTheme = useThemeContext(`${themeName}.calendarPopover`, tokens)
20
+
21
+ return (
22
+ <Overlay>
23
+ <div {...underlayProps} className={underlayTheme} />
24
+ <div {...popoverProps} ref={ref} className={popoverTheme}>
25
+ <DismissButton onDismiss={state.close} />
26
+ {children}
27
+ <DismissButton onDismiss={state.close} />
28
+ </div>
29
+ </Overlay>
30
+ )
31
+ }
@@ -0,0 +1,61 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import type { DateValue } from '@internationalized/date'
3
+ import { createCalendar } from '@internationalized/date'
4
+ import type { AriaDatePickerProps } from '@react-aria/datepicker'
5
+ import { useDateField, useDateSegment } from '@react-aria/datepicker'
6
+ import { useLocale } from '@react-aria/i18n'
7
+ import { useDateFieldState } from '@react-stately/datepicker'
8
+ import { useRef } from 'react'
9
+ import { FocusRing } from 'react-aria'
10
+ import useThemeContext from '../../../../providers/Theme/hooks'
11
+ import type { TDateSegmentProps } from '../interface'
12
+
13
+ function DateSegment({ segment, state }: TDateSegmentProps) {
14
+ const ref = useRef(null)
15
+ const { segmentProps } = useDateSegment(segment, state, ref)
16
+
17
+ const theme = useThemeContext('datePicker.dateSegment')
18
+
19
+ return (
20
+ <FocusRing focusRingClass="has-focus-ring">
21
+ <div {...segmentProps} ref={ref} className={theme}>
22
+ {/* Always reserve space for the placeholder, to prevent layout shift when editing. */}
23
+ <span
24
+ aria-hidden="true"
25
+ style={{
26
+ visibility: segment.isPlaceholder ? 'visible' : 'hidden',
27
+ height: segment.isPlaceholder ? '' : 0,
28
+ pointerEvents: 'none',
29
+ display: segment.isPlaceholder ? 'block' : 'none',
30
+ }}
31
+ >
32
+ {segment.placeholder}
33
+ </span>
34
+ {segment.isPlaceholder ? '' : segment.text}
35
+ </div>
36
+ </FocusRing>
37
+ )
38
+ }
39
+
40
+ function DateField(props: AriaDatePickerProps<DateValue>) {
41
+ const { locale } = useLocale()
42
+ const state = useDateFieldState({
43
+ ...props,
44
+ locale,
45
+ createCalendar,
46
+ })
47
+
48
+ const ref = useRef(null)
49
+ const { fieldProps } = useDateField(props, state, ref)
50
+
51
+ return (
52
+ <div {...fieldProps} ref={ref} className="flex">
53
+ {state.segments.map((segment, i) => (
54
+ // eslint-disable-next-line react/no-array-index-key
55
+ <DateSegment key={i} segment={segment} state={state} />
56
+ ))}
57
+ </div>
58
+ )
59
+ }
60
+
61
+ export default DateField
@@ -0,0 +1,55 @@
1
+ import { Canvas, Meta, Story } from '@storybook/addon-docs'
2
+ import DatePicker from './'
3
+ import DateRangePicker from './DateRangePicker'
4
+ import { OverlayContainer } from '@react-aria/overlays'
5
+
6
+ <Meta
7
+ title="Form/Fields/DatePicker"
8
+ component={DatePicker}
9
+ args={{
10
+ label: 'Filter by date',
11
+ onChange: (date) => console.log(date),
12
+ }}
13
+ />
14
+
15
+ export const DatePickerTemplate = (args) => <DatePicker {...args} />
16
+
17
+ export const DateRangePickerTemplate = (args) => <DateRangePicker {...args} />
18
+
19
+ # Date Picker
20
+
21
+ Date Picker component.
22
+
23
+ <Canvas>
24
+ <Story args={{ buttonLabel: 'Date Picker' }} name="Default">
25
+ {DatePickerTemplate.bind({})}
26
+ </Story>
27
+ </Canvas>
28
+
29
+ <Canvas>
30
+ <Story name="Date Field and Icon">{DatePickerTemplate.bind({})}</Story>
31
+ </Canvas>
32
+
33
+ <Canvas>
34
+ <Story
35
+ args={{
36
+ tokens: {
37
+ dateFieldShown: false,
38
+ },
39
+ }}
40
+ name="Only Icon"
41
+ >
42
+ {DatePickerTemplate.bind({})}
43
+ </Story>
44
+ </Canvas>
45
+
46
+ <Canvas>
47
+ <Story
48
+ args={{
49
+ buttonLabel: 'Date Range Picker',
50
+ }}
51
+ name="Date Range Picker"
52
+ >
53
+ {DateRangePickerTemplate.bind({})}
54
+ </Story>
55
+ </Canvas>
@@ -0,0 +1,71 @@
1
+ 'use client'
2
+
3
+ import { useDatePicker } from '@react-aria/datepicker'
4
+ import { useDatePickerState } from '@react-stately/datepicker'
5
+ import { useRef } from 'react'
6
+ import useThemeContext from '../../../providers/Theme/hooks'
7
+ import Button from '../../Button'
8
+ import Calendar from '../../Calendar'
9
+ import { Dialog } from '../../Dialog'
10
+ import Icon from '../../Icon'
11
+ import { CalendarPopover } from './components/CalendarPopover'
12
+ import DateField from './components/DateField'
13
+ import type { TDatePickerProps } from './interface'
14
+
15
+ function DatePicker({
16
+ popoverPlacement = 'bottom start',
17
+ tokens,
18
+ customTheme,
19
+ themeName = 'datePicker',
20
+ icon = 'ArrowDown',
21
+ description,
22
+ buttonLabel,
23
+ ...rest
24
+ }: TDatePickerProps) {
25
+ const state = useDatePickerState({ ...rest })
26
+ const ref = useRef(null)
27
+ const { groupProps, fieldProps, labelProps, descriptionProps, buttonProps, dialogProps, calendarProps } =
28
+ useDatePicker({ ...rest }, state, ref)
29
+
30
+ const { label } = { ...rest }
31
+
32
+ const containerTheme = useThemeContext(`${themeName}.container`, tokens)
33
+ const dateFieldTheme = useThemeContext(`${themeName}.dateField`, tokens)
34
+ const labelTheme = useThemeContext(`${themeName}.label`, tokens)
35
+
36
+ return (
37
+ <div className={containerTheme}>
38
+ {label && <span {...labelProps}>{label}</span>}
39
+ {description && <div {...descriptionProps}>{description}</div>}
40
+ <div {...groupProps} ref={ref}>
41
+ <Button
42
+ themeName={`${themeName}.button`}
43
+ tokens={{ ...tokens }}
44
+ type="button"
45
+ {...buttonProps}
46
+ handlePress={buttonProps.onPress}
47
+ >
48
+ {buttonLabel && <p className={labelTheme}>{buttonLabel}</p>}
49
+ <div className={dateFieldTheme}>
50
+ <DateField {...fieldProps} />
51
+ {state.validationState === 'invalid' && '❌'}
52
+ </div>
53
+ <Icon themeName={`${themeName}.icon`} tokens={{ ...tokens }} icon={icon} />
54
+ </Button>
55
+ </div>
56
+ {state.isOpen && (
57
+ <CalendarPopover triggerRef={ref} state={state} placement={popoverPlacement}>
58
+ <Dialog {...dialogProps}>
59
+ <div>
60
+ <DateField {...fieldProps} />
61
+ {state.validationState === 'invalid' && '❌'}
62
+ </div>
63
+ <Calendar {...calendarProps} />
64
+ </Dialog>
65
+ </CalendarPopover>
66
+ )}
67
+ </div>
68
+ )
69
+ }
70
+
71
+ export default DatePicker
@@ -0,0 +1,69 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import type { DateValue } from '@internationalized/date'
3
+ import type {
4
+ DateFieldState,
5
+ DateSegment,
6
+ DatePickerStateOptions,
7
+ DateRangePickerStateOptions,
8
+ } from '@react-stately/datepicker'
9
+ import type { RangeValue } from '@react-types/shared'
10
+ import type React from 'react'
11
+ import type { AriaPopoverProps } from 'react-aria'
12
+ import type { OverlayTriggerState } from 'react-stately'
13
+ import type { TDefaultComponent } from '../../../types/components'
14
+
15
+ export interface TDateSegmentProps {
16
+ segment: DateSegment
17
+ state: DateFieldState
18
+ }
19
+
20
+ type PopoverPlacement =
21
+ | 'bottom'
22
+ | 'bottom left'
23
+ | 'bottom right'
24
+ | 'bottom start'
25
+ | 'bottom end'
26
+ | 'top'
27
+ | 'top left'
28
+ | 'top right'
29
+ | 'top start'
30
+ | 'top end'
31
+ | 'left'
32
+ | 'left top'
33
+ | 'left bottom'
34
+ | 'start'
35
+ | 'start top'
36
+ | 'start bottom'
37
+ | 'right'
38
+ | 'right top'
39
+ | 'right bottom'
40
+ | 'end'
41
+ | 'end top'
42
+ | 'end bottom'
43
+
44
+ export interface TDatePickerProps extends DatePickerStateOptions<DateValue>, TDefaultComponent {
45
+ label?: string
46
+ popoverPlacement?: PopoverPlacement
47
+ icon?: string
48
+ buttonLabel?: string
49
+ description?: string
50
+ }
51
+
52
+ export interface TDateRangePickerProps extends DateRangePickerStateOptions<DateValue>, TDefaultComponent {
53
+ buttonLabel?: string
54
+ label?: string
55
+ description?: string
56
+ icon?: string
57
+ popoverPlacement?: PopoverPlacement
58
+ minValue?: DateValue
59
+ value?: {
60
+ start: DateValue
61
+ end: DateValue
62
+ }
63
+ onChange?: (value: RangeValue<DateValue>) => void
64
+ }
65
+
66
+ export interface TCalendarPopoverProps extends Omit<AriaPopoverProps, 'popoverRef'>, TDefaultComponent {
67
+ children: React.ReactNode
68
+ state: OverlayTriggerState
69
+ }
@@ -0,0 +1,30 @@
1
+ import type React from 'react'
2
+ import type { ChangeHandler, RefCallBack } from 'react-hook-form'
3
+ import type { TDefaultComponent, TReactHookForm } from '../../../types/components'
4
+
5
+ export type TFieldReactHookForm = TReactHookForm & TDefaultComponent
6
+
7
+ export interface TRadioProps extends TFieldReactHookForm {
8
+ id: string
9
+ label: string
10
+ name: string
11
+ required?: boolean
12
+ isDisabled?: boolean
13
+ isError?: boolean
14
+ errorMessage?: string
15
+ ariaLabel?: string
16
+ value: string
17
+ onChange?: ((isSelected: boolean) => void) | ChangeHandler
18
+ inputRef?: RefCallBack
19
+ icon?: React.ReactNode
20
+ }
21
+
22
+ export interface TRadioLabelStyles {
23
+ isDisabled?: boolean
24
+ }
25
+
26
+ export interface TRadioStyles {
27
+ isDisabled?: boolean
28
+ isFocused?: boolean
29
+ isError?: boolean
30
+ }
@@ -0,0 +1,63 @@
1
+ 'use client'
2
+
3
+ import { isEmpty } from 'lodash'
4
+ import { useRef } from 'react'
5
+ import { useRadio, VisuallyHidden, useFocusRing, FocusRing, mergeProps } from 'react-aria'
6
+ import { get, useFormContext } from 'react-hook-form'
7
+ import { useTranslation } from 'react-i18next'
8
+ import { useRadioGroupCtx } from '../../../providers/RadioGroup/RadioGroup'
9
+ import useThemeContext from '../../../providers/Theme/hooks'
10
+ import Typography from '../../Typography'
11
+ import type { TRadioProps } from './Radio.interface'
12
+
13
+ const Radio = (props: TRadioProps) => {
14
+ const { id, label, themeName = 'radio', tokens, customTheme, value, fieldRef } = props
15
+ const state = useRadioGroupCtx()
16
+ const ref = useRef<HTMLInputElement | null>(null)
17
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
+ const { inputProps } = useRadio(props, state!, ref)
19
+ const isSelected = state?.selectedValue === value
20
+ const { focusProps } = useFocusRing()
21
+
22
+ const radioTokens = { ...tokens, selected: isSelected }
23
+ const labelTheme = useThemeContext(`${themeName}.label`, radioTokens, customTheme)
24
+ const radioTheme = useThemeContext(`${themeName}.radio`, radioTokens, customTheme)
25
+ const selectedMarkTheme = useThemeContext(`${themeName}.selectedMark`, radioTokens, customTheme)
26
+
27
+ return (
28
+ <div>
29
+ <FocusRing focusRingClass="has-focus-ring" within>
30
+ <label htmlFor={id} className={labelTheme}>
31
+ <VisuallyHidden>
32
+ <input
33
+ type="radio"
34
+ {...mergeProps(focusProps, inputProps)}
35
+ ref={(e) => {
36
+ fieldRef?.(e)
37
+ ref.current = e
38
+ }}
39
+ />
40
+ </VisuallyHidden>
41
+ <div className={radioTheme} aria-checked={isSelected} role="radio" aria-labelledby={id}>
42
+ <div className={selectedMarkTheme} />
43
+ </div>
44
+ <Typography themeName={`${themeName}.label`}>{label}</Typography>
45
+ </label>
46
+ </FocusRing>
47
+ </div>
48
+ )
49
+ }
50
+
51
+ export const ReactHookFormRadio = (props: TRadioProps) => {
52
+ const { name, required } = props
53
+ const { register, formState } = useFormContext()
54
+ const error: Error = get(formState.errors, name)
55
+ const errMsg = error?.message ?? undefined
56
+ const { t } = useTranslation('components')
57
+ const { ref: refCallback, ...rest } = register(name, {
58
+ required: required ? t('FORM.ERROR.REQUIRED') ?? 'required' : false,
59
+ })
60
+
61
+ return <Radio fieldRef={refCallback} {...rest} {...props} isError={!isEmpty(errMsg)} errorMessage={errMsg} />
62
+ }
63
+ export default Radio
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+
3
+ /* eslint-disable no-unused-vars */
4
+ import { useRadioGroupState } from '@react-stately/radio'
5
+ import { useRadioGroup } from 'react-aria'
6
+ import { RadioGroupProvider } from '../../../providers/RadioGroup/RadioGroup'
7
+ import Box from '../../Box'
8
+ import Typography from '../../Typography'
9
+ import type { TRadioGroupProps } from './interface'
10
+
11
+ const RadioGroup = (props: TRadioGroupProps) => {
12
+ const { label, isError = false, errorMessage, isDisabled = false, children, themeName = 'radioGroup', tokens } = props
13
+ const state = useRadioGroupState(props)
14
+ const { radioGroupProps } = useRadioGroup(props, state)
15
+
16
+ const radioGroupTokens = { ...tokens, isDisabled }
17
+
18
+ return (
19
+ <Box
20
+ {...radioGroupProps}
21
+ aria-disabled={isDisabled}
22
+ themeName={`${themeName}.radioGroup`}
23
+ tokens={radioGroupTokens}
24
+ >
25
+ {label && <Typography tokens={{ size: 'h6' }}>{label}</Typography>}
26
+ <Box themeName={`${themeName}.radioGroupItemsGroup`}>
27
+ <RadioGroupProvider state={state}>{children}</RadioGroupProvider>
28
+ </Box>
29
+ {isError && errorMessage && <Typography tokens={{ isError: true }}>{errorMessage}</Typography>}
30
+ </Box>
31
+ )
32
+ }
33
+ export default RadioGroup
@@ -0,0 +1,10 @@
1
+ import type React from 'react'
2
+ import type { TDefaultComponent } from '../../../types/components'
3
+
4
+ export interface TRadioGroupProps extends TDefaultComponent {
5
+ children: React.ReactNode
6
+ isError?: boolean
7
+ isDisabled?: boolean
8
+ errorMessage?: string
9
+ label?: string
10
+ }