@shohojdhara/atomix 0.1.16 → 0.1.18

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 (525) hide show
  1. package/CONTRIBUTING.md +151 -0
  2. package/NEXTJS_INTEGRATION.md +358 -0
  3. package/README.md +168 -119
  4. package/babel.config.js +58 -0
  5. package/css.d.ts +10 -0
  6. package/dist/css/atomix.css +1 -2
  7. package/dist/js/194.js +1 -2
  8. package/dist/js/244.js +1 -0
  9. package/dist/js/atomix.react.cjs.js +1 -0
  10. package/dist/js/atomix.react.esm.js +1 -2
  11. package/dist/js/atomix.react.umd.js +1 -2
  12. package/dist/js/chunks/cjs/202.9d3b1ef1eaa0d5c8a309.js +1 -0
  13. package/dist/js/chunks/cjs/308.6ea9685ea38ead4120d0.js +1 -0
  14. package/dist/js/chunks/cjs/54.73db6922594e421ba6b1.js +1 -0
  15. package/dist/js/chunks/cjs/619.51feecaadcab819780d4.js +1 -0
  16. package/dist/js/chunks/cjs/690.90f6d11164081cbcbc4d.js +1 -0
  17. package/dist/js/chunks/cjs/894.24877561df336a8dfd14.js +1 -0
  18. package/dist/js/chunks/cjs/897.6c2a71fae95338890de7.js +1 -0
  19. package/dist/js/chunks/esm/{202.ff48d27672233280e021.js → 202.82aa7b3244e53c9edb72.js} +1 -2
  20. package/dist/js/chunks/esm/{308.f873332126eba90e5c62.js → 308.27e1e4005705ae320432.js} +1 -2
  21. package/dist/js/chunks/esm/{54.4db919e5e4e5cc6d7c72.js → 54.ece1fd6964f98d4d994f.js} +1 -2
  22. package/dist/js/chunks/esm/{619.afc5a718eff77fa423b5.js → 619.ebeb0298432a066ac05c.js} +1 -2
  23. package/dist/js/chunks/esm/{690.a9e968c7497d61e56cdc.js → 690.c5f412cc979b55740359.js} +1 -2
  24. package/dist/js/chunks/esm/{894.f1091a4a8758c26d29e4.js → 894.3604ddc9367d75191198.js} +1 -2
  25. package/dist/js/chunks/esm/{897.561a50f7d043d42169da.js → 897.a4aab2fad9401693eb12.js} +1 -2
  26. package/dist/js/chunks/umd/{202.dac7605cc555b6bda542.js → 202.5017dd0403d696bf1644.js} +1 -2
  27. package/dist/js/chunks/umd/{308.6709979849dcbdb90c9b.js → 308.4bc14b9d7b16b6ee0ab8.js} +1 -2
  28. package/dist/js/chunks/umd/{54.403470e1f7d0ef4424a7.js → 54.7fdfb4a031989470a70d.js} +1 -2
  29. package/dist/js/chunks/umd/{619.fa05ea98c10270eb64c5.js → 619.84a0c35ecee695250085.js} +1 -2
  30. package/dist/js/chunks/umd/{690.aa7054d1c53e5402c2d6.js → 690.d7041094a34a4a434be2.js} +1 -2
  31. package/dist/js/chunks/umd/{894.3e1eaf0a2aadf4434390.js → 894.c127ee4e9513c22ee97d.js} +1 -2
  32. package/dist/js/chunks/umd/{897.554ea37be4453698c167.js → 897.26932ac837a39fc91907.js} +1 -2
  33. package/dist/types/components/Badge/index.d.ts +3 -3
  34. package/dist/types/components/{Navbar → Navigation/Menu}/MegaMenu.d.ts +1 -1
  35. package/dist/types/components/{Navbar → Navigation/Menu}/Menu.d.ts +1 -1
  36. package/dist/types/components/Navigation/Nav/Nav.d.ts +20 -0
  37. package/dist/types/components/{Navbar → Navigation/Nav}/NavDropdown.d.ts +1 -1
  38. package/dist/types/components/Navigation/Nav/NavItem.d.ts +33 -0
  39. package/dist/types/components/Navigation/Navbar/Navbar.d.ts +19 -0
  40. package/dist/types/components/Navigation/SideMenu/SideMenu.d.ts +20 -0
  41. package/dist/types/components/Navigation/SideMenu/SideMenuItem.d.ts +30 -0
  42. package/dist/types/components/Navigation/SideMenu/SideMenuList.d.ts +17 -0
  43. package/dist/types/components/Navigation/index.d.ts +10 -0
  44. package/dist/types/components/PhotoViewer/PhotoViewer.d.ts +2 -2
  45. package/dist/types/components/PhotoViewer/PhotoViewerHeader.d.ts +2 -2
  46. package/dist/types/components/Tab/index.d.ts +2 -2
  47. package/dist/types/components/Toggle/index.d.ts +2 -2
  48. package/dist/types/components/Tooltip/index.d.ts +3 -3
  49. package/dist/types/components/index.d.ts +1 -1
  50. package/dist/types/lib/composables/index.d.ts +1 -0
  51. package/dist/types/lib/composables/useDatePicker.d.ts +1 -1
  52. package/dist/types/lib/composables/useDropdown.d.ts +1 -1
  53. package/dist/types/lib/composables/useModal.d.ts +1 -1
  54. package/dist/types/lib/composables/usePhotoViewer.d.ts +1 -1
  55. package/dist/types/lib/composables/useRating.d.ts +1 -1
  56. package/dist/types/lib/composables/useSideMenu.d.ts +28 -0
  57. package/dist/types/lib/constants/components.d.ts +72 -0
  58. package/dist/types/lib/types/components.d.ts +103 -0
  59. package/examples/nextjs-example.tsx +271 -0
  60. package/implementation-guide.md +505 -0
  61. package/next.config.js +69 -0
  62. package/package.json +80 -42
  63. package/postcss.config.js +28 -0
  64. package/src/Introduction.mdx +3 -5
  65. package/src/assets/fonts/HelveticaNeue/stylesheet.css +140 -127
  66. package/src/components/Accordion/Accordion.stories.tsx +58 -45
  67. package/src/components/Accordion/Accordion.tsx +14 -4
  68. package/src/components/Accordion/scripts/accordionInteractions.ts +9 -9
  69. package/src/components/Accordion/scripts/bundle.ts +1 -1
  70. package/src/components/Accordion/scripts/index.ts +3 -3
  71. package/src/components/AtomixLogo.tsx +13 -19
  72. package/src/components/Avatar/Avatar.stories.tsx +24 -21
  73. package/src/components/Avatar/Avatar.tsx +5 -8
  74. package/src/components/Avatar/AvatarGroup.tsx +11 -11
  75. package/src/components/Avatar/index.ts +1 -1
  76. package/src/components/Avatar/scripts/index.ts +66 -71
  77. package/src/components/Badge/Badge.stories.tsx +51 -21
  78. package/src/components/Badge/Badge.tsx +14 -12
  79. package/src/components/Badge/index.ts +3 -3
  80. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +40 -40
  81. package/src/components/Breadcrumb/Breadcrumb.tsx +19 -26
  82. package/src/components/Breadcrumb/index.ts +1 -1
  83. package/src/components/Breadcrumb/scripts/breadcrumb.ts +36 -34
  84. package/src/components/Breadcrumb/scripts/index.ts +1 -1
  85. package/src/components/Breadcrumb/scripts/types.ts +9 -9
  86. package/src/components/Button/Button.stories.tsx +36 -12
  87. package/src/components/Button/Button.tsx +52 -39
  88. package/src/components/Button/index.ts +1 -1
  89. package/src/components/Button/scripts/buttonInteractions.ts +9 -9
  90. package/src/components/Button/scripts/index.ts +1 -1
  91. package/src/components/Callout/Callout.stories.tsx +207 -114
  92. package/src/components/Callout/Callout.tsx +12 -12
  93. package/src/components/Callout/index.ts +1 -1
  94. package/src/components/Callout/scripts/CalloutInteractions.ts +58 -48
  95. package/src/components/Callout/scripts/bundle.ts +2 -2
  96. package/src/components/Callout/scripts/index.ts +19 -15
  97. package/src/components/Card/Card.stories.tsx +2 -2
  98. package/src/components/Card/Card.tsx +49 -72
  99. package/src/components/Card/ElevationCard.tsx +4 -8
  100. package/src/components/Card/index.ts +1 -1
  101. package/src/components/Card/scripts/bundle.ts +7 -7
  102. package/src/components/Card/scripts/cardInteractions.ts +24 -24
  103. package/src/components/Card/scripts/index.ts +25 -26
  104. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -3
  105. package/src/components/ColorModeToggle/ColorModeToggle.tsx +12 -15
  106. package/src/components/ColorModeToggle/index.ts +1 -1
  107. package/src/components/Countdown/Countdown.stories.tsx +6 -2
  108. package/src/components/Countdown/Countdown.tsx +56 -48
  109. package/src/components/Countdown/index.ts +1 -1
  110. package/src/components/Countdown/scripts/index.ts +33 -28
  111. package/src/components/DataTable/DataTable.stories.tsx +23 -18
  112. package/src/components/DataTable/DataTable.tsx +39 -39
  113. package/src/components/DataTable/index.ts +1 -1
  114. package/src/components/DataTable/scripts/bundle.ts +8 -3
  115. package/src/components/DataTable/scripts/index.ts +182 -164
  116. package/src/components/DatePicker/DatePicker.stories.tsx +136 -148
  117. package/src/components/DatePicker/DatePicker.tsx +461 -420
  118. package/src/components/DatePicker/scripts/bundle.ts +12 -7
  119. package/src/components/DatePicker/scripts/componentInteractions.ts +76 -46
  120. package/src/components/DatePicker/scripts/index.ts +176 -156
  121. package/src/components/DatePicker/types.ts +32 -32
  122. package/src/components/DatePicker/utils.ts +41 -30
  123. package/src/components/Dropdown/Dropdown.stories.tsx +85 -55
  124. package/src/components/Dropdown/Dropdown.tsx +97 -88
  125. package/src/components/Dropdown/index.ts +5 -10
  126. package/src/components/Dropdown/scripts/bundle.ts +10 -10
  127. package/src/components/Dropdown/scripts/componentInteractions.ts +10 -2
  128. package/src/components/Dropdown/scripts/index.ts +122 -117
  129. package/src/components/EdgePanel/EdgePanel.stories.tsx +142 -58
  130. package/src/components/EdgePanel/EdgePanel.tsx +7 -13
  131. package/src/components/EdgePanel/index.ts +1 -1
  132. package/src/components/EdgePanel/scripts/bundle.ts +5 -5
  133. package/src/components/EdgePanel/scripts/edgePanelInteractions.ts +26 -26
  134. package/src/components/EdgePanel/scripts/index.ts +53 -53
  135. package/src/components/Form/Checkbox.stories.tsx +2 -2
  136. package/src/components/Form/Checkbox.tsx +13 -7
  137. package/src/components/Form/Form.stories.tsx +144 -218
  138. package/src/components/Form/Form.tsx +6 -6
  139. package/src/components/Form/FormGroup.stories.tsx +21 -38
  140. package/src/components/Form/FormGroup.tsx +18 -20
  141. package/src/components/Form/Input.stories.tsx +1 -1
  142. package/src/components/Form/Input.tsx +18 -8
  143. package/src/components/Form/Radio.stories.tsx +12 -25
  144. package/src/components/Form/Radio.tsx +11 -6
  145. package/src/components/Form/Select.stories.tsx +6 -6
  146. package/src/components/Form/Select.tsx +31 -33
  147. package/src/components/Form/Textarea.stories.tsx +7 -2
  148. package/src/components/Form/Textarea.tsx +17 -8
  149. package/src/components/Form/index.ts +1 -1
  150. package/src/components/Hero/Hero.stories.tsx +44 -42
  151. package/src/components/Hero/Hero.tsx +28 -38
  152. package/src/components/Hero/index.ts +1 -1
  153. package/src/components/Hero/scripts/bundle.ts +6 -6
  154. package/src/components/Hero/scripts/heroInteractions.ts +24 -29
  155. package/src/components/Hero/scripts/index.ts +16 -17
  156. package/src/components/Icon/Icon.tsx +16 -18
  157. package/src/components/Icon/index.ts +1 -1
  158. package/src/components/List/List.stories.tsx +1 -3
  159. package/src/components/List/List.tsx +6 -10
  160. package/src/components/List/ListGroup.tsx +1 -1
  161. package/src/components/List/index.ts +1 -1
  162. package/src/components/Messages/Messages.stories.tsx +30 -29
  163. package/src/components/Messages/Messages.tsx +60 -55
  164. package/src/components/Messages/index.ts +1 -1
  165. package/src/components/Messages/scripts/bundle.ts +1 -6
  166. package/src/components/Messages/scripts/componentInteractions.ts +32 -37
  167. package/src/components/Messages/scripts/index.ts +61 -55
  168. package/src/components/Modal/Modal.stories.tsx +77 -53
  169. package/src/components/Modal/Modal.tsx +63 -62
  170. package/src/components/Modal/index.ts +1 -1
  171. package/src/components/Modal/scripts/bundle.ts +3 -3
  172. package/src/components/Modal/scripts/index.ts +96 -84
  173. package/src/components/Modal/scripts/modalInteractions.ts +16 -14
  174. package/src/components/{Navbar → Navigation/Menu}/MegaMenu.tsx +50 -59
  175. package/src/components/Navigation/Menu/Menu.stories.tsx +340 -0
  176. package/src/components/Navigation/Menu/Menu.tsx +110 -0
  177. package/src/components/Navigation/Nav/Nav.stories.tsx +458 -0
  178. package/src/components/Navigation/Nav/Nav.tsx +50 -0
  179. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  180. package/src/components/Navigation/Nav/NavItem.tsx +159 -0
  181. package/src/components/{Navbar → Navigation/Navbar}/Navbar.stories.tsx +198 -104
  182. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  183. package/src/components/Navigation/README.md +314 -0
  184. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  185. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +618 -0
  186. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  187. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +95 -0
  188. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  189. package/src/components/Navigation/index.ts +23 -0
  190. package/src/components/Navigation/scripts/NavbarInteractions.ts +171 -0
  191. package/src/components/Navigation/scripts/SideMenu.ts +319 -0
  192. package/src/components/Navigation/scripts/SideMenuBundle.ts +69 -0
  193. package/src/components/Navigation/scripts/SideMenuInteractions.ts +250 -0
  194. package/src/components/Navigation/scripts/bundle.ts +58 -0
  195. package/src/components/Navigation/scripts/index.ts +248 -0
  196. package/src/components/Pagination/Pagination.stories.tsx +34 -33
  197. package/src/components/Pagination/Pagination.tsx +25 -35
  198. package/src/components/Pagination/index.ts +1 -1
  199. package/src/components/Pagination/scripts/index.ts +42 -37
  200. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +48 -48
  201. package/src/components/PhotoViewer/PhotoViewer.tsx +29 -46
  202. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +20 -26
  203. package/src/components/PhotoViewer/PhotoViewerImage.tsx +19 -17
  204. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +13 -5
  205. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +5 -5
  206. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +31 -30
  207. package/src/components/PhotoViewer/examples/ImageGallery.tsx +27 -37
  208. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +19 -13
  209. package/src/components/PhotoViewer/examples/index.ts +1 -1
  210. package/src/components/PhotoViewer/index.ts +1 -1
  211. package/src/components/PhotoViewer/scripts/PhotoViewerInteractions.ts +43 -33
  212. package/src/components/PhotoViewer/scripts/bundle.ts +14 -14
  213. package/src/components/PhotoViewer/scripts/index.ts +173 -129
  214. package/src/components/Popover/Popover.stories.tsx +11 -12
  215. package/src/components/Popover/Popover.tsx +36 -36
  216. package/src/components/Popover/index.ts +1 -1
  217. package/src/components/Popover/scripts/bundle.ts +1 -1
  218. package/src/components/Popover/scripts/componentInteractions.ts +34 -46
  219. package/src/components/Popover/scripts/index.ts +64 -53
  220. package/src/components/ProductReview/ProductReview.stories.tsx +10 -8
  221. package/src/components/ProductReview/ProductReview.tsx +28 -32
  222. package/src/components/ProductReview/scripts/componentInteractions.ts +20 -20
  223. package/src/components/Progress/Progress.tsx +36 -34
  224. package/src/components/Progress/scripts/bundle.ts +7 -2
  225. package/src/components/Progress/scripts/componentInteractions.ts +29 -23
  226. package/src/components/Progress/scripts/index.ts +45 -39
  227. package/src/components/Rating/Rating.stories.tsx +3 -16
  228. package/src/components/Rating/Rating.tsx +250 -231
  229. package/src/components/Rating/scripts/bundle.ts +11 -6
  230. package/src/components/Rating/scripts/index.ts +85 -80
  231. package/src/components/Rating/scripts/ratingInteractions.ts +27 -24
  232. package/src/components/River/River.stories.tsx +70 -24
  233. package/src/components/River/River.tsx +28 -38
  234. package/src/components/River/index.ts +1 -1
  235. package/src/components/River/scripts/index.ts +11 -12
  236. package/src/components/SectionIntro/SectionIntro.stories.tsx +12 -9
  237. package/src/components/SectionIntro/SectionIntro.tsx +25 -31
  238. package/src/components/SectionIntro/scripts/componentInteractions.ts +1 -1
  239. package/src/components/SectionIntro/scripts/index.ts +30 -16
  240. package/src/components/Spinner/Spinner.stories.tsx +5 -7
  241. package/src/components/Spinner/Spinner.tsx +11 -6
  242. package/src/components/Spinner/index.ts +2 -2
  243. package/src/components/Steps/Steps.stories.tsx +44 -48
  244. package/src/components/Steps/Steps.tsx +20 -20
  245. package/src/components/Steps/index.ts +1 -1
  246. package/src/components/Steps/scripts/index.ts +9 -9
  247. package/src/components/Tab/Tab.stories.tsx +14 -6
  248. package/src/components/Tab/Tab.tsx +16 -18
  249. package/src/components/Tab/index.ts +2 -2
  250. package/src/components/Tab/scripts/index.ts +13 -13
  251. package/src/components/Testimonial/Testimonial.stories.tsx +54 -51
  252. package/src/components/Testimonial/Testimonial.tsx +18 -19
  253. package/src/components/Testimonial/index.ts +1 -1
  254. package/src/components/Testimonial/scripts/index.ts +19 -8
  255. package/src/components/Todo/Todo.stories.tsx +7 -24
  256. package/src/components/Todo/Todo.tsx +35 -46
  257. package/src/components/Todo/index.ts +1 -1
  258. package/src/components/Todo/scripts/bundle.ts +1 -1
  259. package/src/components/Todo/scripts/index.ts +99 -81
  260. package/src/components/Todo/scripts/todoInteractions.ts +12 -12
  261. package/src/components/Todo/scripts/types.ts +3 -3
  262. package/src/components/Toggle/Toggle.stories.tsx +2 -2
  263. package/src/components/Toggle/Toggle.tsx +18 -18
  264. package/src/components/Toggle/index.ts +2 -2
  265. package/src/components/Toggle/scripts/bundle.ts +7 -2
  266. package/src/components/Toggle/scripts/index.ts +14 -10
  267. package/src/components/Toggle/scripts/toggleInteractions.ts +11 -14
  268. package/src/components/Tooltip/Tooltip.stories.tsx +13 -6
  269. package/src/components/Tooltip/Tooltip.tsx +25 -15
  270. package/src/components/Tooltip/index.ts +3 -3
  271. package/src/components/Tooltip/scripts/bundle.ts +0 -1
  272. package/src/components/Tooltip/scripts/index.ts +44 -41
  273. package/src/components/Tooltip/scripts/tooltipInteractions.ts +22 -22
  274. package/src/components/Upload/Upload.stories.tsx +28 -34
  275. package/src/components/Upload/Upload.tsx +86 -71
  276. package/src/components/Upload/index.ts +1 -1
  277. package/src/components/Upload/scripts/index.ts +58 -43
  278. package/src/components/index.ts +5 -6
  279. package/src/design-tokens/BoxShadow/BoxShadow.stories.tsx +13 -10
  280. package/src/design-tokens/Colors/colors.scss +10 -7
  281. package/src/design-tokens/Colors/colors.stories.tsx +46 -59
  282. package/src/design-tokens/Spacing/Spacing.scss +7 -5
  283. package/src/design-tokens/Spacing/Spacing.stories.tsx +19 -18
  284. package/src/design-tokens/Typography/Typography.scss +88 -25
  285. package/src/design-tokens/Typography/Typography.stories.tsx +22 -25
  286. package/src/docs/implementation-guide.mdx +2 -2
  287. package/src/htmlComponentsEntry.ts +23 -23
  288. package/src/index.ts +1 -1
  289. package/src/layouts/Grid/Container.tsx +6 -10
  290. package/src/layouts/Grid/Grid.stories.tsx +72 -34
  291. package/src/layouts/Grid/Grid.tsx +6 -13
  292. package/src/layouts/Grid/GridCol.tsx +29 -26
  293. package/src/layouts/Grid/Row.tsx +6 -13
  294. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +79 -72
  295. package/src/layouts/MasonryGrid/MasonryGrid.tsx +23 -25
  296. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +4 -12
  297. package/src/layouts/index.ts +3 -4
  298. package/src/lib/composables/index.ts +3 -3
  299. package/src/lib/composables/useAccordion.ts +15 -6
  300. package/src/lib/composables/useBadge.ts +3 -3
  301. package/src/lib/composables/useBreadcrumb.ts +6 -12
  302. package/src/lib/composables/useButton.ts +3 -3
  303. package/src/lib/composables/useCallout.ts +3 -3
  304. package/src/lib/composables/useCard.ts +50 -28
  305. package/src/lib/composables/useCheckbox.ts +7 -7
  306. package/src/lib/composables/useDataTable.ts +61 -57
  307. package/src/lib/composables/useDatePicker.ts +255 -231
  308. package/src/lib/composables/useDropdown.ts +90 -75
  309. package/src/lib/composables/useEdgePanel.ts +50 -47
  310. package/src/lib/composables/useForm.ts +4 -7
  311. package/src/lib/composables/useFormGroup.ts +11 -12
  312. package/src/lib/composables/useHero.ts +36 -38
  313. package/src/lib/composables/useInput.ts +9 -10
  314. package/src/lib/composables/useMessages.ts +12 -14
  315. package/src/lib/composables/useModal.ts +37 -34
  316. package/src/lib/composables/useNavbar.ts +33 -22
  317. package/src/lib/composables/usePagination.ts +3 -10
  318. package/src/lib/composables/usePhotoViewer.ts +625 -578
  319. package/src/lib/composables/usePopover.ts +68 -62
  320. package/src/lib/composables/useProgress.ts +9 -12
  321. package/src/lib/composables/useRadio.ts +4 -4
  322. package/src/lib/composables/useRating.ts +82 -70
  323. package/src/lib/composables/useRiver.ts +28 -31
  324. package/src/lib/composables/useSelect.ts +7 -8
  325. package/src/lib/composables/useSideMenu.ts +197 -0
  326. package/src/lib/composables/useSpinner.ts +3 -3
  327. package/src/lib/composables/useTextarea.ts +8 -9
  328. package/src/lib/composables/useTodo.ts +14 -18
  329. package/src/lib/constants/components.ts +191 -118
  330. package/src/lib/constants/index.ts +1 -1
  331. package/src/lib/types/components.ts +454 -324
  332. package/src/lib/utils/dom.ts +2 -6
  333. package/src/lib/utils/icons.ts +20 -12
  334. package/src/lib/utils/index.ts +2 -2
  335. package/src/lib/utils/useForkRef.ts +1 -2
  336. package/src/styles/01-settings/_index.scss +59 -59
  337. package/src/styles/01-settings/_settings.accordion.scss +21 -21
  338. package/src/styles/01-settings/_settings.animations.scss +2 -2
  339. package/src/styles/01-settings/_settings.avatar-group.scss +14 -14
  340. package/src/styles/01-settings/_settings.avatar.scss +31 -31
  341. package/src/styles/01-settings/_settings.badge.scss +11 -11
  342. package/src/styles/01-settings/_settings.border-radius.scss +10 -9
  343. package/src/styles/01-settings/_settings.border.scss +7 -7
  344. package/src/styles/01-settings/_settings.box-shadow.scss +24 -12
  345. package/src/styles/01-settings/_settings.breadcrumb.scss +18 -18
  346. package/src/styles/01-settings/_settings.btn-group.scss +1 -1
  347. package/src/styles/01-settings/_settings.button.scss +63 -49
  348. package/src/styles/01-settings/_settings.callout.scss +27 -7
  349. package/src/styles/01-settings/_settings.card.scss +27 -30
  350. package/src/styles/01-settings/_settings.checkbox-group.scss +2 -3
  351. package/src/styles/01-settings/_settings.checkbox.scss +17 -18
  352. package/src/styles/01-settings/_settings.color-mode.scss +1 -1
  353. package/src/styles/01-settings/_settings.colors.scss +197 -214
  354. package/src/styles/01-settings/_settings.config.scss +1 -3
  355. package/src/styles/01-settings/_settings.countdown.scss +14 -14
  356. package/src/styles/01-settings/_settings.data-table.scss +6 -6
  357. package/src/styles/01-settings/_settings.datepicker.scss +40 -42
  358. package/src/styles/01-settings/_settings.dropdown.scss +30 -30
  359. package/src/styles/01-settings/_settings.edge-panel.scss +16 -16
  360. package/src/styles/01-settings/_settings.fonts.scss +14 -12
  361. package/src/styles/01-settings/_settings.form-group.scss +10 -10
  362. package/src/styles/01-settings/_settings.form.scss +3 -3
  363. package/src/styles/01-settings/_settings.grid.scss +1 -1
  364. package/src/styles/01-settings/_settings.hero.scss +23 -23
  365. package/src/styles/01-settings/_settings.input.scss +32 -32
  366. package/src/styles/01-settings/_settings.link.scss +6 -6
  367. package/src/styles/01-settings/_settings.list-group.scss +12 -12
  368. package/src/styles/01-settings/_settings.list.scss +2 -2
  369. package/src/styles/01-settings/_settings.maps.scss +183 -188
  370. package/src/styles/01-settings/_settings.masonry-grid.scss +2 -2
  371. package/src/styles/01-settings/_settings.menu.scss +35 -38
  372. package/src/styles/01-settings/_settings.messages.scss +71 -77
  373. package/src/styles/01-settings/_settings.modal.scss +24 -24
  374. package/src/styles/01-settings/_settings.nav.scss +15 -15
  375. package/src/styles/01-settings/_settings.navbar.scss +39 -12
  376. package/src/styles/01-settings/_settings.pagination.scss +21 -21
  377. package/src/styles/01-settings/_settings.photoviewer.scss +1 -1
  378. package/src/styles/01-settings/_settings.popover.scss +3 -3
  379. package/src/styles/01-settings/_settings.position.scss +2 -2
  380. package/src/styles/01-settings/_settings.progress.scss +15 -18
  381. package/src/styles/01-settings/_settings.rating.scss +7 -7
  382. package/src/styles/01-settings/_settings.river.scss +25 -25
  383. package/src/styles/01-settings/_settings.sectionintro.scss +15 -16
  384. package/src/styles/01-settings/_settings.select.scss +31 -31
  385. package/src/styles/01-settings/_settings.side-menu.scss +64 -16
  386. package/src/styles/01-settings/_settings.skeleton.scss +12 -12
  387. package/src/styles/01-settings/_settings.spacing.scss +62 -33
  388. package/src/styles/01-settings/_settings.spinner.scss +10 -10
  389. package/src/styles/01-settings/_settings.steps.scss +22 -22
  390. package/src/styles/01-settings/_settings.tabs.scss +25 -25
  391. package/src/styles/01-settings/_settings.testimonials.scss +17 -19
  392. package/src/styles/01-settings/_settings.todo.scss +1 -1
  393. package/src/styles/01-settings/_settings.toggle.scss +26 -26
  394. package/src/styles/01-settings/_settings.tooltip.scss +15 -15
  395. package/src/styles/01-settings/_settings.typography.scss +65 -48
  396. package/src/styles/01-settings/_settings.upload.scss +70 -77
  397. package/src/styles/01-settings/_settings.z-layers.scss +1 -1
  398. package/src/styles/02-tools/_index.scss +19 -19
  399. package/src/styles/02-tools/_tools.animations.scss +4 -4
  400. package/src/styles/02-tools/_tools.border-radius.scss +4 -5
  401. package/src/styles/02-tools/_tools.breakpoints.scss +33 -34
  402. package/src/styles/02-tools/_tools.button.scss +49 -25
  403. package/src/styles/02-tools/_tools.color-mode.scss +11 -11
  404. package/src/styles/02-tools/_tools.event.scss +1 -1
  405. package/src/styles/02-tools/_tools.hidden-visually.scss +1 -1
  406. package/src/styles/02-tools/_tools.hidden.scss +1 -1
  407. package/src/styles/02-tools/_tools.map-loop.scss +9 -9
  408. package/src/styles/02-tools/_tools.media-queries.scss +5 -3
  409. package/src/styles/02-tools/_tools.object-fit.scss +3 -3
  410. package/src/styles/02-tools/_tools.placeholder.scss +0 -1
  411. package/src/styles/02-tools/_tools.rem.scss +1 -1
  412. package/src/styles/02-tools/_tools.spacing.scss +8 -34
  413. package/src/styles/02-tools/_tools.to-rgb.scss +3 -3
  414. package/src/styles/02-tools/_tools.transition.scss +1 -1
  415. package/src/styles/02-tools/_tools.utility-api.scss +29 -14
  416. package/src/styles/03-generic/_generic.fonts.scss +0 -1
  417. package/src/styles/03-generic/_generic.reset.scss +13 -8
  418. package/src/styles/03-generic/_generic.root.scss +5 -5
  419. package/src/styles/03-generic/_index.scss +4 -4
  420. package/src/styles/04-elements/_elements.all.scss +2 -2
  421. package/src/styles/04-elements/_elements.body.scss +1 -2
  422. package/src/styles/04-elements/_elements.heading.scss +37 -21
  423. package/src/styles/04-elements/_elements.links.scss +0 -1
  424. package/src/styles/04-elements/_index.scss +5 -5
  425. package/src/styles/05-objects/_index.scss +3 -3
  426. package/src/styles/05-objects/_objects.container.scss +5 -4
  427. package/src/styles/05-objects/_objects.grid.scss +12 -12
  428. package/src/styles/05-objects/_objects.masonry-grid.scss +80 -74
  429. package/src/styles/06-components/_components.accordion.scss +12 -6
  430. package/src/styles/06-components/_components.avatar-group.scss +9 -8
  431. package/src/styles/06-components/_components.avatar.scss +78 -77
  432. package/src/styles/06-components/_components.badge.scss +48 -48
  433. package/src/styles/06-components/_components.breadcrumb.scss +57 -58
  434. package/src/styles/06-components/_components.btn-group.scss +22 -22
  435. package/src/styles/06-components/_components.button.scss +118 -110
  436. package/src/styles/06-components/_components.callout.scss +21 -15
  437. package/src/styles/06-components/_components.card.scss +6 -10
  438. package/src/styles/06-components/_components.checkbox-group.scss +9 -10
  439. package/src/styles/06-components/_components.checkbox.scss +10 -17
  440. package/src/styles/06-components/_components.color-mode-toggle.scss +6 -6
  441. package/src/styles/06-components/_components.countdown.scss +53 -54
  442. package/src/styles/06-components/_components.data-table.scss +40 -36
  443. package/src/styles/06-components/_components.datepicker.scss +95 -73
  444. package/src/styles/06-components/_components.dropdown.scss +15 -9
  445. package/src/styles/06-components/_components.edge-panel.scss +87 -46
  446. package/src/styles/06-components/_components.form-group.scss +5 -4
  447. package/src/styles/06-components/_components.hero.scss +128 -132
  448. package/src/styles/06-components/_components.icon.scss +16 -16
  449. package/src/styles/06-components/_components.image-gallery.scss +9 -7
  450. package/src/styles/06-components/_components.input.scss +18 -16
  451. package/src/styles/06-components/_components.list-group.scss +52 -51
  452. package/src/styles/06-components/_components.list.scss +15 -15
  453. package/src/styles/06-components/_components.menu.scss +225 -220
  454. package/src/styles/06-components/_components.messages.scss +45 -32
  455. package/src/styles/06-components/_components.modal.scss +0 -1
  456. package/src/styles/06-components/_components.nav.scss +56 -11
  457. package/src/styles/06-components/_components.navbar.scss +278 -202
  458. package/src/styles/06-components/_components.pagination.scss +7 -6
  459. package/src/styles/06-components/_components.photoviewer.scss +121 -116
  460. package/src/styles/06-components/_components.popover.scss +10 -10
  461. package/src/styles/06-components/_components.product-review.scss +3 -3
  462. package/src/styles/06-components/_components.progress.scss +32 -35
  463. package/src/styles/06-components/_components.rating.scss +9 -8
  464. package/src/styles/06-components/_components.river.scss +4 -2
  465. package/src/styles/06-components/_components.sectionintro.scss +19 -26
  466. package/src/styles/06-components/_components.select.scss +7 -8
  467. package/src/styles/06-components/_components.side-menu.scss +154 -28
  468. package/src/styles/06-components/_components.skeleton.scss +0 -1
  469. package/src/styles/06-components/_components.spinner.scss +2 -4
  470. package/src/styles/06-components/_components.steps.scss +76 -77
  471. package/src/styles/06-components/_components.tabs.scss +17 -12
  472. package/src/styles/06-components/_components.testimonials.scss +49 -52
  473. package/src/styles/06-components/_components.todo.scss +26 -26
  474. package/src/styles/06-components/_components.tooltip.scss +114 -115
  475. package/src/styles/06-components/_components.upload.scss +8 -18
  476. package/src/styles/06-components/_index.scss +48 -48
  477. package/src/styles/99-utilities/_index.scss +18 -18
  478. package/src/styles/99-utilities/_utilities.background.scss +13 -13
  479. package/src/styles/99-utilities/_utilities.border.scss +30 -30
  480. package/src/styles/99-utilities/_utilities.clearfix.scss +1 -1
  481. package/src/styles/99-utilities/_utilities.display.scss +5 -4
  482. package/src/styles/99-utilities/_utilities.flex.scss +19 -19
  483. package/src/styles/99-utilities/_utilities.link.scss +52 -35
  484. package/src/styles/99-utilities/_utilities.object-fit.scss +3 -3
  485. package/src/styles/99-utilities/_utilities.opacity.scss +6 -6
  486. package/src/styles/99-utilities/_utilities.overflow.scss +4 -4
  487. package/src/styles/99-utilities/_utilities.position.scss +8 -8
  488. package/src/styles/99-utilities/_utilities.shadow.scss +13 -13
  489. package/src/styles/99-utilities/_utilities.sizes.scss +17 -17
  490. package/src/styles/99-utilities/_utilities.spacing.scss +72 -37
  491. package/src/styles/99-utilities/_utilities.text.scss +15 -15
  492. package/src/styles/99-utilities/_utilities.visibility.scss +8 -8
  493. package/src/styles/99-utilities/_utilities.visually-hidden.scss +1 -1
  494. package/src/styles/99-utilities/_utilities.z-index.scss +2 -2
  495. package/tsconfig.json +74 -0
  496. package/webpack.config.js +463 -0
  497. package/NPM_PUBLISHING.md +0 -221
  498. package/dist/css/atomix.css.map +0 -1
  499. package/dist/js/194.js.map +0 -1
  500. package/dist/js/atomix.react.esm.js.map +0 -1
  501. package/dist/js/atomix.react.umd.js.map +0 -1
  502. package/dist/js/chunks/esm/202.ff48d27672233280e021.js.map +0 -1
  503. package/dist/js/chunks/esm/308.f873332126eba90e5c62.js.map +0 -1
  504. package/dist/js/chunks/esm/54.4db919e5e4e5cc6d7c72.js.map +0 -1
  505. package/dist/js/chunks/esm/619.afc5a718eff77fa423b5.js.map +0 -1
  506. package/dist/js/chunks/esm/690.a9e968c7497d61e56cdc.js.map +0 -1
  507. package/dist/js/chunks/esm/894.f1091a4a8758c26d29e4.js.map +0 -1
  508. package/dist/js/chunks/esm/897.561a50f7d043d42169da.js.map +0 -1
  509. package/dist/js/chunks/umd/202.dac7605cc555b6bda542.js.map +0 -1
  510. package/dist/js/chunks/umd/308.6709979849dcbdb90c9b.js.map +0 -1
  511. package/dist/js/chunks/umd/54.403470e1f7d0ef4424a7.js.map +0 -1
  512. package/dist/js/chunks/umd/619.fa05ea98c10270eb64c5.js.map +0 -1
  513. package/dist/js/chunks/umd/690.aa7054d1c53e5402c2d6.js.map +0 -1
  514. package/dist/js/chunks/umd/894.3e1eaf0a2aadf4434390.js.map +0 -1
  515. package/dist/js/chunks/umd/897.554ea37be4453698c167.js.map +0 -1
  516. package/dist/types/components/Navbar/Nav.d.ts +0 -5
  517. package/dist/types/components/Navbar/NavItem.d.ts +0 -5
  518. package/dist/types/components/Navbar/Navbar.d.ts +0 -5
  519. package/dist/types/components/Navbar/index.d.ts +0 -6
  520. package/src/components/Navbar/Menu.tsx +0 -122
  521. package/src/components/Navbar/Nav.tsx +0 -35
  522. package/src/components/Navbar/NavDropdown.tsx +0 -108
  523. package/src/components/Navbar/NavItem.tsx +0 -128
  524. package/src/components/Navbar/Navbar.tsx +0 -124
  525. package/src/components/Navbar/index.ts +0 -6
@@ -9,7 +9,7 @@ export interface RiverContentColumn {
9
9
  * Column type (title or text)
10
10
  */
11
11
  type: 'title' | 'text';
12
-
12
+
13
13
  /**
14
14
  * Content for the column
15
15
  */
@@ -24,62 +24,62 @@ export interface RiverProps {
24
24
  * Title of the river section
25
25
  */
26
26
  title?: ReactNode;
27
-
27
+
28
28
  /**
29
29
  * Text content (can be a string or array of paragraphs)
30
30
  */
31
31
  text?: string | string[];
32
-
32
+
33
33
  /**
34
34
  * Action buttons/links
35
35
  */
36
36
  actions?: ReactNode;
37
-
37
+
38
38
  /**
39
39
  * Image source URL
40
40
  */
41
41
  imageSrc?: string;
42
-
42
+
43
43
  /**
44
44
  * Image alt text
45
45
  */
46
46
  imageAlt?: string;
47
-
47
+
48
48
  /**
49
49
  * Whether to use the center layout
50
50
  */
51
51
  center?: boolean;
52
-
52
+
53
53
  /**
54
54
  * Whether to use the breakout layout
55
55
  */
56
56
  breakout?: boolean;
57
-
57
+
58
58
  /**
59
59
  * Whether to use the reverse layout (image on right)
60
60
  */
61
61
  reverse?: boolean;
62
-
62
+
63
63
  /**
64
64
  * Use content columns instead of simple title/text structure
65
65
  */
66
66
  contentColumns?: RiverContentColumn[];
67
-
67
+
68
68
  /**
69
69
  * Additional CSS class
70
70
  */
71
71
  className?: string;
72
-
72
+
73
73
  /**
74
74
  * Background image source
75
75
  */
76
76
  backgroundImageSrc?: string;
77
-
77
+
78
78
  /**
79
79
  * Whether to show the background overlay
80
80
  */
81
81
  showOverlay?: boolean;
82
-
82
+
83
83
  /**
84
84
  * Custom width for the river content
85
85
  */
@@ -94,27 +94,27 @@ interface UseRiverResult {
94
94
  * Generate river class names based on props
95
95
  */
96
96
  generateRiverClassNames: (baseClassName?: string) => string;
97
-
97
+
98
98
  /**
99
99
  * Generate content class names
100
100
  */
101
101
  generateContentClass: () => string;
102
-
102
+
103
103
  /**
104
104
  * Generate visual/image class names
105
105
  */
106
106
  generateVisualClass: () => string;
107
-
107
+
108
108
  /**
109
109
  * Determine if the river has a background image
110
110
  */
111
111
  hasBackgroundImage: boolean;
112
-
112
+
113
113
  /**
114
114
  * Determine if the river has a foreground image
115
115
  */
116
116
  hasForegroundImage: boolean;
117
-
117
+
118
118
  /**
119
119
  * Convert text to array if it's a string
120
120
  */
@@ -133,25 +133,24 @@ export function useRiver(initialProps?: Partial<RiverProps>): UseRiverResult {
133
133
  reverse: false,
134
134
  imageAlt: 'Image',
135
135
  showOverlay: true,
136
- ...initialProps
136
+ ...initialProps,
137
137
  };
138
138
 
139
139
  /**
140
140
  * Check if the river has a background image
141
141
  */
142
142
  const hasBackgroundImage = !!defaultProps.backgroundImageSrc;
143
-
143
+
144
144
  /**
145
145
  * Check if the river has a foreground image
146
146
  */
147
147
  const hasForegroundImage = !!defaultProps.imageSrc;
148
-
148
+
149
149
  /**
150
150
  * Convert text to array if it's a string
151
151
  */
152
- const textContent = typeof defaultProps.text === 'string'
153
- ? [defaultProps.text]
154
- : defaultProps.text || [];
152
+ const textContent =
153
+ typeof defaultProps.text === 'string' ? [defaultProps.text] : defaultProps.text || [];
155
154
 
156
155
  /**
157
156
  * Generate river class names based on props
@@ -159,19 +158,17 @@ export function useRiver(initialProps?: Partial<RiverProps>): UseRiverResult {
159
158
  * @returns Combined class names string
160
159
  */
161
160
  const generateRiverClassNames = (baseClassName: string = ''): string => {
162
- const classes = [
163
- RIVER.SELECTORS.RIVER.replace('.', '')
164
- ];
161
+ const classes = [RIVER.SELECTORS.RIVER.replace('.', '')];
165
162
 
166
163
  // Add layout classes
167
164
  if (defaultProps.center) {
168
165
  classes.push(RIVER.CLASSES.CENTER);
169
166
  }
170
-
167
+
171
168
  if (defaultProps.breakout) {
172
169
  classes.push(RIVER.CLASSES.BREAKOUT);
173
170
  }
174
-
171
+
175
172
  if (defaultProps.reverse) {
176
173
  classes.push(RIVER.CLASSES.REVERSE);
177
174
  }
@@ -203,6 +200,6 @@ export function useRiver(initialProps?: Partial<RiverProps>): UseRiverResult {
203
200
  generateVisualClass,
204
201
  hasBackgroundImage,
205
202
  hasForegroundImage,
206
- textContent
203
+ textContent,
207
204
  };
208
- }
205
+ }
@@ -13,7 +13,7 @@ export function useSelect(initialProps?: Partial<SelectProps>) {
13
13
  disabled: false,
14
14
  invalid: false,
15
15
  valid: false,
16
- ...initialProps
16
+ ...initialProps,
17
17
  };
18
18
 
19
19
  /**
@@ -30,19 +30,18 @@ export function useSelect(initialProps?: Partial<SelectProps>) {
30
30
  className = '',
31
31
  } = props;
32
32
 
33
- const sizeClass = size === 'md' ? '' : (
34
- size === 'sm' ? SELECT.CLASSES.SMALL : SELECT.CLASSES.LARGE
35
- );
36
-
33
+ const sizeClass =
34
+ size === 'md' ? '' : size === 'sm' ? SELECT.CLASSES.SMALL : SELECT.CLASSES.LARGE;
35
+
37
36
  let validationClass = '';
38
37
  if (invalid) {
39
38
  validationClass = SELECT.CLASSES.INVALID;
40
39
  } else if (valid) {
41
40
  validationClass = SELECT.CLASSES.VALID;
42
41
  }
43
-
42
+
44
43
  const disabledClass = disabled ? SELECT.CLASSES.DISABLED : '';
45
-
44
+
46
45
  return `${SELECT.CLASSES.BASE} ${sizeClass} ${validationClass} ${disabledClass} ${className}`.trim();
47
46
  };
48
47
 
@@ -50,4 +49,4 @@ export function useSelect(initialProps?: Partial<SelectProps>) {
50
49
  defaultProps,
51
50
  generateSelectClass,
52
51
  };
53
- }
52
+ }
@@ -0,0 +1,197 @@
1
+ import { useState, useEffect, useRef } from 'react';
2
+ import { SideMenuProps, SideMenuItemProps } from '../types/components';
3
+ import { SIDE_MENU } from '../constants/components';
4
+
5
+ /**
6
+ * SideMenu state and functionality
7
+ * @param initialProps - Initial side menu properties
8
+ * @returns SideMenu state and methods
9
+ */
10
+ export function useSideMenu(initialProps?: Partial<SideMenuProps>) {
11
+ // Default side menu properties
12
+ const defaultProps: Partial<SideMenuProps> = {
13
+ collapsible: true,
14
+ isOpen: false,
15
+ ...initialProps,
16
+ };
17
+
18
+ // Local open state for when not controlled externally
19
+ const [isOpenState, setIsOpenState] = useState(defaultProps.isOpen || false);
20
+
21
+ // Refs for managing responsive behavior
22
+ const wrapperRef = useRef<HTMLDivElement>(null);
23
+ const innerRef = useRef<HTMLDivElement>(null);
24
+
25
+ // Update local state when external state changes
26
+ useEffect(() => {
27
+ if (typeof defaultProps.isOpen !== 'undefined') {
28
+ setIsOpenState(defaultProps.isOpen);
29
+ }
30
+ }, [defaultProps.isOpen]);
31
+
32
+ // Handle responsive behavior - auto-open on desktop, controlled on mobile
33
+ useEffect(() => {
34
+ const handleResize = () => {
35
+ const isMobile = window.innerWidth < 768; // MD breakpoint
36
+
37
+ if (!isMobile && defaultProps.collapsible) {
38
+ // Auto-open on desktop
39
+ if (typeof defaultProps.onToggle === 'function') {
40
+ defaultProps.onToggle(true);
41
+ } else {
42
+ setIsOpenState(true);
43
+ }
44
+
45
+ // Reset wrapper height on desktop
46
+ if (wrapperRef.current) {
47
+ wrapperRef.current.style.height = 'auto';
48
+ }
49
+ } else if (isMobile && wrapperRef.current && innerRef.current) {
50
+ // Set proper height for mobile animation
51
+ const currentOpen =
52
+ typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
53
+ if (currentOpen) {
54
+ wrapperRef.current.style.height = `${innerRef.current.scrollHeight}px`;
55
+ } else {
56
+ wrapperRef.current.style.height = '0px';
57
+ }
58
+ }
59
+ };
60
+
61
+ handleResize(); // Initial call
62
+ window.addEventListener('resize', handleResize);
63
+
64
+ return () => {
65
+ window.removeEventListener('resize', handleResize);
66
+ };
67
+ }, [defaultProps.collapsible, defaultProps.isOpen, defaultProps.onToggle, isOpenState]);
68
+
69
+ // Update wrapper height when open state changes on mobile
70
+ useEffect(() => {
71
+ const isMobile = window.innerWidth < 768;
72
+
73
+ if (isMobile && wrapperRef.current && innerRef.current && defaultProps.collapsible) {
74
+ const currentOpen =
75
+ typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
76
+
77
+ if (currentOpen) {
78
+ wrapperRef.current.style.height = `${innerRef.current.scrollHeight}px`;
79
+ } else {
80
+ wrapperRef.current.style.height = '0px';
81
+ }
82
+ }
83
+ }, [defaultProps.isOpen, isOpenState, defaultProps.collapsible]);
84
+
85
+ /**
86
+ * Generate side menu class based on properties
87
+ * @param props - Side menu properties
88
+ * @returns Class string
89
+ */
90
+ const generateSideMenuClass = (props: Partial<SideMenuProps & { isOpen?: boolean }>): string => {
91
+ const { className = '', isOpen = false } = props;
92
+
93
+ const openClass = isOpen ? SIDE_MENU.CLASSES.IS_OPEN : '';
94
+
95
+ return `${SIDE_MENU.CLASSES.BASE} ${openClass} ${className}`.trim();
96
+ };
97
+
98
+ /**
99
+ * Generate wrapper class
100
+ * @returns Class string
101
+ */
102
+ const generateWrapperClass = (): string => {
103
+ return SIDE_MENU.CLASSES.WRAPPER;
104
+ };
105
+
106
+ /**
107
+ * Handle toggle click
108
+ */
109
+ const handleToggle = () => {
110
+ if (defaultProps.disabled) return;
111
+
112
+ const newState =
113
+ typeof defaultProps.isOpen !== 'undefined' ? !defaultProps.isOpen : !isOpenState;
114
+
115
+ if (typeof defaultProps.onToggle === 'function') {
116
+ // Controlled component
117
+ defaultProps.onToggle(newState);
118
+ } else {
119
+ // Uncontrolled component
120
+ setIsOpenState(newState);
121
+ }
122
+ };
123
+
124
+ /**
125
+ * Get current open state
126
+ * @returns Current open state
127
+ */
128
+ const getCurrentOpenState = (): boolean => {
129
+ return typeof defaultProps.isOpen !== 'undefined' ? defaultProps.isOpen : isOpenState;
130
+ };
131
+
132
+ return {
133
+ defaultProps,
134
+ isOpenState: getCurrentOpenState(),
135
+ wrapperRef,
136
+ innerRef,
137
+ generateSideMenuClass,
138
+ generateWrapperClass,
139
+ handleToggle,
140
+ getCurrentOpenState,
141
+ };
142
+ }
143
+
144
+ /**
145
+ * SideMenuItem state and functionality
146
+ * @param initialProps - Initial side menu item properties
147
+ * @returns SideMenuItem state and methods
148
+ */
149
+ export function useSideMenuItem(initialProps?: Partial<SideMenuItemProps>) {
150
+ // Default side menu item properties
151
+ const defaultProps: Partial<SideMenuItemProps> = {
152
+ active: false,
153
+ disabled: false,
154
+ ...initialProps,
155
+ };
156
+
157
+ /**
158
+ * Generate side menu item class based on properties
159
+ * @returns Class string
160
+ */
161
+ const generateSideMenuItemClass = (): string => {
162
+ const {
163
+ active = defaultProps.active,
164
+ disabled = defaultProps.disabled,
165
+ className = '',
166
+ } = defaultProps;
167
+
168
+ const activeClass = active ? SIDE_MENU.CLASSES.ACTIVE : '';
169
+ const disabledClass = disabled ? SIDE_MENU.CLASSES.DISABLED : '';
170
+
171
+ return `${SIDE_MENU.CLASSES.LINK} ${activeClass} ${disabledClass} ${className}`.trim();
172
+ };
173
+
174
+ /**
175
+ * Handle side menu item click with disabled check
176
+ * @param handler - Click handler function
177
+ * @returns Function that respects disabled state
178
+ */
179
+ const handleClick = (handler?: (event: React.MouseEvent) => void) => {
180
+ return (e: React.MouseEvent) => {
181
+ if (defaultProps.disabled) {
182
+ e.preventDefault();
183
+ return;
184
+ }
185
+
186
+ if (handler) {
187
+ handler(e);
188
+ }
189
+ };
190
+ };
191
+
192
+ return {
193
+ defaultProps,
194
+ generateSideMenuItemClass,
195
+ handleClick,
196
+ };
197
+ }
@@ -11,7 +11,7 @@ export function useSpinner(initialProps?: Partial<SpinnerProps>) {
11
11
  variant: 'primary',
12
12
  size: 'md',
13
13
  fullscreen: false,
14
- ...initialProps
14
+ ...initialProps,
15
15
  };
16
16
 
17
17
  /**
@@ -31,7 +31,7 @@ export function useSpinner(initialProps?: Partial<SpinnerProps>) {
31
31
  const variantClass = variant ? `${baseClass}--${variant}` : '';
32
32
  const sizeClass = size !== 'md' ? `${baseClass}--${size}` : '';
33
33
  const fullscreenClass = fullscreen ? `${baseClass}--fullscreen` : '';
34
-
34
+
35
35
  return `${baseClass} ${variantClass} ${sizeClass} ${fullscreenClass} ${className}`.trim();
36
36
  };
37
37
 
@@ -39,4 +39,4 @@ export function useSpinner(initialProps?: Partial<SpinnerProps>) {
39
39
  defaultProps,
40
40
  generateSpinnerClass,
41
41
  };
42
- }
42
+ }
@@ -13,7 +13,7 @@ export function useTextarea(initialProps?: Partial<TextareaProps>) {
13
13
  disabled: false,
14
14
  invalid: false,
15
15
  valid: false,
16
- ...initialProps
16
+ ...initialProps,
17
17
  };
18
18
 
19
19
  /**
@@ -31,21 +31,20 @@ export function useTextarea(initialProps?: Partial<TextareaProps>) {
31
31
  className = '',
32
32
  } = props;
33
33
 
34
- const sizeClass = size === 'md' ? '' : (
35
- size === 'sm' ? TEXTAREA.CLASSES.SMALL : TEXTAREA.CLASSES.LARGE
36
- );
37
-
34
+ const sizeClass =
35
+ size === 'md' ? '' : size === 'sm' ? TEXTAREA.CLASSES.SMALL : TEXTAREA.CLASSES.LARGE;
36
+
38
37
  const variantClass = variant ? `c-input--${variant}` : '';
39
-
38
+
40
39
  let validationClass = '';
41
40
  if (invalid) {
42
41
  validationClass = TEXTAREA.CLASSES.INVALID;
43
42
  } else if (valid) {
44
43
  validationClass = TEXTAREA.CLASSES.VALID;
45
44
  }
46
-
45
+
47
46
  const disabledClass = disabled ? TEXTAREA.CLASSES.DISABLED : '';
48
-
47
+
49
48
  return `${TEXTAREA.CLASSES.BASE} ${sizeClass} ${variantClass} ${validationClass} ${disabledClass} ${className}`.trim();
50
49
  };
51
50
 
@@ -53,4 +52,4 @@ export function useTextarea(initialProps?: Partial<TextareaProps>) {
53
52
  defaultProps,
54
53
  generateTextareaClass,
55
54
  };
56
- }
55
+ }
@@ -17,7 +17,7 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
17
17
  size: 'md',
18
18
  placeholder: 'Add a new todo',
19
19
  showCompleted: true,
20
- ...initialProps
20
+ ...initialProps,
21
21
  };
22
22
 
23
23
  // State
@@ -30,15 +30,11 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
30
30
  * @returns Class string for the todo component
31
31
  */
32
32
  const generateTodoClasses = (props: Partial<TodoProps>): string => {
33
- const {
34
- size = defaultProps.size,
35
- className = '',
36
- disabled = false
37
- } = props;
33
+ const { size = defaultProps.size, className = '', disabled = false } = props;
38
34
 
39
35
  const sizeClass = size === 'md' ? '' : `c-todo--${size}`;
40
36
  const disabledClass = disabled ? 'c-todo--disabled' : '';
41
-
37
+
42
38
  return `${TODO.CLASSES.BASE} ${sizeClass} ${disabledClass} ${className}`.trim();
43
39
  };
44
40
 
@@ -59,13 +55,13 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
59
55
  */
60
56
  const addTodo = (text: string): TodoItem | null => {
61
57
  if (!text.trim()) return null;
62
-
58
+
63
59
  const newItem: TodoItem = {
64
60
  id: uuidv4(),
65
61
  text: text.trim(),
66
- completed: false
62
+ completed: false,
67
63
  };
68
-
64
+
69
65
  setItems(prevItems => [...prevItems, newItem]);
70
66
  setInputText('');
71
67
  return newItem;
@@ -78,7 +74,7 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
78
74
  */
79
75
  const toggleTodo = (id: string): TodoItem | null => {
80
76
  let updatedItem: TodoItem | null = null;
81
-
77
+
82
78
  setItems(prevItems => {
83
79
  return prevItems.map(item => {
84
80
  if (item.id === id) {
@@ -88,7 +84,7 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
88
84
  return item;
89
85
  });
90
86
  });
91
-
87
+
92
88
  return updatedItem;
93
89
  };
94
90
 
@@ -99,9 +95,9 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
99
95
  */
100
96
  const deleteTodo = (id: string): boolean => {
101
97
  const initialLength = items.length;
102
-
98
+
103
99
  setItems(prevItems => prevItems.filter(item => item.id !== id));
104
-
100
+
105
101
  return items.length !== initialLength;
106
102
  };
107
103
 
@@ -113,9 +109,9 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
113
109
  const handleSubmit = (event: React.FormEvent, onAddTodo?: (text: string) => void) => {
114
110
  event.preventDefault();
115
111
  if (!inputText.trim()) return;
116
-
112
+
117
113
  const newItem = addTodo(inputText);
118
-
114
+
119
115
  if (newItem && onAddTodo) {
120
116
  onAddTodo(newItem.text);
121
117
  }
@@ -141,6 +137,6 @@ export function useTodo(initialProps?: Partial<TodoProps>) {
141
137
  handleSubmit,
142
138
  generateTodoClasses,
143
139
  generateItemClasses,
144
- getFilteredItems
140
+ getFilteredItems,
145
141
  };
146
- }
142
+ }