@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
@@ -3,7 +3,7 @@ import {
3
3
  DropdownPosition,
4
4
  DropdownTrigger,
5
5
  DropdownOptions,
6
- TimerRef
6
+ TimerRef,
7
7
  } from './componentInteractions';
8
8
 
9
9
  /**
@@ -34,16 +34,17 @@ class Dropdown {
34
34
  this.isOpen = false;
35
35
  this.timeoutRef = { current: null };
36
36
  this.animating = false;
37
-
37
+
38
38
  // Set default options
39
39
  this.options = {
40
- placement: options.placement || DROPDOWN.DEFAULTS.PLACEMENT as DropdownPosition,
41
- trigger: options.trigger || DROPDOWN.DEFAULTS.TRIGGER as DropdownTrigger,
40
+ placement: options.placement || (DROPDOWN.DEFAULTS.PLACEMENT as DropdownPosition),
41
+ trigger: options.trigger || (DROPDOWN.DEFAULTS.TRIGGER as DropdownTrigger),
42
42
  offset: options.offset !== undefined ? options.offset : DROPDOWN.DEFAULTS.OFFSET,
43
- closeOnClickOutside: options.closeOnClickOutside !== undefined ? options.closeOnClickOutside : true,
43
+ closeOnClickOutside:
44
+ options.closeOnClickOutside !== undefined ? options.closeOnClickOutside : true,
44
45
  closeOnEscape: options.closeOnEscape !== undefined ? options.closeOnEscape : true,
45
46
  minWidth: options.minWidth?.toString() || DROPDOWN.DEFAULTS.MIN_WIDTH.toString(),
46
- maxHeight: options.maxHeight || ''
47
+ maxHeight: options.maxHeight || '',
47
48
  };
48
49
 
49
50
  this._initialize();
@@ -56,50 +57,51 @@ class Dropdown {
56
57
  // Generate unique ID if not already set
57
58
  const id = this.element.id || `dropdown-${Math.random().toString(36).substring(2, 9)}`;
58
59
  this.element.id = id;
59
-
60
+
60
61
  // Add proper CSS class based on trigger type
61
62
  if (this.options.trigger === 'click') {
62
63
  this.element.classList.add('c-dropdown--onclick');
63
64
  } else {
64
65
  this.element.classList.remove('c-dropdown--onclick');
65
66
  }
66
-
67
+
67
68
  // Find trigger element
68
- this.trigger = this.element.querySelector('.c-dropdown__trigger') ||
69
- this.element.querySelector('.c-dropdown__toggle');
70
-
69
+ this.trigger =
70
+ this.element.querySelector('.c-dropdown__trigger') ||
71
+ this.element.querySelector('.c-dropdown__toggle');
72
+
71
73
  // Find or create menu structure
72
74
  this._setupMenuStructure(id);
73
-
75
+
74
76
  // Setup ARIA attributes
75
77
  this._setupAriaAttributes(id);
76
-
78
+
77
79
  // Apply styles to menu
78
80
  this._applyStyles();
79
-
81
+
80
82
  // Bind events
81
83
  this._bindEvents();
82
84
  }
83
-
85
+
84
86
  /**
85
87
  * Set up menu structure
86
88
  */
87
89
  private _setupMenuStructure(id: string): void {
88
90
  this.menuWrapper = this.element.querySelector('.c-dropdown__menu-wrapper');
89
-
91
+
90
92
  if (!this.menuWrapper) {
91
- // Create menu wrapper
93
+ // Create menu wrapper
92
94
  this.menuWrapper = document.createElement('div');
93
95
  this.menuWrapper.className = 'c-dropdown__menu-wrapper';
94
96
  this.menuWrapper.classList.add(`c-dropdown__menu-wrapper--${this.options.placement}`);
95
-
97
+
96
98
  // Create inner wrapper
97
99
  this.menuInner = document.createElement('div');
98
100
  this.menuInner.className = 'c-dropdown__menu-inner';
99
-
101
+
100
102
  // Handle existing menu or create new one
101
103
  const existingMenu = this.element.querySelector('.c-dropdown__menu');
102
-
104
+
103
105
  if (existingMenu) {
104
106
  this.menu = existingMenu as HTMLElement;
105
107
  this.menuInner.appendChild(existingMenu);
@@ -108,18 +110,18 @@ class Dropdown {
108
110
  this.menu.className = 'c-dropdown__menu';
109
111
  this.menuInner.appendChild(this.menu);
110
112
  }
111
-
113
+
112
114
  this.menuWrapper.appendChild(this.menuInner);
113
115
  this.element.appendChild(this.menuWrapper);
114
116
  } else {
115
117
  // Find existing menu elements
116
118
  this.menuInner = this.menuWrapper.querySelector('.c-dropdown__menu-inner');
117
119
  this.menu = this.menuWrapper.querySelector('.c-dropdown__menu');
118
-
120
+
119
121
  if (!this.menuInner) {
120
122
  this.menuInner = document.createElement('div');
121
123
  this.menuInner.className = 'c-dropdown__menu-inner';
122
-
124
+
123
125
  if (this.menu) {
124
126
  this.menuInner.appendChild(this.menu);
125
127
  } else {
@@ -127,7 +129,7 @@ class Dropdown {
127
129
  this.menu.className = 'c-dropdown__menu';
128
130
  this.menuInner.appendChild(this.menu);
129
131
  }
130
-
132
+
131
133
  this.menuWrapper.appendChild(this.menuInner);
132
134
  } else if (!this.menu) {
133
135
  this.menu = document.createElement('ul');
@@ -135,7 +137,7 @@ class Dropdown {
135
137
  this.menuInner.appendChild(this.menu);
136
138
  }
137
139
  }
138
-
140
+
139
141
  // Add proper role to menu items
140
142
  if (this.menu) {
141
143
  const menuItems = this.menu.querySelectorAll('button, a');
@@ -143,11 +145,11 @@ class Dropdown {
143
145
  if (!item.getAttribute('role')) {
144
146
  item.setAttribute('role', 'menuitem');
145
147
  }
146
-
148
+
147
149
  if (!item.getAttribute('tabindex')) {
148
150
  item.setAttribute('tabindex', '0');
149
151
  }
150
-
152
+
151
153
  // Add proper class if missing
152
154
  if (!item.classList.contains('c-dropdown__menu-item')) {
153
155
  item.classList.add('c-dropdown__menu-item');
@@ -155,9 +157,9 @@ class Dropdown {
155
157
  });
156
158
  }
157
159
  }
158
-
160
+
159
161
  /**
160
- * Setup ARIA attributes
162
+ * Setup ARIA attributes
161
163
  */
162
164
  private _setupAriaAttributes(id: string): void {
163
165
  if (this.trigger) {
@@ -166,7 +168,7 @@ class Dropdown {
166
168
  this.trigger.setAttribute('aria-controls', id);
167
169
  this.trigger.setAttribute('tabindex', '0');
168
170
  }
169
-
171
+
170
172
  if (this.menuWrapper) {
171
173
  this.menuWrapper.setAttribute('role', 'menu');
172
174
  this.menuWrapper.setAttribute('aria-orientation', 'vertical');
@@ -174,61 +176,59 @@ class Dropdown {
174
176
  this.menuWrapper.id = id;
175
177
  }
176
178
  }
177
-
179
+
178
180
  /**
179
181
  * Apply styles to menu
180
182
  */
181
183
  private _applyStyles(): void {
182
184
  if (!this.menuInner) return;
183
-
185
+
184
186
  // Apply minWidth
185
187
  if (this.options.minWidth) {
186
188
  const minWidthStr = String(this.options.minWidth);
187
- this.menuInner.style.minWidth = minWidthStr.includes('px')
188
- ? minWidthStr
189
- : `${minWidthStr}px`;
189
+ this.menuInner.style.minWidth = minWidthStr.includes('px') ? minWidthStr : `${minWidthStr}px`;
190
190
  }
191
-
191
+
192
192
  // Apply maxHeight
193
193
  if (this.options.maxHeight) {
194
194
  this.menuInner.style.maxHeight = this.options.maxHeight.includes('px')
195
195
  ? this.options.maxHeight
196
196
  : `${this.options.maxHeight}px`;
197
-
197
+
198
198
  this.menuInner.style.overflowY = 'auto';
199
199
  }
200
200
  }
201
-
201
+
202
202
  /**
203
203
  * Bind event listeners
204
204
  */
205
205
  private _bindEvents(): void {
206
206
  if (!this.trigger) return;
207
-
207
+
208
208
  // Click or hover events based on trigger type
209
209
  if (this.options.trigger === 'click') {
210
210
  this.trigger.addEventListener('click', this._handleTriggerClick);
211
-
211
+
212
212
  if (this.options.closeOnClickOutside) {
213
213
  document.addEventListener('click', this._handleDocumentClick);
214
214
  }
215
215
  } else if (this.options.trigger === 'hover') {
216
216
  this.trigger.addEventListener('mouseenter', this._handleTriggerMouseEnter);
217
217
  this.trigger.addEventListener('mouseleave', this._handleTriggerMouseLeave);
218
-
218
+
219
219
  if (this.menuWrapper) {
220
220
  this.menuWrapper.addEventListener('mouseenter', this._handleMenuMouseEnter);
221
221
  this.menuWrapper.addEventListener('mouseleave', this._handleMenuMouseLeave);
222
222
  }
223
223
  }
224
-
224
+
225
225
  // Keyboard event handlers
226
226
  this.trigger.addEventListener('keydown', this._handleTriggerKeyDown);
227
-
227
+
228
228
  if (this.options.closeOnEscape) {
229
229
  document.addEventListener('keydown', this._handleEscapeKey);
230
230
  }
231
-
231
+
232
232
  if (this.menuWrapper) {
233
233
  this.menuWrapper.addEventListener('keydown', this._handleMenuKeyDown);
234
234
  this.menuWrapper.addEventListener('animationend', this._handleAnimationEnd);
@@ -241,12 +241,12 @@ class Dropdown {
241
241
  private _handleAnimationEnd = (event: AnimationEvent): void => {
242
242
  if (event.target === this.menuWrapper) {
243
243
  this.animating = false;
244
-
244
+
245
245
  if (!this.isOpen && this.menuWrapper) {
246
246
  this.menuWrapper.setAttribute('aria-hidden', 'true');
247
247
  }
248
248
  }
249
- }
249
+ };
250
250
 
251
251
  /**
252
252
  * Handle click on trigger
@@ -254,10 +254,10 @@ class Dropdown {
254
254
  private _handleTriggerClick = (event: Event): void => {
255
255
  event.preventDefault();
256
256
  event.stopPropagation();
257
-
257
+
258
258
  this.toggle();
259
- }
260
-
259
+ };
260
+
261
261
  /**
262
262
  * Handle keydown on trigger
263
263
  */
@@ -269,20 +269,20 @@ class Dropdown {
269
269
  event.preventDefault();
270
270
  this.close();
271
271
  }
272
- }
272
+ };
273
273
 
274
274
  /**
275
275
  * Handle document click
276
276
  */
277
277
  private _handleDocumentClick = (event: MouseEvent): void => {
278
278
  if (!this.isOpen) return;
279
-
279
+
280
280
  const target = event.target as Node;
281
-
281
+
282
282
  if (this.element && !this.element.contains(target)) {
283
283
  this.close();
284
284
  }
285
- }
285
+ };
286
286
 
287
287
  /**
288
288
  * Handle mouseenter on trigger
@@ -292,24 +292,24 @@ class Dropdown {
292
292
  window.clearTimeout(this.timeoutRef.current);
293
293
  this.timeoutRef.current = null;
294
294
  }
295
-
295
+
296
296
  this.open();
297
- }
297
+ };
298
298
 
299
299
  /**
300
300
  * Handle mouseleave on trigger
301
301
  */
302
302
  private _handleTriggerMouseLeave = (): void => {
303
303
  if (!this.menuWrapper) return;
304
-
304
+
305
305
  this.timeoutRef.current = window.setTimeout(() => {
306
306
  if (!this.menuWrapper?.matches(':hover')) {
307
307
  this.close();
308
308
  }
309
309
  this.timeoutRef.current = null;
310
310
  }, 150);
311
- }
312
-
311
+ };
312
+
313
313
  /**
314
314
  * Handle mouseenter on menu
315
315
  */
@@ -318,8 +318,8 @@ class Dropdown {
318
318
  window.clearTimeout(this.timeoutRef.current);
319
319
  this.timeoutRef.current = null;
320
320
  }
321
- }
322
-
321
+ };
322
+
323
323
  /**
324
324
  * Handle mouseleave on menu
325
325
  */
@@ -327,7 +327,7 @@ class Dropdown {
327
327
  if (this.options.trigger === 'hover') {
328
328
  this.close();
329
329
  }
330
- }
330
+ };
331
331
 
332
332
  /**
333
333
  * Handle escape key
@@ -338,22 +338,22 @@ class Dropdown {
338
338
  this.close();
339
339
  this.trigger?.focus();
340
340
  }
341
- }
342
-
341
+ };
342
+
343
343
  /**
344
344
  * Handle keyboard navigation
345
345
  */
346
346
  private _handleMenuKeyDown = (event: KeyboardEvent): void => {
347
347
  if (!this.menuWrapper || !this.isOpen) return;
348
-
348
+
349
349
  const focusableItems = Array.from(
350
350
  this.menuWrapper.querySelectorAll<HTMLElement>('[role="menuitem"]:not([disabled])')
351
351
  );
352
-
352
+
353
353
  if (!focusableItems.length) return;
354
-
354
+
355
355
  const currentIndex = focusableItems.findIndex(item => item === document.activeElement);
356
-
356
+
357
357
  switch (event.key) {
358
358
  case 'ArrowDown':
359
359
  event.preventDefault();
@@ -363,7 +363,7 @@ class Dropdown {
363
363
  focusableItems[0].focus();
364
364
  }
365
365
  break;
366
-
366
+
367
367
  case 'ArrowUp':
368
368
  event.preventDefault();
369
369
  if (currentIndex > 0) {
@@ -372,27 +372,27 @@ class Dropdown {
372
372
  focusableItems[focusableItems.length - 1].focus();
373
373
  }
374
374
  break;
375
-
375
+
376
376
  case 'Home':
377
377
  event.preventDefault();
378
378
  focusableItems[0].focus();
379
379
  break;
380
-
380
+
381
381
  case 'End':
382
382
  event.preventDefault();
383
383
  focusableItems[focusableItems.length - 1].focus();
384
384
  break;
385
385
  }
386
- }
386
+ };
387
387
 
388
388
  /**
389
389
  * Focus the first menu item
390
390
  */
391
391
  private _focusFirstMenuItem(): void {
392
392
  if (!this.menuWrapper) return;
393
-
393
+
394
394
  const firstItem = this.menuWrapper.querySelector<HTMLElement>('[role="menuitem"]');
395
-
395
+
396
396
  if (firstItem) {
397
397
  requestAnimationFrame(() => {
398
398
  firstItem.focus();
@@ -405,29 +405,31 @@ class Dropdown {
405
405
  */
406
406
  public open(): void {
407
407
  if (this.isOpen) return;
408
-
408
+
409
409
  this.isOpen = true;
410
410
  this.animating = true;
411
-
411
+
412
412
  if (this.trigger) {
413
413
  this.trigger.setAttribute('aria-expanded', 'true');
414
414
  }
415
-
415
+
416
416
  if (this.menuWrapper) {
417
417
  this.menuWrapper.setAttribute('aria-hidden', 'false');
418
418
  this.menuWrapper.classList.add('is-open');
419
-
419
+
420
420
  if (this.animating) {
421
421
  this.menuWrapper.classList.add('is-animating');
422
422
  }
423
423
  }
424
-
424
+
425
425
  this._focusFirstMenuItem();
426
-
427
- this.element.dispatchEvent(new CustomEvent('dropdown:open', {
428
- bubbles: true,
429
- detail: { dropdown: this }
430
- }));
426
+
427
+ this.element.dispatchEvent(
428
+ new CustomEvent('dropdown:open', {
429
+ bubbles: true,
430
+ detail: { dropdown: this },
431
+ })
432
+ );
431
433
  }
432
434
 
433
435
  /**
@@ -435,26 +437,28 @@ class Dropdown {
435
437
  */
436
438
  public close(): void {
437
439
  if (!this.isOpen) return;
438
-
440
+
439
441
  this.isOpen = false;
440
442
  this.animating = true;
441
-
443
+
442
444
  if (this.trigger) {
443
445
  this.trigger.setAttribute('aria-expanded', 'false');
444
446
  }
445
-
447
+
446
448
  if (this.menuWrapper) {
447
449
  this.menuWrapper.classList.remove('is-open');
448
-
450
+
449
451
  if (this.animating) {
450
452
  this.menuWrapper.classList.add('is-animating');
451
453
  }
452
454
  }
453
-
454
- this.element.dispatchEvent(new CustomEvent('dropdown:close', {
455
- bubbles: true,
456
- detail: { dropdown: this }
457
- }));
455
+
456
+ this.element.dispatchEvent(
457
+ new CustomEvent('dropdown:close', {
458
+ bubbles: true,
459
+ detail: { dropdown: this },
460
+ })
461
+ );
458
462
  }
459
463
 
460
464
  /**
@@ -470,7 +474,7 @@ class Dropdown {
470
474
  public update(options: Partial<DropdownOptions>): void {
471
475
  // Update options
472
476
  Object.assign(this.options, options);
473
-
477
+
474
478
  // Update trigger type class if needed
475
479
  if (options.trigger !== undefined) {
476
480
  if (options.trigger === 'click') {
@@ -479,18 +483,18 @@ class Dropdown {
479
483
  this.element.classList.remove('c-dropdown--onclick');
480
484
  }
481
485
  }
482
-
486
+
483
487
  // Update placement class if needed
484
488
  if (options.placement && this.menuWrapper) {
485
489
  // Remove existing placement classes
486
490
  Array.from(this.menuWrapper.classList)
487
491
  .filter(cls => cls.startsWith('c-dropdown__menu-wrapper--'))
488
492
  .forEach(cls => this.menuWrapper?.classList.remove(cls));
489
-
493
+
490
494
  // Add new placement class
491
495
  this.menuWrapper.classList.add(`c-dropdown__menu-wrapper--${options.placement}`);
492
496
  }
493
-
497
+
494
498
  // Apply updated styles
495
499
  this._applyStyles();
496
500
  }
@@ -506,28 +510,28 @@ class Dropdown {
506
510
  this.trigger.removeEventListener('mouseleave', this._handleTriggerMouseLeave);
507
511
  this.trigger.removeEventListener('keydown', this._handleTriggerKeyDown);
508
512
  }
509
-
513
+
510
514
  document.removeEventListener('click', this._handleDocumentClick);
511
515
  document.removeEventListener('keydown', this._handleEscapeKey);
512
-
516
+
513
517
  if (this.menuWrapper) {
514
518
  this.menuWrapper.removeEventListener('mouseenter', this._handleMenuMouseEnter);
515
519
  this.menuWrapper.removeEventListener('mouseleave', this._handleMenuMouseLeave);
516
520
  this.menuWrapper.removeEventListener('keydown', this._handleMenuKeyDown);
517
521
  this.menuWrapper.removeEventListener('animationend', this._handleAnimationEnd);
518
522
  }
519
-
523
+
520
524
  // Close if open
521
525
  if (this.isOpen) {
522
526
  this.close();
523
527
  }
524
-
528
+
525
529
  // Clear timeouts
526
530
  if (this.timeoutRef.current !== null) {
527
531
  window.clearTimeout(this.timeoutRef.current);
528
532
  this.timeoutRef.current = null;
529
533
  }
530
-
534
+
531
535
  // Remove reference
532
536
  // @ts-ignore: Custom property
533
537
  this.element._dropdown = null;
@@ -539,7 +543,7 @@ class Dropdown {
539
543
  */
540
544
  const initializeDropdowns = (): Dropdown[] => {
541
545
  const dropdownElements = Array.from(document.querySelectorAll(DROPDOWN.SELECTORS.DROPDOWN));
542
-
546
+
543
547
  return dropdownElements.map(element => {
544
548
  // Skip already initialized dropdowns
545
549
  // @ts-ignore: Custom property
@@ -547,25 +551,25 @@ const initializeDropdowns = (): Dropdown[] => {
547
551
  // @ts-ignore: Custom property
548
552
  return element._dropdown;
549
553
  }
550
-
554
+
551
555
  const options: DropdownOptions = {
552
556
  placement: (element as HTMLElement).dataset.dropdownPlacement as DropdownPosition,
553
557
  trigger: (element as HTMLElement).dataset.dropdownTrigger as DropdownTrigger,
554
- offset: (element as HTMLElement).dataset.dropdownOffset ?
555
- Number((element as HTMLElement).dataset.dropdownOffset) :
556
- undefined,
558
+ offset: (element as HTMLElement).dataset.dropdownOffset
559
+ ? Number((element as HTMLElement).dataset.dropdownOffset)
560
+ : undefined,
557
561
  closeOnClickOutside: (element as HTMLElement).dataset.dropdownCloseOnClickOutside !== 'false',
558
562
  closeOnEscape: (element as HTMLElement).dataset.dropdownCloseOnEscape !== 'false',
559
563
  minWidth: (element as HTMLElement).dataset.dropdownMinWidth || undefined,
560
- maxHeight: (element as HTMLElement).dataset.dropdownMaxHeight || undefined
564
+ maxHeight: (element as HTMLElement).dataset.dropdownMaxHeight || undefined,
561
565
  };
562
-
566
+
563
567
  const dropdown = new Dropdown(element as HTMLElement, options);
564
-
568
+
565
569
  // Store instance on element
566
570
  // @ts-ignore: Custom property
567
571
  (element as HTMLElement)._dropdown = dropdown;
568
-
572
+
569
573
  return dropdown;
570
574
  });
571
575
  };
@@ -574,24 +578,25 @@ const initializeDropdowns = (): Dropdown[] => {
574
578
  * Create a dropdown instance for a specific element
575
579
  */
576
580
  const createDropdown = (element: HTMLElement | string, options: DropdownOptions = {}): Dropdown => {
577
- const el = typeof element === 'string' ? document.querySelector(element) as HTMLElement : element;
578
-
581
+ const el =
582
+ typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
583
+
579
584
  if (!el) {
580
585
  throw new Error(`Dropdown target not found: ${element}`);
581
586
  }
582
-
587
+
583
588
  // @ts-ignore: Custom property
584
589
  if (el._dropdown instanceof Dropdown) {
585
590
  // @ts-ignore: Custom property
586
591
  return el._dropdown;
587
592
  }
588
-
593
+
589
594
  const dropdown = new Dropdown(el, options);
590
-
595
+
591
596
  // Store instance on element
592
597
  // @ts-ignore: Custom property
593
598
  el._dropdown = dropdown;
594
-
599
+
595
600
  return dropdown;
596
601
  };
597
602
 
@@ -604,4 +609,4 @@ if (typeof document !== 'undefined') {
604
609
  } else {
605
610
  document.addEventListener('DOMContentLoaded', initializeDropdowns);
606
611
  }
607
- }
612
+ }