@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
@@ -0,0 +1,319 @@
1
+ import { SIDE_MENU } from '../../../lib/constants/components';
2
+
3
+ /**
4
+ * Default options for SideMenu component
5
+ */
6
+ const DEFAULTS = {
7
+ collapsible: true,
8
+ open: false,
9
+ title: '',
10
+ toggleIcon: '▶',
11
+ keyboard: true,
12
+ autoOpen: true, // Auto-open on desktop
13
+ };
14
+
15
+ /**
16
+ * SideMenu component class for vanilla JavaScript implementation
17
+ * Provides collapsible side navigation functionality with responsive behavior
18
+ *
19
+ * @example
20
+ * ```js
21
+ * // Initialize a side menu
22
+ * const sideMenu = new SideMenu('.c-side-menu', {
23
+ * collapsible: true,
24
+ * autoOpen: true
25
+ * });
26
+ *
27
+ * // Control programmatically
28
+ * sideMenu.open();
29
+ * sideMenu.close();
30
+ * sideMenu.toggle();
31
+ * ```
32
+ */
33
+ export default class SideMenu {
34
+ private element: HTMLElement;
35
+ private options: any;
36
+ private toggler: HTMLElement | null = null;
37
+ private wrapper: HTMLElement | null = null;
38
+ private inner: HTMLElement | null = null;
39
+ private togglerIcon: HTMLElement | null = null;
40
+ private isOpen: boolean = false;
41
+ private resizeHandler: () => void;
42
+
43
+ /**
44
+ * Create a new SideMenu instance
45
+ * @param element - The side menu element or selector
46
+ * @param options - Configuration options
47
+ */
48
+ constructor(element: string | HTMLElement, options: any = {}) {
49
+ this.element =
50
+ typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
51
+
52
+ if (!this.element) {
53
+ throw new Error('SideMenu element not found');
54
+ }
55
+
56
+ this.options = { ...DEFAULTS, ...options };
57
+ this.resizeHandler = this._handleResize.bind(this);
58
+ this._init();
59
+ }
60
+
61
+ /**
62
+ * Initialize the side menu component
63
+ * @private
64
+ */
65
+ private _init(): void {
66
+ this._findElements();
67
+ this._bindEvents();
68
+ this._setInitialState();
69
+ }
70
+
71
+ /**
72
+ * Find required DOM elements
73
+ * @private
74
+ */
75
+ private _findElements(): void {
76
+ this.toggler = this.element.querySelector(SIDE_MENU.SELECTORS.TOGGLER);
77
+ this.wrapper = this.element.querySelector(SIDE_MENU.SELECTORS.WRAPPER);
78
+ this.inner = this.element.querySelector(SIDE_MENU.SELECTORS.INNER);
79
+ this.togglerIcon = this.element.querySelector(SIDE_MENU.SELECTORS.TOGGLER_ICON);
80
+ }
81
+
82
+ /**
83
+ * Bind event listeners
84
+ * @private
85
+ */
86
+ private _bindEvents(): void {
87
+ if (this.toggler) {
88
+ this.toggler.addEventListener('click', this._handleToggleClick.bind(this));
89
+ }
90
+
91
+ if (this.options.keyboard && this.toggler) {
92
+ this.toggler.addEventListener('keydown', this._handleKeydown.bind(this));
93
+ }
94
+
95
+ // Handle window resize for responsive behavior
96
+ window.addEventListener('resize', this.resizeHandler);
97
+ }
98
+
99
+ /**
100
+ * Set initial component state
101
+ * @private
102
+ */
103
+ private _setInitialState(): void {
104
+ this.isOpen = this.options.open || false;
105
+ this._handleResize(); // Set initial responsive state
106
+ }
107
+
108
+ /**
109
+ * Handle toggle button click
110
+ * @private
111
+ */
112
+ private _handleToggleClick(event: Event): void {
113
+ event.preventDefault();
114
+ this.toggle();
115
+ }
116
+
117
+ /**
118
+ * Handle keyboard events
119
+ * @private
120
+ */
121
+ private _handleKeydown(event: KeyboardEvent): void {
122
+ if (event.key === 'Enter' || event.key === ' ') {
123
+ event.preventDefault();
124
+ this.toggle();
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Handle window resize for responsive behavior
130
+ * @private
131
+ */
132
+ private _handleResize(): void {
133
+ const isMobile = window.innerWidth < 768; // MD breakpoint
134
+
135
+ if (!this.options.collapsible) {
136
+ // Always open if not collapsible
137
+ this._updateOpenState(true, false);
138
+ return;
139
+ }
140
+
141
+ if (!isMobile && this.options.autoOpen) {
142
+ // Auto-open on desktop
143
+ this._updateOpenState(true, false);
144
+
145
+ // Reset wrapper height on desktop
146
+ if (this.wrapper) {
147
+ this.wrapper.style.height = 'auto';
148
+ }
149
+ } else if (isMobile) {
150
+ // Set proper height for mobile animation
151
+ this._updateWrapperHeight();
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Update wrapper height for mobile animation
157
+ * @private
158
+ */
159
+ private _updateWrapperHeight(): void {
160
+ if (!this.wrapper || !this.inner) return;
161
+
162
+ const isMobile = window.innerWidth < 768;
163
+
164
+ if (isMobile && this.options.collapsible) {
165
+ if (this.isOpen) {
166
+ this.wrapper.style.height = `${this.inner.scrollHeight}px`;
167
+ } else {
168
+ this.wrapper.style.height = '0px';
169
+ }
170
+ } else {
171
+ this.wrapper.style.height = 'auto';
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Update the open state and DOM
177
+ * @private
178
+ */
179
+ private _updateOpenState(newState: boolean, animate: boolean = true): void {
180
+ this.isOpen = newState;
181
+
182
+ // Update toggler aria-expanded
183
+ if (this.toggler) {
184
+ this.toggler.setAttribute('aria-expanded', this.isOpen.toString());
185
+ }
186
+
187
+ // Update wrapper aria-hidden
188
+ if (this.wrapper) {
189
+ this.wrapper.setAttribute('aria-hidden', (!this.isOpen).toString());
190
+ }
191
+
192
+ // Update CSS classes
193
+ if (this.isOpen) {
194
+ this.element.classList.add(SIDE_MENU.CLASSES.IS_OPEN);
195
+ } else {
196
+ this.element.classList.remove(SIDE_MENU.CLASSES.IS_OPEN);
197
+ }
198
+
199
+ // Update wrapper height for mobile
200
+ if (animate) {
201
+ this._updateWrapperHeight();
202
+ }
203
+
204
+ // Dispatch custom event
205
+ const eventType = this.isOpen ? 'sidemenu:opened' : 'sidemenu:closed';
206
+ const customEvent = new CustomEvent(eventType, {
207
+ detail: { sideMenu: this, open: this.isOpen },
208
+ });
209
+ this.element.dispatchEvent(customEvent);
210
+ }
211
+
212
+ /**
213
+ * Open the side menu
214
+ */
215
+ public open(): void {
216
+ if (this.isOpen) return;
217
+ this._updateOpenState(true);
218
+ }
219
+
220
+ /**
221
+ * Close the side menu
222
+ */
223
+ public close(): void {
224
+ if (!this.isOpen) return;
225
+ this._updateOpenState(false);
226
+ }
227
+
228
+ /**
229
+ * Toggle the side menu open state
230
+ */
231
+ public toggle(): void {
232
+ if (this.isOpen) {
233
+ this.close();
234
+ } else {
235
+ this.open();
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Get the current open state
241
+ * @returns Whether the side menu is open
242
+ */
243
+ public isOpened(): boolean {
244
+ return this.isOpen;
245
+ }
246
+
247
+ /**
248
+ * Update side menu options
249
+ * @param newOptions - New options to merge
250
+ */
251
+ public updateOptions(newOptions: Partial<typeof DEFAULTS>): void {
252
+ this.options = { ...this.options, ...newOptions };
253
+
254
+ // Re-apply responsive behavior if autoOpen changed
255
+ if ('autoOpen' in newOptions) {
256
+ this._handleResize();
257
+ }
258
+ }
259
+
260
+ /**
261
+ * Set active menu item
262
+ * @param selector - Selector for the menu item to activate
263
+ */
264
+ public setActiveItem(selector: string): void {
265
+ // Remove active class from all items
266
+ const allItems = this.element.querySelectorAll(SIDE_MENU.SELECTORS.LINK);
267
+ allItems.forEach(item => {
268
+ item.classList.remove(SIDE_MENU.CLASSES.ACTIVE);
269
+ item.removeAttribute('aria-current');
270
+ });
271
+
272
+ // Add active class to selected item
273
+ const activeItem = this.element.querySelector(selector);
274
+ if (activeItem) {
275
+ activeItem.classList.add(SIDE_MENU.CLASSES.ACTIVE);
276
+ activeItem.setAttribute('aria-current', 'page');
277
+ }
278
+ }
279
+
280
+ /**
281
+ * Get all menu items
282
+ * @returns Array of menu item elements
283
+ */
284
+ public getMenuItems(): HTMLElement[] {
285
+ return Array.from(this.element.querySelectorAll(SIDE_MENU.SELECTORS.LINK));
286
+ }
287
+
288
+ /**
289
+ * Destroy the side menu instance and clean up
290
+ */
291
+ public destroy(): void {
292
+ // Remove event listeners
293
+ if (this.toggler) {
294
+ this.toggler.removeEventListener('click', this._handleToggleClick);
295
+ this.toggler.removeEventListener('keydown', this._handleKeydown);
296
+ }
297
+
298
+ window.removeEventListener('resize', this.resizeHandler);
299
+
300
+ // Reset DOM state
301
+ this.element.classList.remove(SIDE_MENU.CLASSES.IS_OPEN);
302
+
303
+ if (this.wrapper) {
304
+ this.wrapper.style.height = '';
305
+ this.wrapper.removeAttribute('aria-hidden');
306
+ }
307
+
308
+ if (this.toggler) {
309
+ this.toggler.removeAttribute('aria-expanded');
310
+ }
311
+
312
+ // Clear references
313
+ this.element = null as any;
314
+ this.toggler = null;
315
+ this.wrapper = null;
316
+ this.inner = null;
317
+ this.togglerIcon = null;
318
+ }
319
+ }
@@ -0,0 +1,69 @@
1
+ import SideMenu from './SideMenu';
2
+ import {
3
+ initFromDataAttributes,
4
+ getInstance,
5
+ create,
6
+ disposeAll,
7
+ openAll,
8
+ closeAll,
9
+ toggleAll,
10
+ getAllInstances,
11
+ setActiveByHref,
12
+ setActiveByText,
13
+ setupGlobalEventDelegation,
14
+ autoSetActiveFromURL,
15
+ } from './SideMenuInteractions';
16
+
17
+ // Global registration for browser environments
18
+ if (typeof window !== 'undefined') {
19
+ // Initialize the Atomix global object if it doesn't exist
20
+ (window as any).Atomix = (window as any).Atomix || {};
21
+
22
+ // Add SideMenu to the global Atomix object
23
+ (window as any).Atomix.SideMenu = {
24
+ create: create,
25
+ init: initFromDataAttributes,
26
+ get: getInstance,
27
+ disposeAll: disposeAll,
28
+ openAll: openAll,
29
+ closeAll: closeAll,
30
+ toggleAll: toggleAll,
31
+ getAllInstances: getAllInstances,
32
+ setActiveByHref: setActiveByHref,
33
+ setActiveByText: setActiveByText,
34
+ setupGlobalEventDelegation: setupGlobalEventDelegation,
35
+ autoSetActiveFromURL: autoSetActiveFromURL,
36
+ // Direct class access
37
+ SideMenu: SideMenu,
38
+ };
39
+
40
+ // Auto-initialize side menus when DOM is ready
41
+ if (document.readyState === 'loading') {
42
+ document.addEventListener('DOMContentLoaded', () => {
43
+ initFromDataAttributes();
44
+ setupGlobalEventDelegation();
45
+ autoSetActiveFromURL();
46
+ });
47
+ } else {
48
+ initFromDataAttributes();
49
+ setupGlobalEventDelegation();
50
+ autoSetActiveFromURL();
51
+ }
52
+ }
53
+
54
+ // Export everything for module bundling
55
+ export {
56
+ SideMenu as default,
57
+ initFromDataAttributes,
58
+ getInstance,
59
+ create,
60
+ disposeAll,
61
+ openAll,
62
+ closeAll,
63
+ toggleAll,
64
+ getAllInstances,
65
+ setActiveByHref,
66
+ setActiveByText,
67
+ setupGlobalEventDelegation,
68
+ autoSetActiveFromURL,
69
+ };
@@ -0,0 +1,250 @@
1
+ import SideMenu from './SideMenu';
2
+ import { SIDE_MENU } from '../../../lib/constants/components';
3
+
4
+ /**
5
+ * Parse data attributes from an element to create side menu options
6
+ * @param element - The side menu element
7
+ * @returns Parsed options object
8
+ */
9
+ function parseDataAttributes(element: HTMLElement): any {
10
+ const dataset = element.dataset;
11
+
12
+ return {
13
+ collapsible: dataset.collapsible !== 'false',
14
+ open: dataset.open === 'true',
15
+ title: dataset.title || '',
16
+ keyboard: dataset.keyboard !== 'false',
17
+ autoOpen: dataset.autoOpen !== 'false',
18
+ };
19
+ }
20
+
21
+ /**
22
+ * Initialize side menu components from data attributes
23
+ * Finds all elements with [data-side-menu] and creates SideMenu instances
24
+ *
25
+ * @example
26
+ * ```html
27
+ * <div class="c-side-menu" data-side-menu data-collapsible="true" data-auto-open="true">
28
+ * <div class="c-side-menu__toggler">
29
+ * <span class="c-side-menu__title">Navigation</span>
30
+ * <span class="c-side-menu__toggler-icon">▶</span>
31
+ * </div>
32
+ * <div class="c-side-menu__wrapper">
33
+ * <div class="c-side-menu__inner">
34
+ * <!-- menu content -->
35
+ * </div>
36
+ * </div>
37
+ * </div>
38
+ * ```
39
+ *
40
+ * @returns Array of created SideMenu instances
41
+ */
42
+ export function initFromDataAttributes(): SideMenu[] {
43
+ const instances: SideMenu[] = [];
44
+
45
+ document.querySelectorAll('[data-side-menu]').forEach(element => {
46
+ const options = parseDataAttributes(element as HTMLElement);
47
+ const instance = new SideMenu(element as HTMLElement, options);
48
+ instances.push(instance);
49
+
50
+ // Store instance reference on the element for later retrieval
51
+ (element as any)._sideMenuInstance = instance;
52
+ });
53
+
54
+ return instances;
55
+ }
56
+
57
+ /**
58
+ * Get a side menu instance from an element
59
+ * @param element - The side menu element or selector
60
+ * @returns The SideMenu instance or null if not found
61
+ */
62
+ export function getInstance(element: string | HTMLElement): SideMenu | null {
63
+ const el =
64
+ typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
65
+
66
+ if (!el) return null;
67
+
68
+ return (el as any)._sideMenuInstance || null;
69
+ }
70
+
71
+ /**
72
+ * Create a new side menu instance programmatically
73
+ * @param element - The side menu element or selector
74
+ * @param options - Configuration options
75
+ * @returns New SideMenu instance
76
+ */
77
+ export function create(element: string | HTMLElement, options: any = {}): SideMenu {
78
+ const instance = new SideMenu(element, options);
79
+
80
+ // Store instance reference
81
+ const el =
82
+ typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
83
+
84
+ if (el) {
85
+ (el as any)._sideMenuInstance = instance;
86
+ }
87
+
88
+ return instance;
89
+ }
90
+
91
+ /**
92
+ * Dispose all side menu instances
93
+ * Destroys all side menu instances and cleans up references
94
+ */
95
+ export function disposeAll(): void {
96
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
97
+ const instance = (element as any)._sideMenuInstance;
98
+ if (instance && typeof instance.destroy === 'function') {
99
+ instance.destroy();
100
+ delete (element as any)._sideMenuInstance;
101
+ }
102
+ });
103
+ }
104
+
105
+ /**
106
+ * Open all side menu instances
107
+ */
108
+ export function openAll(): void {
109
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
110
+ const instance = (element as any)._sideMenuInstance;
111
+ if (instance && typeof instance.open === 'function') {
112
+ instance.open();
113
+ }
114
+ });
115
+ }
116
+
117
+ /**
118
+ * Close all side menu instances
119
+ */
120
+ export function closeAll(): void {
121
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
122
+ const instance = (element as any)._sideMenuInstance;
123
+ if (instance && typeof instance.close === 'function') {
124
+ instance.close();
125
+ }
126
+ });
127
+ }
128
+
129
+ /**
130
+ * Toggle all side menu instances
131
+ */
132
+ export function toggleAll(): void {
133
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
134
+ const instance = (element as any)._sideMenuInstance;
135
+ if (instance && typeof instance.toggle === 'function') {
136
+ instance.toggle();
137
+ }
138
+ });
139
+ }
140
+
141
+ /**
142
+ * Get all side menu instances
143
+ * @returns Array of all SideMenu instances
144
+ */
145
+ export function getAllInstances(): SideMenu[] {
146
+ const instances: SideMenu[] = [];
147
+
148
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
149
+ const instance = (element as any)._sideMenuInstance;
150
+ if (instance) {
151
+ instances.push(instance);
152
+ }
153
+ });
154
+
155
+ return instances;
156
+ }
157
+
158
+ /**
159
+ * Set active menu item across all side menus
160
+ * @param href - The href to match for setting active state
161
+ */
162
+ export function setActiveByHref(href: string): void {
163
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
164
+ const instance = (element as any)._sideMenuInstance;
165
+ if (instance && typeof instance.setActiveItem === 'function') {
166
+ instance.setActiveItem(`[href="${href}"]`);
167
+ }
168
+ });
169
+ }
170
+
171
+ /**
172
+ * Set active menu item by text content
173
+ * @param text - The text content to match for setting active state
174
+ */
175
+ export function setActiveByText(text: string): void {
176
+ document.querySelectorAll(SIDE_MENU.SELECTORS.SIDE_MENU).forEach(element => {
177
+ const links = element.querySelectorAll(SIDE_MENU.SELECTORS.LINK);
178
+
179
+ // Remove active from all links
180
+ links.forEach(link => {
181
+ link.classList.remove(SIDE_MENU.CLASSES.ACTIVE);
182
+ link.removeAttribute('aria-current');
183
+ });
184
+
185
+ // Find and activate matching link
186
+ links.forEach(link => {
187
+ if (link.textContent?.trim() === text) {
188
+ link.classList.add(SIDE_MENU.CLASSES.ACTIVE);
189
+ link.setAttribute('aria-current', 'page');
190
+ }
191
+ });
192
+ });
193
+ }
194
+
195
+ /**
196
+ * Event delegation helper for side menu togglers
197
+ * Handles clicks on side menu togglers throughout the document
198
+ */
199
+ export function setupGlobalEventDelegation(): void {
200
+ document.addEventListener('click', event => {
201
+ const target = event.target as HTMLElement;
202
+ const toggler = target.closest(SIDE_MENU.SELECTORS.TOGGLER);
203
+
204
+ if (toggler) {
205
+ const sideMenu = toggler.closest(SIDE_MENU.SELECTORS.SIDE_MENU);
206
+ if (sideMenu) {
207
+ const instance = getInstance(sideMenu as HTMLElement);
208
+ if (instance) {
209
+ event.preventDefault();
210
+ instance.toggle();
211
+ }
212
+ }
213
+ }
214
+ });
215
+
216
+ // Handle keyboard events for togglers
217
+ document.addEventListener('keydown', event => {
218
+ if (event.key === 'Enter' || event.key === ' ') {
219
+ const target = event.target as HTMLElement;
220
+ const toggler = target.closest(SIDE_MENU.SELECTORS.TOGGLER);
221
+
222
+ if (toggler) {
223
+ const sideMenu = toggler.closest(SIDE_MENU.SELECTORS.SIDE_MENU);
224
+ if (sideMenu) {
225
+ const instance = getInstance(sideMenu as HTMLElement);
226
+ if (instance) {
227
+ event.preventDefault();
228
+ instance.toggle();
229
+ }
230
+ }
231
+ }
232
+ }
233
+ });
234
+ }
235
+
236
+ /**
237
+ * Auto-set active menu items based on current URL
238
+ */
239
+ export function autoSetActiveFromURL(): void {
240
+ const currentPath = window.location.pathname;
241
+ const currentHref = window.location.href;
242
+
243
+ // Try to match by full href first, then by pathname
244
+ setActiveByHref(currentHref);
245
+
246
+ // If no match found, try pathname
247
+ if (!document.querySelector(`${SIDE_MENU.SELECTORS.LINK}.${SIDE_MENU.CLASSES.ACTIVE}`)) {
248
+ setActiveByHref(currentPath);
249
+ }
250
+ }
@@ -0,0 +1,58 @@
1
+ import Navbar from './index';
2
+ import {
3
+ initFromDataAttributes,
4
+ getInstance,
5
+ create,
6
+ disposeAll,
7
+ expandAll,
8
+ collapseAll,
9
+ toggleAll,
10
+ getAllInstances,
11
+ setupGlobalEventDelegation,
12
+ } from './NavbarInteractions';
13
+
14
+ // Global registration for browser environments
15
+ if (typeof window !== 'undefined') {
16
+ // Initialize the Atomix global object if it doesn't exist
17
+ (window as any).Atomix = (window as any).Atomix || {};
18
+
19
+ // Add Navbar to the global Atomix object
20
+ (window as any).Atomix.Navbar = {
21
+ create: create,
22
+ init: initFromDataAttributes,
23
+ get: getInstance,
24
+ disposeAll: disposeAll,
25
+ expandAll: expandAll,
26
+ collapseAll: collapseAll,
27
+ toggleAll: toggleAll,
28
+ getAllInstances: getAllInstances,
29
+ setupGlobalEventDelegation: setupGlobalEventDelegation,
30
+ // Direct class access
31
+ Navbar: Navbar,
32
+ };
33
+
34
+ // Auto-initialize navbars when DOM is ready
35
+ if (document.readyState === 'loading') {
36
+ document.addEventListener('DOMContentLoaded', () => {
37
+ initFromDataAttributes();
38
+ setupGlobalEventDelegation();
39
+ });
40
+ } else {
41
+ initFromDataAttributes();
42
+ setupGlobalEventDelegation();
43
+ }
44
+ }
45
+
46
+ // Export everything for module bundling
47
+ export {
48
+ Navbar as default,
49
+ initFromDataAttributes,
50
+ getInstance,
51
+ create,
52
+ disposeAll,
53
+ expandAll,
54
+ collapseAll,
55
+ toggleAll,
56
+ getAllInstances,
57
+ setupGlobalEventDelegation,
58
+ };