@shohojdhara/atomix 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CONTRIBUTING.md +151 -0
  2. package/NEXTJS_INTEGRATION.md +358 -0
  3. package/README.md +168 -119
  4. package/babel.config.js +58 -0
  5. package/css.d.ts +10 -0
  6. package/dist/css/atomix.css +1 -2
  7. package/dist/js/194.js +1 -2
  8. package/dist/js/244.js +1 -0
  9. package/dist/js/atomix.react.cjs.js +1 -0
  10. package/dist/js/atomix.react.esm.js +1 -2
  11. package/dist/js/atomix.react.umd.js +1 -2
  12. package/dist/js/chunks/cjs/202.9d3b1ef1eaa0d5c8a309.js +1 -0
  13. package/dist/js/chunks/cjs/308.6ea9685ea38ead4120d0.js +1 -0
  14. package/dist/js/chunks/cjs/54.73db6922594e421ba6b1.js +1 -0
  15. package/dist/js/chunks/cjs/619.51feecaadcab819780d4.js +1 -0
  16. package/dist/js/chunks/cjs/690.90f6d11164081cbcbc4d.js +1 -0
  17. package/dist/js/chunks/cjs/894.24877561df336a8dfd14.js +1 -0
  18. package/dist/js/chunks/cjs/897.6c2a71fae95338890de7.js +1 -0
  19. package/dist/js/chunks/esm/{202.ff48d27672233280e021.js → 202.82aa7b3244e53c9edb72.js} +1 -2
  20. package/dist/js/chunks/esm/{308.f873332126eba90e5c62.js → 308.27e1e4005705ae320432.js} +1 -2
  21. package/dist/js/chunks/esm/{54.4db919e5e4e5cc6d7c72.js → 54.ece1fd6964f98d4d994f.js} +1 -2
  22. package/dist/js/chunks/esm/{619.afc5a718eff77fa423b5.js → 619.ebeb0298432a066ac05c.js} +1 -2
  23. package/dist/js/chunks/esm/{690.a9e968c7497d61e56cdc.js → 690.c5f412cc979b55740359.js} +1 -2
  24. package/dist/js/chunks/esm/{894.f1091a4a8758c26d29e4.js → 894.3604ddc9367d75191198.js} +1 -2
  25. package/dist/js/chunks/esm/{897.561a50f7d043d42169da.js → 897.a4aab2fad9401693eb12.js} +1 -2
  26. package/dist/js/chunks/umd/{202.dac7605cc555b6bda542.js → 202.5017dd0403d696bf1644.js} +1 -2
  27. package/dist/js/chunks/umd/{308.6709979849dcbdb90c9b.js → 308.4bc14b9d7b16b6ee0ab8.js} +1 -2
  28. package/dist/js/chunks/umd/{54.403470e1f7d0ef4424a7.js → 54.7fdfb4a031989470a70d.js} +1 -2
  29. package/dist/js/chunks/umd/{619.fa05ea98c10270eb64c5.js → 619.84a0c35ecee695250085.js} +1 -2
  30. package/dist/js/chunks/umd/{690.aa7054d1c53e5402c2d6.js → 690.d7041094a34a4a434be2.js} +1 -2
  31. package/dist/js/chunks/umd/{894.3e1eaf0a2aadf4434390.js → 894.c127ee4e9513c22ee97d.js} +1 -2
  32. package/dist/js/chunks/umd/{897.554ea37be4453698c167.js → 897.26932ac837a39fc91907.js} +1 -2
  33. package/dist/types/components/Badge/index.d.ts +3 -3
  34. package/dist/types/components/{Navbar → Navigation/Menu}/MegaMenu.d.ts +1 -1
  35. package/dist/types/components/{Navbar → Navigation/Menu}/Menu.d.ts +1 -1
  36. package/dist/types/components/Navigation/Nav/Nav.d.ts +20 -0
  37. package/dist/types/components/{Navbar → Navigation/Nav}/NavDropdown.d.ts +1 -1
  38. package/dist/types/components/Navigation/Nav/NavItem.d.ts +33 -0
  39. package/dist/types/components/Navigation/Navbar/Navbar.d.ts +19 -0
  40. package/dist/types/components/Navigation/SideMenu/SideMenu.d.ts +20 -0
  41. package/dist/types/components/Navigation/SideMenu/SideMenuItem.d.ts +30 -0
  42. package/dist/types/components/Navigation/SideMenu/SideMenuList.d.ts +17 -0
  43. package/dist/types/components/Navigation/index.d.ts +10 -0
  44. package/dist/types/components/PhotoViewer/PhotoViewer.d.ts +2 -2
  45. package/dist/types/components/PhotoViewer/PhotoViewerHeader.d.ts +2 -2
  46. package/dist/types/components/Tab/index.d.ts +2 -2
  47. package/dist/types/components/Toggle/index.d.ts +2 -2
  48. package/dist/types/components/Tooltip/index.d.ts +3 -3
  49. package/dist/types/components/index.d.ts +1 -1
  50. package/dist/types/lib/composables/index.d.ts +1 -0
  51. package/dist/types/lib/composables/useDatePicker.d.ts +1 -1
  52. package/dist/types/lib/composables/useDropdown.d.ts +1 -1
  53. package/dist/types/lib/composables/useModal.d.ts +1 -1
  54. package/dist/types/lib/composables/usePhotoViewer.d.ts +1 -1
  55. package/dist/types/lib/composables/useRating.d.ts +1 -1
  56. package/dist/types/lib/composables/useSideMenu.d.ts +28 -0
  57. package/dist/types/lib/constants/components.d.ts +72 -0
  58. package/dist/types/lib/types/components.d.ts +103 -0
  59. package/examples/nextjs-example.tsx +271 -0
  60. package/implementation-guide.md +505 -0
  61. package/next.config.js +69 -0
  62. package/package.json +80 -42
  63. package/postcss.config.js +28 -0
  64. package/src/Introduction.mdx +3 -5
  65. package/src/assets/fonts/HelveticaNeue/stylesheet.css +140 -127
  66. package/src/components/Accordion/Accordion.stories.tsx +58 -45
  67. package/src/components/Accordion/Accordion.tsx +14 -4
  68. package/src/components/Accordion/scripts/accordionInteractions.ts +9 -9
  69. package/src/components/Accordion/scripts/bundle.ts +1 -1
  70. package/src/components/Accordion/scripts/index.ts +3 -3
  71. package/src/components/AtomixLogo.tsx +13 -19
  72. package/src/components/Avatar/Avatar.stories.tsx +24 -21
  73. package/src/components/Avatar/Avatar.tsx +5 -8
  74. package/src/components/Avatar/AvatarGroup.tsx +11 -11
  75. package/src/components/Avatar/index.ts +1 -1
  76. package/src/components/Avatar/scripts/index.ts +66 -71
  77. package/src/components/Badge/Badge.stories.tsx +51 -21
  78. package/src/components/Badge/Badge.tsx +14 -12
  79. package/src/components/Badge/index.ts +3 -3
  80. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +40 -40
  81. package/src/components/Breadcrumb/Breadcrumb.tsx +19 -26
  82. package/src/components/Breadcrumb/index.ts +1 -1
  83. package/src/components/Breadcrumb/scripts/breadcrumb.ts +36 -34
  84. package/src/components/Breadcrumb/scripts/index.ts +1 -1
  85. package/src/components/Breadcrumb/scripts/types.ts +9 -9
  86. package/src/components/Button/Button.stories.tsx +36 -12
  87. package/src/components/Button/Button.tsx +52 -39
  88. package/src/components/Button/index.ts +1 -1
  89. package/src/components/Button/scripts/buttonInteractions.ts +9 -9
  90. package/src/components/Button/scripts/index.ts +1 -1
  91. package/src/components/Callout/Callout.stories.tsx +207 -114
  92. package/src/components/Callout/Callout.tsx +12 -12
  93. package/src/components/Callout/index.ts +1 -1
  94. package/src/components/Callout/scripts/CalloutInteractions.ts +58 -48
  95. package/src/components/Callout/scripts/bundle.ts +2 -2
  96. package/src/components/Callout/scripts/index.ts +19 -15
  97. package/src/components/Card/Card.stories.tsx +2 -2
  98. package/src/components/Card/Card.tsx +49 -72
  99. package/src/components/Card/ElevationCard.tsx +4 -8
  100. package/src/components/Card/index.ts +1 -1
  101. package/src/components/Card/scripts/bundle.ts +7 -7
  102. package/src/components/Card/scripts/cardInteractions.ts +24 -24
  103. package/src/components/Card/scripts/index.ts +25 -26
  104. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -3
  105. package/src/components/ColorModeToggle/ColorModeToggle.tsx +12 -15
  106. package/src/components/ColorModeToggle/index.ts +1 -1
  107. package/src/components/Countdown/Countdown.stories.tsx +6 -2
  108. package/src/components/Countdown/Countdown.tsx +56 -48
  109. package/src/components/Countdown/index.ts +1 -1
  110. package/src/components/Countdown/scripts/index.ts +33 -28
  111. package/src/components/DataTable/DataTable.stories.tsx +23 -18
  112. package/src/components/DataTable/DataTable.tsx +39 -39
  113. package/src/components/DataTable/index.ts +1 -1
  114. package/src/components/DataTable/scripts/bundle.ts +8 -3
  115. package/src/components/DataTable/scripts/index.ts +182 -164
  116. package/src/components/DatePicker/DatePicker.stories.tsx +136 -148
  117. package/src/components/DatePicker/DatePicker.tsx +461 -420
  118. package/src/components/DatePicker/scripts/bundle.ts +12 -7
  119. package/src/components/DatePicker/scripts/componentInteractions.ts +76 -46
  120. package/src/components/DatePicker/scripts/index.ts +176 -156
  121. package/src/components/DatePicker/types.ts +32 -32
  122. package/src/components/DatePicker/utils.ts +41 -30
  123. package/src/components/Dropdown/Dropdown.stories.tsx +85 -55
  124. package/src/components/Dropdown/Dropdown.tsx +97 -88
  125. package/src/components/Dropdown/index.ts +5 -10
  126. package/src/components/Dropdown/scripts/bundle.ts +10 -10
  127. package/src/components/Dropdown/scripts/componentInteractions.ts +10 -2
  128. package/src/components/Dropdown/scripts/index.ts +122 -117
  129. package/src/components/EdgePanel/EdgePanel.stories.tsx +142 -58
  130. package/src/components/EdgePanel/EdgePanel.tsx +7 -13
  131. package/src/components/EdgePanel/index.ts +1 -1
  132. package/src/components/EdgePanel/scripts/bundle.ts +5 -5
  133. package/src/components/EdgePanel/scripts/edgePanelInteractions.ts +26 -26
  134. package/src/components/EdgePanel/scripts/index.ts +53 -53
  135. package/src/components/Form/Checkbox.stories.tsx +2 -2
  136. package/src/components/Form/Checkbox.tsx +13 -7
  137. package/src/components/Form/Form.stories.tsx +144 -218
  138. package/src/components/Form/Form.tsx +6 -6
  139. package/src/components/Form/FormGroup.stories.tsx +21 -38
  140. package/src/components/Form/FormGroup.tsx +18 -20
  141. package/src/components/Form/Input.stories.tsx +1 -1
  142. package/src/components/Form/Input.tsx +18 -8
  143. package/src/components/Form/Radio.stories.tsx +12 -25
  144. package/src/components/Form/Radio.tsx +11 -6
  145. package/src/components/Form/Select.stories.tsx +6 -6
  146. package/src/components/Form/Select.tsx +31 -33
  147. package/src/components/Form/Textarea.stories.tsx +7 -2
  148. package/src/components/Form/Textarea.tsx +17 -8
  149. package/src/components/Form/index.ts +1 -1
  150. package/src/components/Hero/Hero.stories.tsx +44 -42
  151. package/src/components/Hero/Hero.tsx +28 -38
  152. package/src/components/Hero/index.ts +1 -1
  153. package/src/components/Hero/scripts/bundle.ts +6 -6
  154. package/src/components/Hero/scripts/heroInteractions.ts +24 -29
  155. package/src/components/Hero/scripts/index.ts +16 -17
  156. package/src/components/Icon/Icon.tsx +16 -18
  157. package/src/components/Icon/index.ts +1 -1
  158. package/src/components/List/List.stories.tsx +1 -3
  159. package/src/components/List/List.tsx +6 -10
  160. package/src/components/List/ListGroup.tsx +1 -1
  161. package/src/components/List/index.ts +1 -1
  162. package/src/components/Messages/Messages.stories.tsx +30 -29
  163. package/src/components/Messages/Messages.tsx +60 -55
  164. package/src/components/Messages/index.ts +1 -1
  165. package/src/components/Messages/scripts/bundle.ts +1 -6
  166. package/src/components/Messages/scripts/componentInteractions.ts +32 -37
  167. package/src/components/Messages/scripts/index.ts +61 -55
  168. package/src/components/Modal/Modal.stories.tsx +77 -53
  169. package/src/components/Modal/Modal.tsx +63 -62
  170. package/src/components/Modal/index.ts +1 -1
  171. package/src/components/Modal/scripts/bundle.ts +3 -3
  172. package/src/components/Modal/scripts/index.ts +96 -84
  173. package/src/components/Modal/scripts/modalInteractions.ts +16 -14
  174. package/src/components/{Navbar → Navigation/Menu}/MegaMenu.tsx +50 -59
  175. package/src/components/Navigation/Menu/Menu.stories.tsx +340 -0
  176. package/src/components/Navigation/Menu/Menu.tsx +110 -0
  177. package/src/components/Navigation/Nav/Nav.stories.tsx +458 -0
  178. package/src/components/Navigation/Nav/Nav.tsx +50 -0
  179. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  180. package/src/components/Navigation/Nav/NavItem.tsx +159 -0
  181. package/src/components/{Navbar → Navigation/Navbar}/Navbar.stories.tsx +198 -104
  182. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  183. package/src/components/Navigation/README.md +314 -0
  184. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  185. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +618 -0
  186. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  187. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +95 -0
  188. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  189. package/src/components/Navigation/index.ts +23 -0
  190. package/src/components/Navigation/scripts/NavbarInteractions.ts +171 -0
  191. package/src/components/Navigation/scripts/SideMenu.ts +319 -0
  192. package/src/components/Navigation/scripts/SideMenuBundle.ts +69 -0
  193. package/src/components/Navigation/scripts/SideMenuInteractions.ts +250 -0
  194. package/src/components/Navigation/scripts/bundle.ts +58 -0
  195. package/src/components/Navigation/scripts/index.ts +248 -0
  196. package/src/components/Pagination/Pagination.stories.tsx +34 -33
  197. package/src/components/Pagination/Pagination.tsx +25 -35
  198. package/src/components/Pagination/index.ts +1 -1
  199. package/src/components/Pagination/scripts/index.ts +42 -37
  200. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +48 -48
  201. package/src/components/PhotoViewer/PhotoViewer.tsx +29 -46
  202. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +20 -26
  203. package/src/components/PhotoViewer/PhotoViewerImage.tsx +19 -17
  204. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +13 -5
  205. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +5 -5
  206. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +31 -30
  207. package/src/components/PhotoViewer/examples/ImageGallery.tsx +27 -37
  208. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +19 -13
  209. package/src/components/PhotoViewer/examples/index.ts +1 -1
  210. package/src/components/PhotoViewer/index.ts +1 -1
  211. package/src/components/PhotoViewer/scripts/PhotoViewerInteractions.ts +43 -33
  212. package/src/components/PhotoViewer/scripts/bundle.ts +14 -14
  213. package/src/components/PhotoViewer/scripts/index.ts +173 -129
  214. package/src/components/Popover/Popover.stories.tsx +11 -12
  215. package/src/components/Popover/Popover.tsx +36 -36
  216. package/src/components/Popover/index.ts +1 -1
  217. package/src/components/Popover/scripts/bundle.ts +1 -1
  218. package/src/components/Popover/scripts/componentInteractions.ts +34 -46
  219. package/src/components/Popover/scripts/index.ts +64 -53
  220. package/src/components/ProductReview/ProductReview.stories.tsx +10 -8
  221. package/src/components/ProductReview/ProductReview.tsx +28 -32
  222. package/src/components/ProductReview/scripts/componentInteractions.ts +20 -20
  223. package/src/components/Progress/Progress.tsx +36 -34
  224. package/src/components/Progress/scripts/bundle.ts +7 -2
  225. package/src/components/Progress/scripts/componentInteractions.ts +29 -23
  226. package/src/components/Progress/scripts/index.ts +45 -39
  227. package/src/components/Rating/Rating.stories.tsx +3 -16
  228. package/src/components/Rating/Rating.tsx +250 -231
  229. package/src/components/Rating/scripts/bundle.ts +11 -6
  230. package/src/components/Rating/scripts/index.ts +85 -80
  231. package/src/components/Rating/scripts/ratingInteractions.ts +27 -24
  232. package/src/components/River/River.stories.tsx +70 -24
  233. package/src/components/River/River.tsx +28 -38
  234. package/src/components/River/index.ts +1 -1
  235. package/src/components/River/scripts/index.ts +11 -12
  236. package/src/components/SectionIntro/SectionIntro.stories.tsx +12 -9
  237. package/src/components/SectionIntro/SectionIntro.tsx +25 -31
  238. package/src/components/SectionIntro/scripts/componentInteractions.ts +1 -1
  239. package/src/components/SectionIntro/scripts/index.ts +30 -16
  240. package/src/components/Spinner/Spinner.stories.tsx +5 -7
  241. package/src/components/Spinner/Spinner.tsx +11 -6
  242. package/src/components/Spinner/index.ts +2 -2
  243. package/src/components/Steps/Steps.stories.tsx +44 -48
  244. package/src/components/Steps/Steps.tsx +20 -20
  245. package/src/components/Steps/index.ts +1 -1
  246. package/src/components/Steps/scripts/index.ts +9 -9
  247. package/src/components/Tab/Tab.stories.tsx +14 -6
  248. package/src/components/Tab/Tab.tsx +16 -18
  249. package/src/components/Tab/index.ts +2 -2
  250. package/src/components/Tab/scripts/index.ts +13 -13
  251. package/src/components/Testimonial/Testimonial.stories.tsx +54 -51
  252. package/src/components/Testimonial/Testimonial.tsx +18 -19
  253. package/src/components/Testimonial/index.ts +1 -1
  254. package/src/components/Testimonial/scripts/index.ts +19 -8
  255. package/src/components/Todo/Todo.stories.tsx +7 -24
  256. package/src/components/Todo/Todo.tsx +35 -46
  257. package/src/components/Todo/index.ts +1 -1
  258. package/src/components/Todo/scripts/bundle.ts +1 -1
  259. package/src/components/Todo/scripts/index.ts +99 -81
  260. package/src/components/Todo/scripts/todoInteractions.ts +12 -12
  261. package/src/components/Todo/scripts/types.ts +3 -3
  262. package/src/components/Toggle/Toggle.stories.tsx +2 -2
  263. package/src/components/Toggle/Toggle.tsx +18 -18
  264. package/src/components/Toggle/index.ts +2 -2
  265. package/src/components/Toggle/scripts/bundle.ts +7 -2
  266. package/src/components/Toggle/scripts/index.ts +14 -10
  267. package/src/components/Toggle/scripts/toggleInteractions.ts +11 -14
  268. package/src/components/Tooltip/Tooltip.stories.tsx +13 -6
  269. package/src/components/Tooltip/Tooltip.tsx +25 -15
  270. package/src/components/Tooltip/index.ts +3 -3
  271. package/src/components/Tooltip/scripts/bundle.ts +0 -1
  272. package/src/components/Tooltip/scripts/index.ts +44 -41
  273. package/src/components/Tooltip/scripts/tooltipInteractions.ts +22 -22
  274. package/src/components/Upload/Upload.stories.tsx +28 -34
  275. package/src/components/Upload/Upload.tsx +86 -71
  276. package/src/components/Upload/index.ts +1 -1
  277. package/src/components/Upload/scripts/index.ts +58 -43
  278. package/src/components/index.ts +5 -6
  279. package/src/design-tokens/BoxShadow/BoxShadow.stories.tsx +13 -10
  280. package/src/design-tokens/Colors/colors.scss +10 -7
  281. package/src/design-tokens/Colors/colors.stories.tsx +46 -59
  282. package/src/design-tokens/Spacing/Spacing.scss +7 -5
  283. package/src/design-tokens/Spacing/Spacing.stories.tsx +19 -18
  284. package/src/design-tokens/Typography/Typography.scss +88 -25
  285. package/src/design-tokens/Typography/Typography.stories.tsx +22 -25
  286. package/src/docs/implementation-guide.mdx +2 -2
  287. package/src/htmlComponentsEntry.ts +23 -23
  288. package/src/index.ts +1 -1
  289. package/src/layouts/Grid/Container.tsx +6 -10
  290. package/src/layouts/Grid/Grid.stories.tsx +72 -34
  291. package/src/layouts/Grid/Grid.tsx +6 -13
  292. package/src/layouts/Grid/GridCol.tsx +29 -26
  293. package/src/layouts/Grid/Row.tsx +6 -13
  294. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +79 -72
  295. package/src/layouts/MasonryGrid/MasonryGrid.tsx +23 -25
  296. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +4 -12
  297. package/src/layouts/index.ts +3 -4
  298. package/src/lib/composables/index.ts +3 -3
  299. package/src/lib/composables/useAccordion.ts +15 -6
  300. package/src/lib/composables/useBadge.ts +3 -3
  301. package/src/lib/composables/useBreadcrumb.ts +6 -12
  302. package/src/lib/composables/useButton.ts +3 -3
  303. package/src/lib/composables/useCallout.ts +3 -3
  304. package/src/lib/composables/useCard.ts +50 -28
  305. package/src/lib/composables/useCheckbox.ts +7 -7
  306. package/src/lib/composables/useDataTable.ts +61 -57
  307. package/src/lib/composables/useDatePicker.ts +255 -231
  308. package/src/lib/composables/useDropdown.ts +90 -75
  309. package/src/lib/composables/useEdgePanel.ts +50 -47
  310. package/src/lib/composables/useForm.ts +4 -7
  311. package/src/lib/composables/useFormGroup.ts +11 -12
  312. package/src/lib/composables/useHero.ts +36 -38
  313. package/src/lib/composables/useInput.ts +9 -10
  314. package/src/lib/composables/useMessages.ts +12 -14
  315. package/src/lib/composables/useModal.ts +37 -34
  316. package/src/lib/composables/useNavbar.ts +33 -22
  317. package/src/lib/composables/usePagination.ts +3 -10
  318. package/src/lib/composables/usePhotoViewer.ts +625 -578
  319. package/src/lib/composables/usePopover.ts +68 -62
  320. package/src/lib/composables/useProgress.ts +9 -12
  321. package/src/lib/composables/useRadio.ts +4 -4
  322. package/src/lib/composables/useRating.ts +82 -70
  323. package/src/lib/composables/useRiver.ts +28 -31
  324. package/src/lib/composables/useSelect.ts +7 -8
  325. package/src/lib/composables/useSideMenu.ts +197 -0
  326. package/src/lib/composables/useSpinner.ts +3 -3
  327. package/src/lib/composables/useTextarea.ts +8 -9
  328. package/src/lib/composables/useTodo.ts +14 -18
  329. package/src/lib/constants/components.ts +191 -118
  330. package/src/lib/constants/index.ts +1 -1
  331. package/src/lib/types/components.ts +454 -324
  332. package/src/lib/utils/dom.ts +2 -6
  333. package/src/lib/utils/icons.ts +20 -12
  334. package/src/lib/utils/index.ts +2 -2
  335. package/src/lib/utils/useForkRef.ts +1 -2
  336. package/src/styles/01-settings/_index.scss +59 -59
  337. package/src/styles/01-settings/_settings.accordion.scss +21 -21
  338. package/src/styles/01-settings/_settings.animations.scss +2 -2
  339. package/src/styles/01-settings/_settings.avatar-group.scss +14 -14
  340. package/src/styles/01-settings/_settings.avatar.scss +31 -31
  341. package/src/styles/01-settings/_settings.badge.scss +11 -11
  342. package/src/styles/01-settings/_settings.border-radius.scss +10 -9
  343. package/src/styles/01-settings/_settings.border.scss +7 -7
  344. package/src/styles/01-settings/_settings.box-shadow.scss +24 -12
  345. package/src/styles/01-settings/_settings.breadcrumb.scss +18 -18
  346. package/src/styles/01-settings/_settings.btn-group.scss +1 -1
  347. package/src/styles/01-settings/_settings.button.scss +63 -49
  348. package/src/styles/01-settings/_settings.callout.scss +27 -7
  349. package/src/styles/01-settings/_settings.card.scss +27 -30
  350. package/src/styles/01-settings/_settings.checkbox-group.scss +2 -3
  351. package/src/styles/01-settings/_settings.checkbox.scss +17 -18
  352. package/src/styles/01-settings/_settings.color-mode.scss +1 -1
  353. package/src/styles/01-settings/_settings.colors.scss +197 -214
  354. package/src/styles/01-settings/_settings.config.scss +1 -3
  355. package/src/styles/01-settings/_settings.countdown.scss +14 -14
  356. package/src/styles/01-settings/_settings.data-table.scss +6 -6
  357. package/src/styles/01-settings/_settings.datepicker.scss +40 -42
  358. package/src/styles/01-settings/_settings.dropdown.scss +30 -30
  359. package/src/styles/01-settings/_settings.edge-panel.scss +16 -16
  360. package/src/styles/01-settings/_settings.fonts.scss +14 -12
  361. package/src/styles/01-settings/_settings.form-group.scss +10 -10
  362. package/src/styles/01-settings/_settings.form.scss +3 -3
  363. package/src/styles/01-settings/_settings.grid.scss +1 -1
  364. package/src/styles/01-settings/_settings.hero.scss +23 -23
  365. package/src/styles/01-settings/_settings.input.scss +32 -32
  366. package/src/styles/01-settings/_settings.link.scss +6 -6
  367. package/src/styles/01-settings/_settings.list-group.scss +12 -12
  368. package/src/styles/01-settings/_settings.list.scss +2 -2
  369. package/src/styles/01-settings/_settings.maps.scss +183 -188
  370. package/src/styles/01-settings/_settings.masonry-grid.scss +2 -2
  371. package/src/styles/01-settings/_settings.menu.scss +35 -38
  372. package/src/styles/01-settings/_settings.messages.scss +71 -77
  373. package/src/styles/01-settings/_settings.modal.scss +24 -24
  374. package/src/styles/01-settings/_settings.nav.scss +15 -15
  375. package/src/styles/01-settings/_settings.navbar.scss +39 -12
  376. package/src/styles/01-settings/_settings.pagination.scss +21 -21
  377. package/src/styles/01-settings/_settings.photoviewer.scss +1 -1
  378. package/src/styles/01-settings/_settings.popover.scss +3 -3
  379. package/src/styles/01-settings/_settings.position.scss +2 -2
  380. package/src/styles/01-settings/_settings.progress.scss +15 -18
  381. package/src/styles/01-settings/_settings.rating.scss +7 -7
  382. package/src/styles/01-settings/_settings.river.scss +25 -25
  383. package/src/styles/01-settings/_settings.sectionintro.scss +15 -16
  384. package/src/styles/01-settings/_settings.select.scss +31 -31
  385. package/src/styles/01-settings/_settings.side-menu.scss +64 -16
  386. package/src/styles/01-settings/_settings.skeleton.scss +12 -12
  387. package/src/styles/01-settings/_settings.spacing.scss +62 -33
  388. package/src/styles/01-settings/_settings.spinner.scss +10 -10
  389. package/src/styles/01-settings/_settings.steps.scss +22 -22
  390. package/src/styles/01-settings/_settings.tabs.scss +25 -25
  391. package/src/styles/01-settings/_settings.testimonials.scss +17 -19
  392. package/src/styles/01-settings/_settings.todo.scss +1 -1
  393. package/src/styles/01-settings/_settings.toggle.scss +26 -26
  394. package/src/styles/01-settings/_settings.tooltip.scss +15 -15
  395. package/src/styles/01-settings/_settings.typography.scss +65 -48
  396. package/src/styles/01-settings/_settings.upload.scss +70 -77
  397. package/src/styles/01-settings/_settings.z-layers.scss +1 -1
  398. package/src/styles/02-tools/_index.scss +19 -19
  399. package/src/styles/02-tools/_tools.animations.scss +4 -4
  400. package/src/styles/02-tools/_tools.border-radius.scss +4 -5
  401. package/src/styles/02-tools/_tools.breakpoints.scss +33 -34
  402. package/src/styles/02-tools/_tools.button.scss +49 -25
  403. package/src/styles/02-tools/_tools.color-mode.scss +11 -11
  404. package/src/styles/02-tools/_tools.event.scss +1 -1
  405. package/src/styles/02-tools/_tools.hidden-visually.scss +1 -1
  406. package/src/styles/02-tools/_tools.hidden.scss +1 -1
  407. package/src/styles/02-tools/_tools.map-loop.scss +9 -9
  408. package/src/styles/02-tools/_tools.media-queries.scss +5 -3
  409. package/src/styles/02-tools/_tools.object-fit.scss +3 -3
  410. package/src/styles/02-tools/_tools.placeholder.scss +0 -1
  411. package/src/styles/02-tools/_tools.rem.scss +1 -1
  412. package/src/styles/02-tools/_tools.spacing.scss +8 -34
  413. package/src/styles/02-tools/_tools.to-rgb.scss +3 -3
  414. package/src/styles/02-tools/_tools.transition.scss +1 -1
  415. package/src/styles/02-tools/_tools.utility-api.scss +29 -14
  416. package/src/styles/03-generic/_generic.fonts.scss +0 -1
  417. package/src/styles/03-generic/_generic.reset.scss +13 -8
  418. package/src/styles/03-generic/_generic.root.scss +5 -5
  419. package/src/styles/03-generic/_index.scss +4 -4
  420. package/src/styles/04-elements/_elements.all.scss +2 -2
  421. package/src/styles/04-elements/_elements.body.scss +1 -2
  422. package/src/styles/04-elements/_elements.heading.scss +37 -21
  423. package/src/styles/04-elements/_elements.links.scss +0 -1
  424. package/src/styles/04-elements/_index.scss +5 -5
  425. package/src/styles/05-objects/_index.scss +3 -3
  426. package/src/styles/05-objects/_objects.container.scss +5 -4
  427. package/src/styles/05-objects/_objects.grid.scss +12 -12
  428. package/src/styles/05-objects/_objects.masonry-grid.scss +80 -74
  429. package/src/styles/06-components/_components.accordion.scss +12 -6
  430. package/src/styles/06-components/_components.avatar-group.scss +9 -8
  431. package/src/styles/06-components/_components.avatar.scss +78 -77
  432. package/src/styles/06-components/_components.badge.scss +48 -48
  433. package/src/styles/06-components/_components.breadcrumb.scss +57 -58
  434. package/src/styles/06-components/_components.btn-group.scss +22 -22
  435. package/src/styles/06-components/_components.button.scss +118 -110
  436. package/src/styles/06-components/_components.callout.scss +21 -15
  437. package/src/styles/06-components/_components.card.scss +6 -10
  438. package/src/styles/06-components/_components.checkbox-group.scss +9 -10
  439. package/src/styles/06-components/_components.checkbox.scss +10 -17
  440. package/src/styles/06-components/_components.color-mode-toggle.scss +6 -6
  441. package/src/styles/06-components/_components.countdown.scss +53 -54
  442. package/src/styles/06-components/_components.data-table.scss +40 -36
  443. package/src/styles/06-components/_components.datepicker.scss +95 -73
  444. package/src/styles/06-components/_components.dropdown.scss +15 -9
  445. package/src/styles/06-components/_components.edge-panel.scss +87 -46
  446. package/src/styles/06-components/_components.form-group.scss +5 -4
  447. package/src/styles/06-components/_components.hero.scss +128 -132
  448. package/src/styles/06-components/_components.icon.scss +16 -16
  449. package/src/styles/06-components/_components.image-gallery.scss +9 -7
  450. package/src/styles/06-components/_components.input.scss +18 -16
  451. package/src/styles/06-components/_components.list-group.scss +52 -51
  452. package/src/styles/06-components/_components.list.scss +15 -15
  453. package/src/styles/06-components/_components.menu.scss +225 -220
  454. package/src/styles/06-components/_components.messages.scss +45 -32
  455. package/src/styles/06-components/_components.modal.scss +0 -1
  456. package/src/styles/06-components/_components.nav.scss +56 -11
  457. package/src/styles/06-components/_components.navbar.scss +278 -202
  458. package/src/styles/06-components/_components.pagination.scss +7 -6
  459. package/src/styles/06-components/_components.photoviewer.scss +121 -116
  460. package/src/styles/06-components/_components.popover.scss +10 -10
  461. package/src/styles/06-components/_components.product-review.scss +3 -3
  462. package/src/styles/06-components/_components.progress.scss +32 -35
  463. package/src/styles/06-components/_components.rating.scss +9 -8
  464. package/src/styles/06-components/_components.river.scss +4 -2
  465. package/src/styles/06-components/_components.sectionintro.scss +19 -26
  466. package/src/styles/06-components/_components.select.scss +7 -8
  467. package/src/styles/06-components/_components.side-menu.scss +154 -28
  468. package/src/styles/06-components/_components.skeleton.scss +0 -1
  469. package/src/styles/06-components/_components.spinner.scss +2 -4
  470. package/src/styles/06-components/_components.steps.scss +76 -77
  471. package/src/styles/06-components/_components.tabs.scss +17 -12
  472. package/src/styles/06-components/_components.testimonials.scss +49 -52
  473. package/src/styles/06-components/_components.todo.scss +26 -26
  474. package/src/styles/06-components/_components.tooltip.scss +114 -115
  475. package/src/styles/06-components/_components.upload.scss +8 -18
  476. package/src/styles/06-components/_index.scss +48 -48
  477. package/src/styles/99-utilities/_index.scss +18 -18
  478. package/src/styles/99-utilities/_utilities.background.scss +13 -13
  479. package/src/styles/99-utilities/_utilities.border.scss +30 -30
  480. package/src/styles/99-utilities/_utilities.clearfix.scss +1 -1
  481. package/src/styles/99-utilities/_utilities.display.scss +5 -4
  482. package/src/styles/99-utilities/_utilities.flex.scss +19 -19
  483. package/src/styles/99-utilities/_utilities.link.scss +52 -35
  484. package/src/styles/99-utilities/_utilities.object-fit.scss +3 -3
  485. package/src/styles/99-utilities/_utilities.opacity.scss +6 -6
  486. package/src/styles/99-utilities/_utilities.overflow.scss +4 -4
  487. package/src/styles/99-utilities/_utilities.position.scss +8 -8
  488. package/src/styles/99-utilities/_utilities.shadow.scss +13 -13
  489. package/src/styles/99-utilities/_utilities.sizes.scss +17 -17
  490. package/src/styles/99-utilities/_utilities.spacing.scss +72 -37
  491. package/src/styles/99-utilities/_utilities.text.scss +15 -15
  492. package/src/styles/99-utilities/_utilities.visibility.scss +8 -8
  493. package/src/styles/99-utilities/_utilities.visually-hidden.scss +1 -1
  494. package/src/styles/99-utilities/_utilities.z-index.scss +2 -2
  495. package/tsconfig.json +74 -0
  496. package/webpack.config.js +463 -0
  497. package/NPM_PUBLISHING.md +0 -221
  498. package/dist/css/atomix.css.map +0 -1
  499. package/dist/js/194.js.map +0 -1
  500. package/dist/js/atomix.react.esm.js.map +0 -1
  501. package/dist/js/atomix.react.umd.js.map +0 -1
  502. package/dist/js/chunks/esm/202.ff48d27672233280e021.js.map +0 -1
  503. package/dist/js/chunks/esm/308.f873332126eba90e5c62.js.map +0 -1
  504. package/dist/js/chunks/esm/54.4db919e5e4e5cc6d7c72.js.map +0 -1
  505. package/dist/js/chunks/esm/619.afc5a718eff77fa423b5.js.map +0 -1
  506. package/dist/js/chunks/esm/690.a9e968c7497d61e56cdc.js.map +0 -1
  507. package/dist/js/chunks/esm/894.f1091a4a8758c26d29e4.js.map +0 -1
  508. package/dist/js/chunks/esm/897.561a50f7d043d42169da.js.map +0 -1
  509. package/dist/js/chunks/umd/202.dac7605cc555b6bda542.js.map +0 -1
  510. package/dist/js/chunks/umd/308.6709979849dcbdb90c9b.js.map +0 -1
  511. package/dist/js/chunks/umd/54.403470e1f7d0ef4424a7.js.map +0 -1
  512. package/dist/js/chunks/umd/619.fa05ea98c10270eb64c5.js.map +0 -1
  513. package/dist/js/chunks/umd/690.aa7054d1c53e5402c2d6.js.map +0 -1
  514. package/dist/js/chunks/umd/894.3e1eaf0a2aadf4434390.js.map +0 -1
  515. package/dist/js/chunks/umd/897.554ea37be4453698c167.js.map +0 -1
  516. package/dist/types/components/Navbar/Nav.d.ts +0 -5
  517. package/dist/types/components/Navbar/NavItem.d.ts +0 -5
  518. package/dist/types/components/Navbar/Navbar.d.ts +0 -5
  519. package/dist/types/components/Navbar/index.d.ts +0 -6
  520. package/src/components/Navbar/Menu.tsx +0 -122
  521. package/src/components/Navbar/Nav.tsx +0 -35
  522. package/src/components/Navbar/NavDropdown.tsx +0 -108
  523. package/src/components/Navbar/NavItem.tsx +0 -128
  524. package/src/components/Navbar/Navbar.tsx +0 -124
  525. package/src/components/Navbar/index.ts +0 -6
@@ -9,7 +9,7 @@ function useModal({
9
9
  isOpen: isOpenProp,
10
10
  onOpenChange,
11
11
  onOpen,
12
- onClose
12
+ onClose,
13
13
  }: {
14
14
  isOpen?: boolean;
15
15
  onOpenChange?: (isOpen: boolean) => void;
@@ -18,54 +18,57 @@ function useModal({
18
18
  } = {}) {
19
19
  // For uncontrolled usage
20
20
  const [isOpenState, setIsOpenState] = useState(false);
21
-
21
+
22
22
  // Determine if we're in controlled or uncontrolled mode
23
23
  const isControlled = isOpenProp !== undefined;
24
24
  const isOpen = isControlled ? !!isOpenProp : isOpenState;
25
-
25
+
26
26
  // Update internal state when prop changes (for controlled mode)
27
27
  useEffect(() => {
28
28
  if (isControlled) {
29
29
  setIsOpenState(!!isOpenProp);
30
30
  }
31
31
  }, [isOpenProp, isControlled]);
32
-
33
- const updateOpen = useCallback((nextIsOpen: boolean) => {
34
- // For uncontrolled mode, update internal state
35
- if (!isControlled) {
36
- setIsOpenState(nextIsOpen);
37
- }
38
-
39
- // Call the change handler in either mode
40
- if (onOpenChange) {
41
- onOpenChange(nextIsOpen);
42
- }
43
-
44
- // Call the specific handler
45
- if (nextIsOpen && onOpen) {
46
- onOpen();
47
- } else if (!nextIsOpen && onClose) {
48
- onClose();
49
- }
50
- }, [isControlled, onOpenChange, onOpen, onClose]);
51
-
32
+
33
+ const updateOpen = useCallback(
34
+ (nextIsOpen: boolean) => {
35
+ // For uncontrolled mode, update internal state
36
+ if (!isControlled) {
37
+ setIsOpenState(nextIsOpen);
38
+ }
39
+
40
+ // Call the change handler in either mode
41
+ if (onOpenChange) {
42
+ onOpenChange(nextIsOpen);
43
+ }
44
+
45
+ // Call the specific handler
46
+ if (nextIsOpen && onOpen) {
47
+ onOpen();
48
+ } else if (!nextIsOpen && onClose) {
49
+ onClose();
50
+ }
51
+ },
52
+ [isControlled, onOpenChange, onOpen, onClose]
53
+ );
54
+
52
55
  const open = useCallback(() => {
53
56
  updateOpen(true);
54
57
  }, [updateOpen]);
55
-
58
+
56
59
  const close = useCallback(() => {
57
60
  updateOpen(false);
58
61
  }, [updateOpen]);
59
-
62
+
60
63
  const toggle = useCallback(() => {
61
64
  updateOpen(!isOpen);
62
65
  }, [isOpen, updateOpen]);
63
-
66
+
64
67
  return {
65
68
  isOpen,
66
69
  open,
67
70
  close,
68
- toggle
71
+ toggle,
69
72
  };
70
73
  }
71
74
 
@@ -91,51 +94,53 @@ export const Modal: React.FC<ModalProps> = ({
91
94
  const modalRef = useRef<HTMLDivElement>(null);
92
95
  const dialogRef = useRef<HTMLDivElement>(null);
93
96
  const backdropRef = useRef<HTMLDivElement>(null);
94
-
97
+
95
98
  const {
96
99
  isOpen: isOpenState,
97
100
  open,
98
- close
101
+ close,
99
102
  } = useModal({
100
103
  isOpen,
101
104
  onOpenChange,
102
105
  onClose,
103
- onOpen
106
+ onOpen,
104
107
  });
105
108
 
106
109
  // Handle keyboard events for Escape key
107
110
  useEffect(() => {
108
111
  if (!keyboard) return undefined;
109
-
112
+
110
113
  const handleKeydown = (event: KeyboardEvent) => {
111
114
  if (event.key === 'Escape' && isOpenState) {
112
115
  close();
113
116
  }
114
117
  };
115
-
118
+
116
119
  document.addEventListener('keydown', handleKeydown);
117
120
  return () => {
118
121
  document.removeEventListener('keydown', handleKeydown);
119
122
  };
120
123
  }, [isOpenState, close, keyboard]);
121
-
124
+
122
125
  // Handle backdrop click
123
126
  const handleBackdropClick = (event: React.MouseEvent<HTMLDivElement>) => {
124
127
  if (backdrop && event.target === event.currentTarget) {
125
128
  close();
126
129
  }
127
130
  };
128
-
131
+
129
132
  // Assemble classes
130
133
  const modalClasses = [
131
134
  'c-modal',
132
135
  isOpenState ? MODAL.CLASSES.IS_OPEN : '',
133
136
  size ? `c-modal--${size}` : '',
134
- className
135
- ].filter(Boolean).join(' ');
136
-
137
+ className,
138
+ ]
139
+ .filter(Boolean)
140
+ .join(' ');
141
+
137
142
  return (
138
- <div
143
+ <div
139
144
  ref={modalRef}
140
145
  className={modalClasses}
141
146
  style={{ display: isOpenState ? 'block' : 'none' }}
@@ -144,15 +149,8 @@ export const Modal: React.FC<ModalProps> = ({
144
149
  aria-hidden={!isOpenState}
145
150
  {...props}
146
151
  >
147
- <div
148
- ref={backdropRef}
149
- className="c-modal__backdrop"
150
- onClick={handleBackdropClick}
151
- />
152
- <div
153
- ref={dialogRef}
154
- className="c-modal__dialog"
155
- >
152
+ <div ref={backdropRef} className="c-modal__backdrop" onClick={handleBackdropClick} />
153
+ <div ref={dialogRef} className="c-modal__dialog">
156
154
  <div className="c-modal__content">
157
155
  {(title || closeButton) && (
158
156
  <div className="c-modal__header">
@@ -161,29 +159,32 @@ export const Modal: React.FC<ModalProps> = ({
161
159
  {subtitle && <p className="c-modal__sub">{subtitle}</p>}
162
160
  </div>
163
161
  {closeButton && (
164
- <button
165
- type="button"
166
- className="c-modal__close c-btn js-modal-close"
162
+ <button
163
+ type="button"
164
+ className="c-modal__close c-btn js-modal-close"
167
165
  onClick={close}
168
166
  aria-label="Close modal"
169
167
  >
170
- <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
171
- <path d="M16.0672 15.1828C16.1253 15.2409 16.1713 15.3098 16.2028 15.3857C16.2342 15.4615 16.2504 15.5429 16.2504 15.625C16.2504 15.7071 16.2342 15.7884 16.2028 15.8643C16.1713 15.9402 16.1253 16.0091 16.0672 16.0672C16.0091 16.1252 15.9402 16.1713 15.8643 16.2027C15.7885 16.2342 15.7071 16.2503 15.625 16.2503C15.5429 16.2503 15.4616 16.2342 15.3857 16.2027C15.3098 16.1713 15.2409 16.1252 15.1828 16.0672L10 10.8836L4.8172 16.0672C4.69992 16.1844 4.54086 16.2503 4.37501 16.2503C4.20916 16.2503 4.0501 16.1844 3.93282 16.0672C3.81555 15.9499 3.74966 15.7908 3.74966 15.625C3.74966 15.4591 3.81555 15.3001 3.93282 15.1828L9.11642 9.99998L3.93282 4.81717C3.81555 4.69989 3.74966 4.54083 3.74966 4.37498C3.74966 4.20913 3.81555 4.05007 3.93282 3.93279C4.0501 3.81552 4.20916 3.74963 4.37501 3.74963C4.54086 3.74963 4.69992 3.81552 4.8172 3.93279L10 9.11639L15.1828 3.93279C15.3001 3.81552 15.4592 3.74963 15.625 3.74963C15.7909 3.74963 15.9499 3.81552 16.0672 3.93279C16.1845 4.05007 16.2504 4.20913 16.2504 4.37498C16.2504 4.54083 16.1845 4.69989 16.0672 4.81717L10.8836 9.99998L16.0672 15.1828Z" fill="#141414"/>
168
+ <svg
169
+ width="20"
170
+ height="20"
171
+ viewBox="0 0 20 20"
172
+ fill="none"
173
+ xmlns="http://www.w3.org/2000/svg"
174
+ >
175
+ <path
176
+ d="M16.0672 15.1828C16.1253 15.2409 16.1713 15.3098 16.2028 15.3857C16.2342 15.4615 16.2504 15.5429 16.2504 15.625C16.2504 15.7071 16.2342 15.7884 16.2028 15.8643C16.1713 15.9402 16.1253 16.0091 16.0672 16.0672C16.0091 16.1252 15.9402 16.1713 15.8643 16.2027C15.7885 16.2342 15.7071 16.2503 15.625 16.2503C15.5429 16.2503 15.4616 16.2342 15.3857 16.2027C15.3098 16.1713 15.2409 16.1252 15.1828 16.0672L10 10.8836L4.8172 16.0672C4.69992 16.1844 4.54086 16.2503 4.37501 16.2503C4.20916 16.2503 4.0501 16.1844 3.93282 16.0672C3.81555 15.9499 3.74966 15.7908 3.74966 15.625C3.74966 15.4591 3.81555 15.3001 3.93282 15.1828L9.11642 9.99998L3.93282 4.81717C3.81555 4.69989 3.74966 4.54083 3.74966 4.37498C3.74966 4.20913 3.81555 4.05007 3.93282 3.93279C4.0501 3.81552 4.20916 3.74963 4.37501 3.74963C4.54086 3.74963 4.69992 3.81552 4.8172 3.93279L10 9.11639L15.1828 3.93279C15.3001 3.81552 15.4592 3.74963 15.625 3.74963C15.7909 3.74963 15.9499 3.81552 16.0672 3.93279C16.1845 4.05007 16.2504 4.20913 16.2504 4.37498C16.2504 4.54083 16.1845 4.69989 16.0672 4.81717L10.8836 9.99998L16.0672 15.1828Z"
177
+ fill="#141414"
178
+ />
172
179
  </svg>
173
180
  </button>
174
181
  )}
175
182
  </div>
176
183
  )}
177
-
178
- <div className="c-modal__body">
179
- {children}
180
- </div>
181
-
182
- {footer && (
183
- <div className="c-modal__footer">
184
- {footer}
185
- </div>
186
- )}
184
+
185
+ <div className="c-modal__body">{children}</div>
186
+
187
+ {footer && <div className="c-modal__footer">{footer}</div>}
187
188
  </div>
188
189
  </div>
189
190
  </div>
@@ -1 +1 @@
1
- export { default } from './Modal';
1
+ export { default } from './Modal';
@@ -10,8 +10,8 @@ if (typeof window !== 'undefined') {
10
10
  (window as any).Atomix.initializeModals = initializeModals;
11
11
  (window as any).Atomix.getModalInstance = getModalInstance;
12
12
  (window as any).Atomix.setupModalEventDelegation = setupModalEventDelegation;
13
-
14
- // Auto-initialize on DOMContentLoaded
13
+
14
+ // Auto-initialize on DOMContentLoaded
15
15
  document.addEventListener('DOMContentLoaded', () => {
16
16
  if ((window as any).Atomix.autoInitModals !== false) {
17
17
  initializeModals();
@@ -20,4 +20,4 @@ if (typeof window !== 'undefined') {
20
20
  });
21
21
  }
22
22
 
23
- export { Modal, initializeModals, getModalInstance, setupModalEventDelegation };
23
+ export { Modal, initializeModals, getModalInstance, setupModalEventDelegation };
@@ -1,8 +1,8 @@
1
1
  // Modal component implementation based on the old JS code
2
2
  import { MODAL } from '../../../lib/constants/components';
3
- import {
4
- handleModalCloseClick,
5
- handleModalKeydown,
3
+ import {
4
+ handleModalCloseClick,
5
+ handleModalKeydown,
6
6
  handleBackdropClick,
7
7
  } from './modalInteractions';
8
8
 
@@ -43,28 +43,36 @@ class Modal {
43
43
  this.selector = selector;
44
44
  this.$element =
45
45
  typeof selector === 'string'
46
- ? document.querySelector(selector as string) as HTMLElement
46
+ ? (document.querySelector(selector as string) as HTMLElement)
47
47
  : selector;
48
-
48
+
49
49
  if (!this.$element) {
50
50
  throw new Error(`Modal element not found: ${selector}`);
51
51
  }
52
-
52
+
53
53
  // Merge default options with user options and data attributes
54
54
  this.options = this._mergeOptions(options);
55
-
55
+
56
56
  // Initialize elements
57
- this.$closeButtons = this.$element.querySelectorAll(this.options.closeSelector || MODAL.SELECTORS.CLOSE_BUTTONS);
58
- this.$backdrop = this.$element.querySelector(this.options.backdropSelector || MODAL.SELECTORS.BACKDROP);
59
- this.$dialog = this.$element.querySelector(this.options.dialogSelector || MODAL.SELECTORS.DIALOG);
60
- this.$openButtons = document.querySelectorAll(this.options.openSelector || MODAL.SELECTORS.OPEN_BUTTON);
61
-
57
+ this.$closeButtons = this.$element.querySelectorAll(
58
+ this.options.closeSelector || MODAL.SELECTORS.CLOSE_BUTTONS
59
+ );
60
+ this.$backdrop = this.$element.querySelector(
61
+ this.options.backdropSelector || MODAL.SELECTORS.BACKDROP
62
+ );
63
+ this.$dialog = this.$element.querySelector(
64
+ this.options.dialogSelector || MODAL.SELECTORS.DIALOG
65
+ );
66
+ this.$openButtons = document.querySelectorAll(
67
+ this.options.openSelector || MODAL.SELECTORS.OPEN_BUTTON
68
+ );
69
+
62
70
  // Initialize the modal
63
71
  this._initialize();
64
-
72
+
65
73
  // Store reference to this instance on the element
66
74
  (this.$element as any).modalInstance = this;
67
-
75
+
68
76
  return this;
69
77
  }
70
78
 
@@ -73,35 +81,35 @@ class Modal {
73
81
  */
74
82
  private _mergeOptions(options: ModalOptions): ModalOptions {
75
83
  const dataOptions: ModalOptions = {};
76
-
84
+
77
85
  // Extract options from data attributes
78
86
  if (this.$element) {
79
87
  if (this.$element.dataset.backdrop !== undefined) {
80
88
  dataOptions.backdrop = this.$element.dataset.backdrop === 'true';
81
89
  }
82
-
90
+
83
91
  if (this.$element.dataset.keyboard !== undefined) {
84
92
  dataOptions.keyboard = this.$element.dataset.keyboard === 'true';
85
93
  }
86
-
94
+
87
95
  if (this.$element.dataset.size) {
88
96
  dataOptions.size = this.$element.dataset.size as 'sm' | 'md' | 'lg' | 'xl';
89
97
  }
90
-
98
+
91
99
  if (this.$element.dataset.openSelector) {
92
100
  dataOptions.openSelector = this.$element.dataset.openSelector;
93
101
  }
94
-
102
+
95
103
  if (this.$element.dataset.closeSelector) {
96
104
  dataOptions.closeSelector = this.$element.dataset.closeSelector;
97
105
  }
98
106
  }
99
-
107
+
100
108
  // Merge defaults with passed options and data attributes
101
- return {
102
- ...MODAL.DEFAULT_OPTIONS,
109
+ return {
110
+ ...MODAL.DEFAULT_OPTIONS,
103
111
  ...options,
104
- ...dataOptions
112
+ ...dataOptions,
105
113
  };
106
114
  }
107
115
 
@@ -113,13 +121,13 @@ class Modal {
113
121
  if (this.options.size) {
114
122
  this.$element.classList.add(`c-modal--${this.options.size}`);
115
123
  }
116
-
124
+
117
125
  // Check initial state
118
126
  this.isOpen = this.$element.classList.contains(MODAL.CLASSES.IS_OPEN);
119
-
127
+
120
128
  // Bind events
121
129
  this._bindEvents();
122
-
130
+
123
131
  // Initialize targets if modal has ID
124
132
  if (this.$element.id) {
125
133
  this._setupTargetButtons();
@@ -134,23 +142,23 @@ class Modal {
134
142
  this.$closeButtons.forEach(button => {
135
143
  button.addEventListener('click', this.close.bind(this));
136
144
  });
137
-
145
+
138
146
  this.$openButtons.forEach(button => {
139
147
  button.addEventListener('click', this.open.bind(this));
140
148
  });
141
-
149
+
142
150
  // Backdrop click
143
151
  if (this.options.backdrop && this.$backdrop) {
144
- this.$backdrop.addEventListener('click', (e) => {
152
+ this.$backdrop.addEventListener('click', e => {
145
153
  if (e.target === this.$backdrop) {
146
154
  this.close();
147
155
  }
148
156
  });
149
157
  }
150
-
158
+
151
159
  // Keyboard events
152
160
  if (this.options.keyboard) {
153
- this._keydownHandler = (e) => {
161
+ this._keydownHandler = e => {
154
162
  if (e.key === 'Escape' && this.isOpen) {
155
163
  this.close();
156
164
  }
@@ -158,95 +166,99 @@ class Modal {
158
166
  document.addEventListener('keydown', this._keydownHandler);
159
167
  }
160
168
  }
161
-
169
+
162
170
  /**
163
171
  * Set up buttons that target this modal using data-target attribute
164
172
  */
165
173
  private _setupTargetButtons(): void {
166
174
  if (!this.$element.id) return;
167
-
175
+
168
176
  const targetSelector = `[data-target="#${this.$element.id}"]`;
169
177
  const targetButtons = document.querySelectorAll(targetSelector);
170
-
178
+
171
179
  targetButtons.forEach(button => {
172
- button.addEventListener('click', (e) => {
180
+ button.addEventListener('click', e => {
173
181
  e.preventDefault();
174
182
  this.open();
175
183
  });
176
184
  });
177
185
  }
178
-
186
+
179
187
  /**
180
188
  * Open the modal
181
189
  */
182
190
  open(): void {
183
191
  if (this.isOpen) return;
184
-
192
+
185
193
  // Display the modal
186
194
  this.$element.style.display = 'block';
187
-
195
+
188
196
  // Use requestAnimationFrame for smooth animation
189
197
  requestAnimationFrame(() => {
190
198
  this.$element.classList.add(MODAL.CLASSES.IS_OPEN);
191
199
  this.isOpen = true;
192
-
200
+
193
201
  // Focus the first focusable element inside modal
194
202
  this._trapFocus();
195
-
203
+
196
204
  // Call the onOpen callback if provided
197
205
  if (typeof this.options.onOpen === 'function') {
198
206
  this.options.onOpen();
199
207
  }
200
-
208
+
201
209
  // Call the onToggle callback if provided
202
210
  if (typeof this.options.onToggle === 'function') {
203
211
  this.options.onToggle(true);
204
212
  }
205
-
213
+
206
214
  // Dispatch custom event
207
- this.$element.dispatchEvent(new CustomEvent('modal:open', {
208
- bubbles: true,
209
- detail: { instance: this }
210
- }));
215
+ this.$element.dispatchEvent(
216
+ new CustomEvent('modal:open', {
217
+ bubbles: true,
218
+ detail: { instance: this },
219
+ })
220
+ );
211
221
  });
212
222
  }
213
-
223
+
214
224
  /**
215
225
  * Close the modal
216
226
  */
217
227
  close(): void {
218
228
  if (!this.isOpen) return;
219
-
229
+
220
230
  this.$element.classList.remove(MODAL.CLASSES.IS_OPEN);
221
231
  this.isOpen = false;
222
-
232
+
223
233
  // Call the onClose callback if provided
224
234
  if (typeof this.options.onClose === 'function') {
225
235
  this.options.onClose();
226
236
  }
227
-
237
+
228
238
  // Call the onToggle callback if provided
229
239
  if (typeof this.options.onToggle === 'function') {
230
240
  this.options.onToggle(false);
231
241
  }
232
-
242
+
233
243
  // Dispatch custom event
234
- this.$element.dispatchEvent(new CustomEvent('modal:close', {
235
- bubbles: true,
236
- detail: { instance: this }
237
- }));
238
-
244
+ this.$element.dispatchEvent(
245
+ new CustomEvent('modal:close', {
246
+ bubbles: true,
247
+ detail: { instance: this },
248
+ })
249
+ );
250
+
239
251
  // Wait for animation to complete before hiding
240
252
  const onTransitionEnd = () => {
241
253
  if (!this.isOpen) {
242
254
  this.$element.style.display = 'none';
243
255
  }
244
-
256
+
245
257
  if (this.$backdrop) {
246
258
  this.$backdrop.removeEventListener('transitionend', onTransitionEnd);
247
259
  }
248
260
  };
249
-
261
+
250
262
  if (this.$backdrop) {
251
263
  this.$backdrop.addEventListener('transitionend', onTransitionEnd);
252
264
  } else {
@@ -254,7 +266,7 @@ class Modal {
254
266
  setTimeout(onTransitionEnd, 300);
255
267
  }
256
268
  }
257
-
269
+
258
270
  /**
259
271
  * Toggle the modal's open/closed state
260
272
  */
@@ -265,23 +277,23 @@ class Modal {
265
277
  this.open();
266
278
  }
267
279
  }
268
-
280
+
269
281
  /**
270
282
  * Focus trap for accessibility
271
283
  */
272
284
  private _trapFocus(): void {
273
285
  if (!this.$dialog) return;
274
-
286
+
275
287
  // Find the first focusable element
276
288
  const focusableElements = this.$dialog.querySelectorAll(
277
289
  'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
278
290
  );
279
-
291
+
280
292
  if (focusableElements.length > 0) {
281
293
  (focusableElements[0] as HTMLElement).focus();
282
294
  }
283
295
  }
284
-
296
+
285
297
  /**
286
298
  * Destroy the modal instance and remove event listeners
287
299
  */
@@ -290,27 +302,29 @@ class Modal {
290
302
  this.$closeButtons.forEach(button => {
291
303
  button.removeEventListener('click', this.close);
292
304
  });
293
-
305
+
294
306
  this.$openButtons.forEach(button => {
295
307
  button.removeEventListener('click', this.open);
296
308
  });
297
-
309
+
298
310
  if (this.$backdrop) {
299
311
  this.$backdrop.removeEventListener('click', this.close);
300
312
  }
301
-
313
+
302
314
  if (this._keydownHandler) {
303
315
  document.removeEventListener('keydown', this._keydownHandler);
304
316
  }
305
-
317
+
306
318
  // Remove data-modal reference
307
319
  delete (this.$element as any).modalInstance;
308
-
320
+
309
321
  // Dispatch destroy event
310
- this.$element.dispatchEvent(new CustomEvent('modal:destroy', {
311
- bubbles: true,
312
- detail: { instance: this }
313
- }));
322
+ this.$element.dispatchEvent(
323
+ new CustomEvent('modal:destroy', {
324
+ bubbles: true,
325
+ detail: { instance: this },
326
+ })
327
+ );
314
328
  }
315
329
  }
316
330
 
@@ -321,18 +335,18 @@ class Modal {
321
335
  * @returns Array of initialized Modal instances
322
336
  */
323
337
  export function initializeModals(
324
- selector = MODAL.SELECTORS.MODAL,
338
+ selector = MODAL.SELECTORS.MODAL,
325
339
  options: ModalOptions = {}
326
340
  ): Modal[] {
327
341
  const instances: Modal[] = [];
328
342
  const elements = document.querySelectorAll(selector);
329
-
343
+
330
344
  if (!elements.length) return instances;
331
-
345
+
332
346
  elements.forEach(element => {
333
347
  // Skip if already initialized
334
348
  if ((element as any).modalInstance) return;
335
-
349
+
336
350
  try {
337
351
  const instance = new Modal(element as HTMLElement, options);
338
352
  instances.push(instance);
@@ -340,23 +354,21 @@ export function initializeModals(
340
354
  console.error('Failed to initialize modal:', error);
341
355
  }
342
356
  });
343
-
357
+
344
358
  return instances;
345
359
  }
346
360
 
347
361
  /**
348
362
  * Get a modal instance from an element
349
- * @param element - Modal element or selector
363
+ * @param element - Modal element or selector
350
364
  * @returns Modal instance or null
351
365
  */
352
366
  export function getModalInstance(element: string | HTMLElement): Modal | null {
353
- const el = typeof element === 'string'
354
- ? document.querySelector(element)
355
- : element;
356
-
367
+ const el = typeof element === 'string' ? document.querySelector(element) : element;
368
+
357
369
  if (!el) return null;
358
-
370
+
359
371
  return (el as any).modalInstance || null;
360
372
  }
361
373
 
362
- export default Modal;
374
+ export default Modal;