@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
@@ -1,41 +1,147 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { Navbar } from './Navbar';
3
- import { Nav } from './Nav';
4
- import { NavItem } from './NavItem';
5
- import { NavDropdown } from './NavDropdown';
6
- import { Menu, MenuItem, MenuDivider } from './Menu';
7
- import { MegaMenu, MegaMenuColumn, MegaMenuLink } from './MegaMenu';
8
- import { Icon } from '../Icon';
9
- import { AtomixLogo } from '../AtomixLogo';
3
+ import { Nav } from '../Nav/Nav';
4
+ import { NavItem } from '../Nav/NavItem';
5
+ import { NavDropdown } from '../Nav/NavDropdown';
6
+ import { Menu, MenuItem, MenuDivider } from '../Menu/Menu';
7
+ import { MegaMenu, MegaMenuColumn, MegaMenuLink } from '../Menu/MegaMenu';
8
+ import { Icon } from '../../Icon';
9
+ import { AtomixLogo } from '../../AtomixLogo';
10
10
 
11
11
  const meta = {
12
- title: 'Components/Navbar',
12
+ title: 'Components/Navigation/Navbar',
13
13
  component: Navbar,
14
14
  parameters: {
15
15
  layout: 'fullscreen',
16
+ docs: {
17
+ description: {
18
+ component: `
19
+ The Navbar component provides a responsive navigation header with brand, navigation items, and collapsible mobile menu functionality. It follows the Atomix design system guidelines and includes both React and vanilla JavaScript implementations.
20
+
21
+ ## Features
22
+
23
+ - **Responsive Design**: Automatically collapses on mobile devices
24
+ - **Multiple Positions**: Static, fixed top, or fixed bottom positioning
25
+ - **Theme Variants**: Support for all theme colors
26
+ - **Accessibility**: Full keyboard navigation and screen reader support
27
+ - **Dropdown & Mega Menus**: Support for both regular dropdowns and full-width mega menus
28
+ - **Vanilla JS Support**: Complete vanilla JavaScript implementation available
29
+
30
+ ## Usage
31
+
32
+ ### Basic Navbar
33
+ \`\`\`tsx
34
+ <Navbar brand="My App">
35
+ <Nav>
36
+ <NavItem href="/">Home</NavItem>
37
+ <NavItem href="/about">About</NavItem>
38
+ </Nav>
39
+ </Navbar>
40
+ \`\`\`
41
+
42
+ ### With Dropdown
43
+ \`\`\`tsx
44
+ <Navbar brand="My App">
45
+ <Nav>
46
+ <NavDropdown title="Services">
47
+ <Menu>
48
+ <MenuItem href="/web">Web Design</MenuItem>
49
+ <MenuItem href="/mobile">Mobile Apps</MenuItem>
50
+ </Menu>
51
+ </NavDropdown>
52
+ </Nav>
53
+ </Navbar>
54
+ \`\`\`
55
+
56
+ ### Vanilla JavaScript
57
+ \`\`\`html
58
+ <nav class="c-navbar" data-navbar data-collapsible="true">
59
+ <div class="c-navbar__container">
60
+ <a href="/" class="c-navbar__brand">My App</a>
61
+ <button class="c-navbar__toggler" aria-expanded="false">
62
+ <span class="c-navbar__toggler-icon"></span>
63
+ </button>
64
+ <div class="c-navbar__collapse">
65
+ <!-- Navigation content -->
66
+ </div>
67
+ </div>
68
+ </nav>
69
+ \`\`\`
70
+ `,
71
+ },
72
+ },
16
73
  },
17
74
  tags: ['autodocs'],
18
75
  argTypes: {
19
76
  position: {
20
77
  control: { type: 'select' },
21
78
  options: ['static', 'fixed', 'fixed-bottom'],
22
- description: 'Position of the navbar'
79
+ description: 'Position of the navbar',
80
+ table: {
81
+ type: { summary: 'string' },
82
+ defaultValue: { summary: 'static' },
83
+ },
23
84
  },
24
85
  variant: {
25
86
  control: { type: 'select' },
26
87
  options: [
27
- 'primary', 'secondary', 'tertiary', 'invert', 'brand',
28
- 'success', 'error', 'warning', 'info', 'light', 'dark'
88
+ 'primary',
89
+ 'secondary',
90
+ 'tertiary',
91
+ 'invert',
92
+ 'brand',
93
+ 'success',
94
+ 'error',
95
+ 'warning',
96
+ 'info',
97
+ 'light',
98
+ 'dark',
29
99
  ],
30
- description: 'The color variant of the navbar'
100
+ description: 'The color variant of the navbar',
101
+ table: {
102
+ type: { summary: 'ThemeColor' },
103
+ defaultValue: { summary: 'undefined' },
104
+ },
31
105
  },
32
106
  collapsible: {
33
107
  control: 'boolean',
34
- description: 'Whether the navbar should collapse on small screens'
108
+ description: 'Whether the navbar should collapse on small screens',
109
+ table: {
110
+ type: { summary: 'boolean' },
111
+ defaultValue: { summary: 'true' },
112
+ },
35
113
  },
36
114
  containerWidth: {
37
115
  control: 'text',
38
- description: 'Custom width for the navbar container'
116
+ description: 'Custom width for the navbar container',
117
+ table: {
118
+ type: { summary: 'string' },
119
+ defaultValue: { summary: 'undefined' },
120
+ },
121
+ },
122
+ backdrop: {
123
+ control: 'boolean',
124
+ description: 'Whether to show backdrop when expanded on mobile',
125
+ table: {
126
+ type: { summary: 'boolean' },
127
+ defaultValue: { summary: 'false' },
128
+ },
129
+ },
130
+ closeOnOutsideClick: {
131
+ control: 'boolean',
132
+ description: 'Whether to close navbar when clicking outside',
133
+ table: {
134
+ type: { summary: 'boolean' },
135
+ defaultValue: { summary: 'true' },
136
+ },
137
+ },
138
+ closeOnEscape: {
139
+ control: 'boolean',
140
+ description: 'Whether to close navbar on escape key press',
141
+ table: {
142
+ type: { summary: 'boolean' },
143
+ defaultValue: { summary: 'true' },
144
+ },
39
145
  },
40
146
  },
41
147
  } satisfies Meta<typeof Navbar>;
@@ -44,9 +150,7 @@ export default meta;
44
150
  type Story = StoryObj<typeof Navbar>;
45
151
 
46
152
  // Brand logo component
47
- const LogoBrand = () => (
48
- <AtomixLogo height={40} />
49
- );
153
+ const LogoBrand = () => <AtomixLogo height={40} />;
50
154
 
51
155
  // Default Navbar
52
156
  export const Default: Story = {
@@ -60,12 +164,22 @@ export const Default: Story = {
60
164
  <NavItem>Contact</NavItem>
61
165
  <NavDropdown title="Dropdown">
62
166
  <Menu>
63
- <MenuItem href="#" icon="icon-lux-circle">Menu Item 1</MenuItem>
64
- <MenuItem href="#" icon="icon-lux-circle">Menu Item 2</MenuItem>
65
- <MenuItem href="#" icon="icon-lux-circle">Menu Item 3</MenuItem>
167
+ <MenuItem href="#" icon="icon-lux-circle">
168
+ Menu Item 1
169
+ </MenuItem>
170
+ <MenuItem href="#" icon="icon-lux-circle">
171
+ Menu Item 2
172
+ </MenuItem>
173
+ <MenuItem href="#" icon="icon-lux-circle">
174
+ Menu Item 3
175
+ </MenuItem>
66
176
  <MenuDivider />
67
- <MenuItem href="#" icon="icon-lux-circle">Menu Item 4</MenuItem>
68
- <MenuItem href="#" icon="icon-lux-circle">Menu Item 5</MenuItem>
177
+ <MenuItem href="#" icon="icon-lux-circle">
178
+ Menu Item 4
179
+ </MenuItem>
180
+ <MenuItem href="#" icon="icon-lux-circle">
181
+ Menu Item 5
182
+ </MenuItem>
69
183
  </Menu>
70
184
  </NavDropdown>
71
185
  </Nav>
@@ -96,110 +210,77 @@ export const FixedBottom: Story = {
96
210
  export const Variants: Story = {
97
211
  render: () => (
98
212
  <div className="u-d-flex u-flex-column u-gap-3">
99
- <Navbar
100
- brand={<LogoBrand />}
101
- variant="primary"
102
- >
213
+ <Navbar brand={<LogoBrand />} variant="primary">
103
214
  <Nav alignment="end">
104
215
  <NavItem>Link 1</NavItem>
105
216
  <NavItem>Link 2</NavItem>
106
217
  </Nav>
107
218
  </Navbar>
108
-
109
- <Navbar
110
- brand={<LogoBrand />}
111
- variant="secondary"
112
- >
219
+
220
+ <Navbar brand={<LogoBrand />} variant="secondary">
113
221
  <Nav alignment="end">
114
222
  <NavItem>Link 1</NavItem>
115
223
  <NavItem>Link 2</NavItem>
116
224
  </Nav>
117
225
  </Navbar>
118
-
119
- <Navbar
120
- brand={<LogoBrand />}
121
- variant="tertiary"
122
- >
226
+
227
+ <Navbar brand={<LogoBrand />} variant="tertiary">
123
228
  <Nav alignment="end">
124
229
  <NavItem>Link 1</NavItem>
125
230
  <NavItem>Link 2</NavItem>
126
231
  </Nav>
127
232
  </Navbar>
128
-
129
- <Navbar
130
- brand={<LogoBrand />}
131
- variant="invert"
132
- >
233
+
234
+ <Navbar brand={<LogoBrand />} variant="invert">
133
235
  <Nav alignment="end">
134
236
  <NavItem>Link 1</NavItem>
135
237
  <NavItem>Link 2</NavItem>
136
238
  </Nav>
137
239
  </Navbar>
138
-
139
- <Navbar
140
- brand={<LogoBrand />}
141
- variant="brand"
142
- >
240
+
241
+ <Navbar brand={<LogoBrand />} variant="brand">
143
242
  <Nav alignment="end">
144
243
  <NavItem>Link 1</NavItem>
145
244
  <NavItem>Link 2</NavItem>
146
245
  </Nav>
147
246
  </Navbar>
148
-
149
- <Navbar
150
- brand={<LogoBrand />}
151
- variant="success"
152
- >
247
+
248
+ <Navbar brand={<LogoBrand />} variant="success">
153
249
  <Nav alignment="end">
154
250
  <NavItem>Link 1</NavItem>
155
251
  <NavItem>Link 2</NavItem>
156
252
  </Nav>
157
253
  </Navbar>
158
-
159
- <Navbar
160
- brand={<LogoBrand />}
161
- variant="error"
162
- >
254
+
255
+ <Navbar brand={<LogoBrand />} variant="error">
163
256
  <Nav alignment="end">
164
257
  <NavItem>Link 1</NavItem>
165
258
  <NavItem>Link 2</NavItem>
166
259
  </Nav>
167
260
  </Navbar>
168
-
169
- <Navbar
170
- brand={<LogoBrand />}
171
- variant="warning"
172
- >
261
+
262
+ <Navbar brand={<LogoBrand />} variant="warning">
173
263
  <Nav alignment="end">
174
264
  <NavItem>Link 1</NavItem>
175
265
  <NavItem>Link 2</NavItem>
176
266
  </Nav>
177
267
  </Navbar>
178
-
179
- <Navbar
180
- brand={<LogoBrand />}
181
- variant="info"
182
- >
268
+
269
+ <Navbar brand={<LogoBrand />} variant="info">
183
270
  <Nav alignment="end">
184
271
  <NavItem>Link 1</NavItem>
185
272
  <NavItem>Link 2</NavItem>
186
273
  </Nav>
187
274
  </Navbar>
188
-
189
- <Navbar
190
- brand={<LogoBrand />}
191
- variant="light"
192
- >
275
+
276
+ <Navbar brand={<LogoBrand />} variant="light">
193
277
  <Nav alignment="end">
194
278
  <NavItem>Link 1</NavItem>
195
279
  <NavItem>Link 2</NavItem>
196
280
  </Nav>
197
281
  </Navbar>
198
-
199
- <Navbar
200
- brand={<LogoBrand />}
201
- variant="dark"
202
- >
282
+
283
+ <Navbar brand={<LogoBrand />} variant="dark">
203
284
  <Nav alignment="end">
204
285
  <NavItem>Link 1</NavItem>
205
286
  <NavItem>Link 2</NavItem>
@@ -220,7 +301,7 @@ export const NavAlignments: Story = {
220
301
  <NavItem>Link 3</NavItem>
221
302
  </Nav>
222
303
  </Navbar>
223
-
304
+
224
305
  <Navbar brand={<LogoBrand />}>
225
306
  <Nav alignment="center">
226
307
  <NavItem>Link 1</NavItem>
@@ -228,7 +309,7 @@ export const NavAlignments: Story = {
228
309
  <NavItem>Link 3</NavItem>
229
310
  </Nav>
230
311
  </Navbar>
231
-
312
+
232
313
  <Navbar brand={<LogoBrand />}>
233
314
  <Nav alignment="end">
234
315
  <NavItem>Link 1</NavItem>
@@ -254,13 +335,13 @@ export const WithMegaMenu: Story = {
254
335
  <MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
255
336
  <MegaMenuLink href="#">Sub Menu 3</MegaMenuLink>
256
337
  </MegaMenuColumn>
257
-
338
+
258
339
  <MegaMenuColumn title="Column 2" icon="icon-lux-circle">
259
340
  <MegaMenuLink href="#">Sub Menu 1</MegaMenuLink>
260
341
  <MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
261
342
  <MegaMenuLink href="#">Sub Menu 3</MegaMenuLink>
262
343
  </MegaMenuColumn>
263
-
344
+
264
345
  <MegaMenuColumn title="Column 3" icon="icon-lux-circle">
265
346
  <MegaMenuLink href="#">Sub Menu 1</MegaMenuLink>
266
347
  <MegaMenuLink href="#">Sub Menu 2</MegaMenuLink>
@@ -282,8 +363,12 @@ export const WithStateModifiers: Story = {
282
363
  <NavItem disabled>Disabled Link</NavItem>
283
364
  <NavDropdown title="Dropdown">
284
365
  <Menu>
285
- <MenuItem href="#" active>Active Item</MenuItem>
286
- <MenuItem href="#" disabled>Disabled Item</MenuItem>
366
+ <MenuItem href="#" active>
367
+ Active Item
368
+ </MenuItem>
369
+ <MenuItem href="#" disabled>
370
+ Disabled Item
371
+ </MenuItem>
287
372
  <MenuItem href="#">Regular Item</MenuItem>
288
373
  </Menu>
289
374
  </NavDropdown>
@@ -323,23 +408,29 @@ export const WithAvatarDropdown: Story = {
323
408
  <NavItem>Link 3</NavItem>
324
409
  </Nav>
325
410
  <Nav alignment="end">
326
- <NavDropdown
411
+ <NavDropdown
327
412
  title={
328
413
  <>
329
- <img
330
- src="/assets/images/avatar.jpg"
331
- alt="User"
332
- className="c-avatar c-avatar--sm c-avatar--circle"
414
+ <img
415
+ src="/assets/images/avatar.jpg"
416
+ alt="User"
417
+ className="c-avatar c-avatar--sm c-avatar--circle"
333
418
  />
334
419
  <span className="u-ms-2">User Name</span>
335
420
  </>
336
421
  }
337
422
  >
338
423
  <Menu>
339
- <MenuItem href="#" icon="icon-lux-user">Profile</MenuItem>
340
- <MenuItem href="#" icon="icon-lux-settings">Settings</MenuItem>
424
+ <MenuItem href="#" icon="icon-lux-user">
425
+ Profile
426
+ </MenuItem>
427
+ <MenuItem href="#" icon="icon-lux-settings">
428
+ Settings
429
+ </MenuItem>
341
430
  <MenuDivider />
342
- <MenuItem href="#" icon="icon-lux-sign-out">Logout</MenuItem>
431
+ <MenuItem href="#" icon="icon-lux-sign-out">
432
+ Logout
433
+ </MenuItem>
343
434
  </Menu>
344
435
  </NavDropdown>
345
436
  </Nav>
@@ -350,10 +441,7 @@ export const WithAvatarDropdown: Story = {
350
441
  // Responsive Navbar
351
442
  export const ResponsiveNavbar: Story = {
352
443
  render: () => (
353
- <Navbar
354
- brand={<LogoBrand />}
355
- collapsible={true}
356
- >
444
+ <Navbar brand={<LogoBrand />} collapsible={true}>
357
445
  <Nav alignment="start">
358
446
  <NavItem>Home</NavItem>
359
447
  <NavItem>Products</NavItem>
@@ -390,22 +478,28 @@ export const ResponsiveNavbar: Story = {
390
478
  <Icon name="Bell" size="sm" className="u-me-2" />
391
479
  Notifications
392
480
  </NavItem>
393
- <NavDropdown
481
+ <NavDropdown
394
482
  title={
395
483
  <>
396
- <img
397
- src="/assets/images/avatar.jpg"
398
- alt="User"
399
- className="c-avatar c-avatar--sm c-avatar--circle"
484
+ <img
485
+ src="/assets/images/avatar.jpg"
486
+ alt="User"
487
+ className="c-avatar c-avatar--sm c-avatar--circle"
400
488
  />
401
489
  </>
402
490
  }
403
491
  >
404
492
  <Menu>
405
- <MenuItem href="#" icon="icon-lux-user">Profile</MenuItem>
406
- <MenuItem href="#" icon="icon-lux-settings">Settings</MenuItem>
493
+ <MenuItem href="#" icon="icon-lux-user">
494
+ Profile
495
+ </MenuItem>
496
+ <MenuItem href="#" icon="icon-lux-settings">
497
+ Settings
498
+ </MenuItem>
407
499
  <MenuDivider />
408
- <MenuItem href="#" icon="icon-lux-sign-out">Logout</MenuItem>
500
+ <MenuItem href="#" icon="icon-lux-sign-out">
501
+ Logout
502
+ </MenuItem>
409
503
  </Menu>
410
504
  </NavDropdown>
411
505
  </Nav>
@@ -432,7 +526,7 @@ export const MegaMenuVsDropdown: Story = {
432
526
  </Nav>
433
527
  </Navbar>
434
528
  </div>
435
-
529
+
436
530
  <div>
437
531
  <h4 className="u-mb-3">Mega Menu</h4>
438
532
  <Navbar brand={<LogoBrand />}>
@@ -455,4 +549,4 @@ export const MegaMenuVsDropdown: Story = {
455
549
  </div>
456
550
  </div>
457
551
  ),
458
- };
552
+ };
@@ -0,0 +1,150 @@
1
+ import React, { useState, useEffect, useRef, forwardRef } from 'react';
2
+ import { NavbarProps } from '../../../lib/types/components';
3
+ import { useNavbar } from '../../../lib/composables/useNavbar';
4
+ import { NAVBAR } from '../../../lib/constants/components';
5
+
6
+ /**
7
+ * Navbar component provides a responsive navigation header with brand, navigation items,
8
+ * and collapsible mobile menu functionality.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * <Navbar brand="My App" position="fixed" collapsible>
13
+ * <Nav>
14
+ * <NavItem href="/">Home</NavItem>
15
+ * <NavItem href="/about">About</NavItem>
16
+ * </Nav>
17
+ * </Navbar>
18
+ * ```
19
+ */
20
+ export const Navbar = forwardRef<HTMLElement, NavbarProps>(
21
+ (
22
+ {
23
+ brand,
24
+ children,
25
+ variant,
26
+ position = 'static',
27
+ containerWidth,
28
+ collapsible = true,
29
+ expanded,
30
+ onToggle,
31
+ className = '',
32
+ disabled = false,
33
+ backdrop = false,
34
+ closeOnOutsideClick = true,
35
+ closeOnEscape = true,
36
+ ariaLabel = 'Main navigation',
37
+ id,
38
+ },
39
+ ref
40
+ ) => {
41
+ const { generateNavbarClass, generateContainerStyle, generateCollapseClass } = useNavbar({
42
+ position,
43
+ collapsible,
44
+ expanded,
45
+ onToggle,
46
+ });
47
+
48
+ // Use controlled or uncontrolled expanded state
49
+ const [navbarExpanded, setNavbarExpanded] = useState(expanded || false);
50
+
51
+ // Ref for the collapse element to handle responsive behavior
52
+ const collapseRef = useRef<HTMLDivElement>(null);
53
+
54
+ // Update local state when external state changes
55
+ useEffect(() => {
56
+ if (typeof expanded !== 'undefined') {
57
+ setNavbarExpanded(expanded);
58
+ }
59
+ }, [expanded]);
60
+
61
+ // Handle resize to reset mobile menu state when switching to desktop
62
+ useEffect(() => {
63
+ const handleResize = () => {
64
+ const isMobile = window.innerWidth < 768; // MD breakpoint
65
+ if (!isMobile && collapsible) {
66
+ // Reset expanded state on desktop
67
+ if (typeof onToggle === 'function') {
68
+ // Only update if different to avoid unnecessary renders
69
+ if (expanded) onToggle(false);
70
+ } else {
71
+ setNavbarExpanded(false);
72
+ }
73
+ }
74
+ };
75
+
76
+ window.addEventListener('resize', handleResize);
77
+ return () => {
78
+ window.removeEventListener('resize', handleResize);
79
+ };
80
+ }, [collapsible, expanded, onToggle]);
81
+
82
+ // Generate the navbar class
83
+ const navbarClass = generateNavbarClass({
84
+ position,
85
+ variant,
86
+ collapsible,
87
+ className,
88
+ });
89
+
90
+ // Generate the container style
91
+ const containerStyle = generateContainerStyle(containerWidth);
92
+
93
+ // Generate collapse class
94
+ const collapseClass = generateCollapseClass(navbarExpanded);
95
+
96
+ // Handle toggler click
97
+ const handleToggleClick = () => {
98
+ if (disabled) return;
99
+
100
+ const newState = !navbarExpanded;
101
+
102
+ if (typeof onToggle === 'function') {
103
+ // Controlled component
104
+ onToggle(newState);
105
+ } else {
106
+ // Uncontrolled component
107
+ setNavbarExpanded(newState);
108
+ }
109
+ };
110
+
111
+ return (
112
+ <nav ref={ref} className={navbarClass} aria-label={ariaLabel} id={id}>
113
+ <div className="c-navbar__container" style={containerStyle}>
114
+ {brand &&
115
+ (typeof brand === 'string' ? (
116
+ <a href="/" className="c-navbar__brand">
117
+ {brand}
118
+ </a>
119
+ ) : (
120
+ <div className="c-navbar__brand">{brand}</div>
121
+ ))}
122
+
123
+ {collapsible && (
124
+ <button
125
+ className="c-navbar__toggler"
126
+ onClick={handleToggleClick}
127
+ aria-expanded={navbarExpanded}
128
+ aria-label="Toggle navigation"
129
+ aria-controls="navbar-collapse"
130
+ disabled={disabled}
131
+ type="button"
132
+ >
133
+ <span className="c-navbar__toggler-icon"></span>
134
+ </button>
135
+ )}
136
+
137
+ <div id="navbar-collapse" className={collapseClass} ref={collapseRef}>
138
+ {children}
139
+ </div>
140
+ </div>
141
+ </nav>
142
+ );
143
+ }
144
+ );
145
+
146
+ export type { NavbarProps };
147
+
148
+ Navbar.displayName = 'Navbar';
149
+
150
+ export default Navbar;