@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
@@ -14,21 +14,21 @@ export function calculateBestPosition(
14
14
  preferredPosition: string = 'top'
15
15
  ): string {
16
16
  if (!triggerElement || !tooltipElement) return preferredPosition;
17
-
17
+
18
18
  // Get element dimensions and positions
19
19
  const triggerRect = triggerElement.getBoundingClientRect();
20
20
  const tooltipRect = tooltipElement.getBoundingClientRect();
21
-
21
+
22
22
  // Get viewport dimensions
23
23
  const viewportHeight = window.innerHeight;
24
24
  const viewportWidth = window.innerWidth;
25
-
25
+
26
26
  // Calculate available space in each direction
27
27
  const spaceAbove = triggerRect.top;
28
28
  const spaceBelow = viewportHeight - triggerRect.bottom;
29
29
  const spaceLeft = triggerRect.left;
30
30
  const spaceRight = viewportWidth - triggerRect.right;
31
-
31
+
32
32
  // Check if preferred position has enough space
33
33
  switch (preferredPosition) {
34
34
  case 'top':
@@ -46,18 +46,18 @@ export function calculateBestPosition(
46
46
  default:
47
47
  break;
48
48
  }
49
-
49
+
50
50
  // Find the best alternative position
51
51
  const spaces = [
52
52
  { position: 'top', space: spaceAbove },
53
53
  { position: 'bottom', space: spaceBelow },
54
54
  { position: 'left', space: spaceLeft },
55
- { position: 'right', space: spaceRight }
55
+ { position: 'right', space: spaceRight },
56
56
  ];
57
-
57
+
58
58
  // Sort by available space (descending)
59
59
  spaces.sort((a, b) => b.space - a.space);
60
-
60
+
61
61
  // Return the position with the most space
62
62
  return spaces[0].position;
63
63
  }
@@ -76,30 +76,30 @@ export function positionTooltip(
76
76
  offset: number = 8
77
77
  ): void {
78
78
  if (!tooltipElement || !triggerElement) return;
79
-
79
+
80
80
  // Get element dimensions
81
81
  const triggerRect = triggerElement.getBoundingClientRect();
82
82
  const tooltipRect = tooltipElement.getBoundingClientRect();
83
-
83
+
84
84
  // Calculate position based on the trigger and tooltip dimensions
85
85
  let top = 0;
86
86
  let left = 0;
87
-
87
+
88
88
  switch (position) {
89
89
  case 'top':
90
90
  top = triggerRect.top - tooltipRect.height - offset;
91
- left = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2);
91
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;
92
92
  break;
93
93
  case 'bottom':
94
94
  top = triggerRect.bottom + offset;
95
- left = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2);
95
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;
96
96
  break;
97
97
  case 'left':
98
- top = triggerRect.top + (triggerRect.height / 2) - (tooltipRect.height / 2);
98
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;
99
99
  left = triggerRect.left - tooltipRect.width - offset;
100
100
  break;
101
101
  case 'right':
102
- top = triggerRect.top + (triggerRect.height / 2) - (tooltipRect.height / 2);
102
+ top = triggerRect.top + triggerRect.height / 2 - tooltipRect.height / 2;
103
103
  left = triggerRect.right + offset;
104
104
  break;
105
105
  case 'top-left':
@@ -121,9 +121,9 @@ export function positionTooltip(
121
121
  default:
122
122
  // Default to top
123
123
  top = triggerRect.top - tooltipRect.height - offset;
124
- left = triggerRect.left + (triggerRect.width / 2) - (tooltipRect.width / 2);
124
+ left = triggerRect.left + triggerRect.width / 2 - tooltipRect.width / 2;
125
125
  }
126
-
126
+
127
127
  // Apply position
128
128
  tooltipElement.style.top = `${top}px`;
129
129
  tooltipElement.style.left = `${left}px`;
@@ -139,12 +139,12 @@ export function initializeTooltipsWithCustomBehavior(
139
139
  options = {}
140
140
  ): Tooltip[] {
141
141
  const tooltips = Tooltip.initializeAll(selector, options);
142
-
142
+
143
143
  // Apply smart positioning to each tooltip
144
144
  tooltips.forEach((tooltip: Tooltip) => {
145
145
  const triggerElement = tooltip.getTriggerElement();
146
146
  const tooltipElement = tooltip.getElement();
147
-
147
+
148
148
  if (triggerElement && tooltipElement) {
149
149
  // Update position on window resize
150
150
  window.addEventListener('resize', () => {
@@ -154,12 +154,12 @@ export function initializeTooltipsWithCustomBehavior(
154
154
  tooltipElement,
155
155
  tooltip.getPosition()
156
156
  );
157
-
157
+
158
158
  tooltip.setPosition(bestPosition);
159
159
  }
160
160
  });
161
161
  }
162
162
  });
163
-
163
+
164
164
  return tooltips;
165
- }
165
+ }
@@ -30,7 +30,7 @@ export default {
30
30
  },
31
31
  } as Meta<typeof Upload>;
32
32
 
33
- const Template: StoryFn<typeof Upload> = (args) => (
33
+ const Template: StoryFn<typeof Upload> = args => (
34
34
  <div style={{ padding: '30px', maxWidth: '600px' }}>
35
35
  <Upload {...args} />
36
36
  </div>
@@ -54,66 +54,59 @@ Disabled.args = {
54
54
 
55
55
  // Manual state controls
56
56
  const WithStateControls: React.FC = () => {
57
- const [currentState, setCurrentState] = useState<'default' | 'uploading' | 'success' | 'error'>('default');
57
+ const [currentState, setCurrentState] = useState<'default' | 'uploading' | 'success' | 'error'>(
58
+ 'default'
59
+ );
58
60
  const [progress, setProgress] = useState(75);
59
-
61
+
60
62
  const resetState = () => {
61
63
  setCurrentState('default');
62
64
  };
63
-
65
+
64
66
  const simulateUpload = () => {
65
67
  setCurrentState('uploading');
66
68
  setProgress(0);
67
-
69
+
68
70
  let currentProgress = 0;
69
71
  const interval = setInterval(() => {
70
72
  currentProgress += 5;
71
73
  setProgress(currentProgress);
72
-
74
+
73
75
  if (currentProgress >= 100) {
74
76
  clearInterval(interval);
75
77
  setCurrentState('success');
76
78
  }
77
79
  }, 500);
78
80
  };
79
-
81
+
80
82
  const showError = () => {
81
83
  setCurrentState('error');
82
84
  };
83
-
85
+
84
86
  return (
85
87
  <div>
86
88
  <div style={{ marginBottom: '20px' }}>
87
- <button
88
- style={{ marginRight: '10px', padding: '8px 16px' }}
89
- onClick={resetState}
90
- >
89
+ <button style={{ marginRight: '10px', padding: '8px 16px' }} onClick={resetState}>
91
90
  Reset
92
91
  </button>
93
- <button
94
- style={{ marginRight: '10px', padding: '8px 16px' }}
95
- onClick={simulateUpload}
96
- >
92
+ <button style={{ marginRight: '10px', padding: '8px 16px' }} onClick={simulateUpload}>
97
93
  Simulate Upload
98
94
  </button>
99
- <button
100
- style={{ padding: '8px 16px' }}
101
- onClick={showError}
102
- >
95
+ <button style={{ padding: '8px 16px' }} onClick={showError}>
103
96
  Show Error
104
97
  </button>
105
98
  </div>
106
-
99
+
107
100
  <div style={{ padding: '30px', maxWidth: '600px' }}>
108
101
  {currentState === 'default' && (
109
102
  <Upload
110
- onFileSelect={(files) => {
103
+ onFileSelect={files => {
111
104
  console.log('Files selected:', files);
112
105
  simulateUpload();
113
106
  }}
114
107
  />
115
108
  )}
116
-
109
+
117
110
  {currentState === 'uploading' && (
118
111
  <div className="c-upload">
119
112
  <div className="c-upload__inner">
@@ -125,12 +118,17 @@ const WithStateControls: React.FC = () => {
125
118
  <button className="c-upload__btn c-btn c-btn--primary">Choose File</button>
126
119
  <p className="c-upload__helper-text">Maximum size: 5MB</p>
127
120
  </div>
128
- <div className="c-upload__loader" style={{ '--upload-loader-percentage': progress } as React.CSSProperties}>
121
+ <div
122
+ className="c-upload__loader"
123
+ style={{ '--upload-loader-percentage': progress } as React.CSSProperties}
124
+ >
129
125
  <div className="c-upload__loader-status">
130
126
  <h5 className="c-upload__loader-title">File name.pdf</h5>
131
127
  <div className="c-upload__loader-progress">
132
128
  <div className="c-upload__loader-par">{progress}%</div>
133
- <div className="c-upload__loader-time">{Math.ceil((100 - progress) / 5)} seconds left</div>
129
+ <div className="c-upload__loader-time">
130
+ {Math.ceil((100 - progress) / 5)} seconds left
131
+ </div>
134
132
  </div>
135
133
  </div>
136
134
 
@@ -148,7 +146,7 @@ const WithStateControls: React.FC = () => {
148
146
  </div>
149
147
  </div>
150
148
  )}
151
-
149
+
152
150
  {currentState === 'success' && (
153
151
  <div className="c-upload c-upload--success">
154
152
  <div className="c-upload__inner">
@@ -163,9 +161,7 @@ const WithStateControls: React.FC = () => {
163
161
  <div className="c-upload__loader">
164
162
  <div className="c-upload__loader-status">
165
163
  <h5 className="c-upload__loader-title">File name.pdf</h5>
166
- <div className="c-upload__loader-progress">
167
- Upload successful
168
- </div>
164
+ <div className="c-upload__loader-progress">Upload successful</div>
169
165
  </div>
170
166
 
171
167
  <div className="c-upload__loader-control">
@@ -176,7 +172,7 @@ const WithStateControls: React.FC = () => {
176
172
  </div>
177
173
  </div>
178
174
  )}
179
-
175
+
180
176
  {currentState === 'error' && (
181
177
  <div className="c-upload c-upload--error">
182
178
  <div className="c-upload__inner">
@@ -191,9 +187,7 @@ const WithStateControls: React.FC = () => {
191
187
  <div className="c-upload__loader">
192
188
  <div className="c-upload__loader-status">
193
189
  <h5 className="c-upload__loader-title">File name.pdf</h5>
194
- <div className="c-upload__loader-progress">
195
- Error message
196
- </div>
190
+ <div className="c-upload__loader-progress">Error message</div>
197
191
  </div>
198
192
 
199
193
  <div className="c-upload__loader-control">
@@ -224,4 +218,4 @@ MultipleFiles.args = {
224
218
  ...Default.args,
225
219
  multiple: true,
226
220
  buttonText: 'Choose Files',
227
- };
221
+ };
@@ -6,67 +6,67 @@ export interface UploadProps {
6
6
  * Whether the upload component is disabled
7
7
  */
8
8
  disabled?: boolean;
9
-
9
+
10
10
  /**
11
11
  * Maximum file size in MB
12
12
  */
13
13
  maxSizeInMB?: number;
14
-
14
+
15
15
  /**
16
16
  * Accepted file types
17
17
  */
18
18
  acceptedFileTypes?: string[];
19
-
19
+
20
20
  /**
21
21
  * Whether multiple files can be selected
22
22
  */
23
23
  multiple?: boolean;
24
-
24
+
25
25
  /**
26
26
  * Text for the drag and drop section
27
27
  */
28
28
  title?: string;
29
-
29
+
30
30
  /**
31
31
  * Text describing supported file types
32
32
  */
33
33
  supportedFilesText?: string;
34
-
34
+
35
35
  /**
36
36
  * Text for the upload button
37
37
  */
38
38
  buttonText?: string;
39
-
39
+
40
40
  /**
41
41
  * Helper text displayed below the button
42
42
  */
43
43
  helperText?: string;
44
-
44
+
45
45
  /**
46
46
  * Icon component or class name
47
47
  */
48
48
  icon?: React.ReactNode;
49
-
49
+
50
50
  /**
51
51
  * Called when files are selected
52
52
  */
53
53
  onFileSelect?: (files: File[]) => void;
54
-
54
+
55
55
  /**
56
56
  * Called during file upload with progress
57
57
  */
58
58
  onFileUpload?: (file: File, progress: number) => void;
59
-
59
+
60
60
  /**
61
61
  * Called when file upload is complete
62
62
  */
63
63
  onFileUploadComplete?: (file: File) => void;
64
-
64
+
65
65
  /**
66
66
  * Called on file upload errors
67
67
  */
68
68
  onFileUploadError?: (file: File, error: string) => void;
69
-
69
+
70
70
  /**
71
71
  * Additional CSS class
72
72
  */
@@ -84,7 +84,13 @@ type UploadStatus = 'idle' | 'loading' | 'success' | 'error';
84
84
  export const Upload: React.FC<UploadProps> = ({
85
85
  disabled = false,
86
86
  maxSizeInMB = 5,
87
- acceptedFileTypes = ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],
87
+ acceptedFileTypes = [
88
+ 'application/pdf',
89
+ 'application/vnd.ms-excel',
90
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
91
+ 'image/jpeg',
92
+ 'image/png',
93
+ ],
88
94
  multiple = false,
89
95
  title = 'Drag and Drop files here',
90
96
  supportedFilesText = 'Files supported: PDF, XSLS, JPEG, PNG, Scanner',
@@ -100,7 +106,7 @@ export const Upload: React.FC<UploadProps> = ({
100
106
  const uploadRef = useRef<HTMLDivElement>(null);
101
107
  const inputRef = useRef<HTMLInputElement>(null);
102
108
  const uploadInstance = useRef<any>(null);
103
-
109
+
104
110
  const [status, setStatus] = useState<UploadStatus>('idle');
105
111
  const [isDragging, setIsDragging] = useState(false);
106
112
  const [currentFile, setCurrentFile] = useState<File | null>(null);
@@ -109,7 +115,7 @@ export const Upload: React.FC<UploadProps> = ({
109
115
  const [errorMessage, setErrorMessage] = useState<string | null>(null);
110
116
  const [successMessage, setSuccessMessage] = useState<string | null>(null);
111
117
  const dragCounter = useRef(0);
112
-
118
+
113
119
  useEffect(() => {
114
120
  // Only run on client-side
115
121
  if (typeof window === 'undefined' || !uploadRef.current) return undefined;
@@ -137,115 +143,124 @@ export const Upload: React.FC<UploadProps> = ({
137
143
  setStatus('error');
138
144
  setErrorMessage(error);
139
145
  if (onFileUploadError) onFileUploadError(file, error);
140
- }
146
+ },
141
147
  });
142
148
  }
143
149
  });
144
-
150
+
145
151
  // Cleanup on unmount
146
152
  return () => {
147
153
  if (uploadInstance.current) {
148
154
  uploadInstance.current.destroy();
149
155
  }
150
156
  };
151
- }, [disabled, maxSizeInMB, acceptedFileTypes, multiple, onFileSelect, onFileUpload, onFileUploadComplete, onFileUploadError]);
152
-
157
+ }, [
158
+ disabled,
159
+ maxSizeInMB,
160
+ acceptedFileTypes,
161
+ multiple,
162
+ onFileSelect,
163
+ onFileUpload,
164
+ onFileUploadComplete,
165
+ onFileUploadError,
166
+ ]);
167
+
153
168
  // Handle file input change
154
169
  const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {
155
170
  if (!e.target.files?.length) return;
156
-
171
+
157
172
  const files = Array.from(e.target.files);
158
173
  handleFiles(files);
159
174
  };
160
-
175
+
161
176
  // Handle button click
162
177
  const handleButtonClick = () => {
163
178
  if (inputRef.current && !disabled) {
164
179
  inputRef.current.click();
165
180
  }
166
181
  };
167
-
182
+
168
183
  // Handle drag enter
169
184
  const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {
170
185
  e.preventDefault();
171
186
  e.stopPropagation();
172
187
  if (disabled) return;
173
-
188
+
174
189
  dragCounter.current++;
175
190
  if (dragCounter.current === 1) {
176
191
  setIsDragging(true);
177
192
  }
178
193
  };
179
-
194
+
180
195
  // Handle drag leave
181
196
  const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {
182
197
  e.preventDefault();
183
198
  e.stopPropagation();
184
199
  if (disabled) return;
185
-
200
+
186
201
  dragCounter.current--;
187
202
  if (dragCounter.current === 0) {
188
203
  setIsDragging(false);
189
204
  }
190
205
  };
191
-
206
+
192
207
  // Handle drag over
193
208
  const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {
194
209
  e.preventDefault();
195
210
  e.stopPropagation();
196
211
  if (disabled) return;
197
212
  };
198
-
213
+
199
214
  // Handle drop
200
215
  const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {
201
216
  e.preventDefault();
202
217
  e.stopPropagation();
203
218
  if (disabled) return;
204
-
219
+
205
220
  dragCounter.current = 0;
206
221
  setIsDragging(false);
207
-
222
+
208
223
  if (!e.dataTransfer.files?.length) return;
209
-
224
+
210
225
  const files = Array.from(e.dataTransfer.files);
211
226
  handleFiles(files);
212
227
  };
213
-
228
+
214
229
  // Process files
215
230
  const handleFiles = (files: File[]) => {
216
231
  if (!files.length) return;
217
-
232
+
218
233
  // If multiple is not allowed, take only the first file
219
234
  const filesToProcess = multiple ? files : [files[0]];
220
-
235
+
221
236
  // Validate files
222
237
  const validFiles = filesToProcess.filter(file => validateFile(file));
223
-
238
+
224
239
  // Notify about file selection
225
240
  if (validFiles.length && onFileSelect) {
226
241
  onFileSelect(validFiles as File[]);
227
242
  }
228
-
243
+
229
244
  // Process the first valid file
230
245
  if (validFiles.length) {
231
- setCurrentFile(validFiles[0] || null);
246
+ setCurrentFile(validFiles[0] || null);
232
247
  if (validFiles[0]) {
233
248
  simulateUpload(validFiles[0]);
234
249
  }
235
250
  }
236
251
  };
237
-
252
+
238
253
  // Validate file
239
254
  const validateFile = (file: File): boolean => {
240
255
  const maxSizeInBytes = maxSizeInMB * 1024 * 1024;
241
-
256
+
242
257
  // Check file size
243
258
  if (file.size > maxSizeInBytes) {
244
259
  setStatus('error');
245
260
  setErrorMessage(`File too large. Maximum size is ${maxSizeInMB}MB.`);
246
261
  return false;
247
262
  }
248
-
263
+
249
264
  // Check file type if acceptedFileTypes is provided
250
265
  if (acceptedFileTypes?.length) {
251
266
  const isAcceptedType = acceptedFileTypes.some(type => {
@@ -256,31 +271,31 @@ export const Upload: React.FC<UploadProps> = ({
256
271
  }
257
272
  return file.type === type;
258
273
  });
259
-
274
+
260
275
  if (!isAcceptedType) {
261
276
  setStatus('error');
262
277
  setErrorMessage('File type not supported.');
263
278
  return false;
264
279
  }
265
280
  }
266
-
281
+
267
282
  return true;
268
283
  };
269
-
284
+
270
285
  // Simulate upload (in a real component, this would be an actual upload)
271
286
  const simulateUpload = (file: File) => {
272
287
  setStatus('loading');
273
288
  setUploadProgress(0);
274
-
289
+
275
290
  // Simulate progress updates
276
291
  let progress = 0;
277
292
  const interval = setInterval(() => {
278
293
  progress += 5;
279
-
294
+
280
295
  if (progress < 100) {
281
296
  setUploadProgress(progress);
282
297
  setTimeLeft(`${Math.ceil((100 - progress) / 5)} seconds left`);
283
-
298
+
284
299
  if (onFileUpload) {
285
300
  onFileUpload(file, progress);
286
301
  }
@@ -288,14 +303,14 @@ export const Upload: React.FC<UploadProps> = ({
288
303
  clearInterval(interval);
289
304
  setStatus('success');
290
305
  setSuccessMessage('Upload successful');
291
-
306
+
292
307
  if (onFileUploadComplete) {
293
308
  onFileUploadComplete(file);
294
309
  }
295
310
  }
296
311
  }, 500);
297
312
  };
298
-
313
+
299
314
  // Handle close button click
300
315
  const handleClose = () => {
301
316
  setStatus('idle');
@@ -304,13 +319,13 @@ export const Upload: React.FC<UploadProps> = ({
304
319
  setTimeLeft(null);
305
320
  setErrorMessage(null);
306
321
  setSuccessMessage(null);
307
-
322
+
308
323
  // Reset input
309
324
  if (inputRef.current) {
310
325
  inputRef.current.value = '';
311
326
  }
312
327
  };
313
-
328
+
314
329
  // Determine CSS classes
315
330
  const uploadClasses = [
316
331
  'c-upload',
@@ -319,17 +334,22 @@ export const Upload: React.FC<UploadProps> = ({
319
334
  status === 'success' ? UPLOAD.CLASSES.SUCCESS : '',
320
335
  status === 'error' ? UPLOAD.CLASSES.ERROR : '',
321
336
  isDragging ? UPLOAD.CLASSES.DRAGGING : '',
322
- className
323
- ].filter(Boolean).join(' ');
324
-
337
+ className,
338
+ ]
339
+ .filter(Boolean)
340
+ .join(' ');
341
+
325
342
  // Update CSS variable for progress
326
- const style = uploadProgress > 0 ? {
327
- [UPLOAD.ATTRIBUTES.PERCENTAGE]: uploadProgress
328
- } as React.CSSProperties : {};
329
-
343
+ const style =
344
+ uploadProgress > 0
345
+ ? ({
346
+ [UPLOAD.ATTRIBUTES.PERCENTAGE]: uploadProgress,
347
+ } as React.CSSProperties)
348
+ : {};
349
+
330
350
  return (
331
- <div
332
- className={uploadClasses}
351
+ <div
352
+ className={uploadClasses}
333
353
  ref={uploadRef}
334
354
  style={style}
335
355
  onDragEnter={handleDragEnter}
@@ -338,13 +358,11 @@ export const Upload: React.FC<UploadProps> = ({
338
358
  onDrop={handleDrop}
339
359
  >
340
360
  <div className="c-upload__inner">
341
- <div className="c-upload__icon">
342
- {icon}
343
- </div>
361
+ <div className="c-upload__icon">{icon}</div>
344
362
  <h3 className="c-upload__title">{title}</h3>
345
363
  <p className="c-upload__text">{supportedFilesText}</p>
346
- <button
347
- className="c-upload__btn c-btn c-btn--primary"
364
+ <button
365
+ className="c-upload__btn c-btn c-btn--primary"
348
366
  disabled={disabled}
349
367
  onClick={handleButtonClick}
350
368
  >
@@ -360,7 +378,7 @@ export const Upload: React.FC<UploadProps> = ({
360
378
  onChange={handleFileChange}
361
379
  />
362
380
  </div>
363
-
381
+
364
382
  {(status === 'loading' || status === 'success' || status === 'error') && currentFile && (
365
383
  <div className="c-upload__loader">
366
384
  <div className="c-upload__loader-status">
@@ -376,7 +394,7 @@ export const Upload: React.FC<UploadProps> = ({
376
394
  {status === 'error' && errorMessage}
377
395
  </div>
378
396
  </div>
379
-
397
+
380
398
  <div className="c-upload__loader-control">
381
399
  {status === 'loading' && uploadProgress < 100 && (
382
400
  <div className="c-upload__loader-bar">
@@ -386,10 +404,7 @@ export const Upload: React.FC<UploadProps> = ({
386
404
  </svg>
387
405
  </div>
388
406
  )}
389
- <button
390
- className="c-upload__loader-close c-btn c-btn--icon"
391
- onClick={handleClose}
392
- >
407
+ <button className="c-upload__loader-close c-btn c-btn--icon" onClick={handleClose}>
393
408
  {status === 'success' ? (
394
409
  <i className="icon-lux-check-circle-fill"></i>
395
410
  ) : (
@@ -404,4 +419,4 @@ export const Upload: React.FC<UploadProps> = ({
404
419
  };
405
420
 
406
421
  Upload.displayName = 'Upload';
407
- export default Upload;
422
+ export default Upload;