@shohojdhara/atomix 0.1.3 → 0.1.5

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 (351) hide show
  1. package/dist/css/{atomix-0.1.3.css → atomix-0.1.5.css} +1 -1
  2. package/dist/css/{atomix-0.1.3.css.map → atomix-0.1.5.css.map} +1 -1
  3. package/dist/css/{atomix-0.1.3.min.css → atomix-0.1.5.min.css} +1 -1
  4. package/dist/css/{atomix-0.1.3.min.css.map → atomix-0.1.5.min.css.map} +1 -1
  5. package/dist/js/202.atomix-0.1.5.react.cjs.js +2 -0
  6. package/dist/js/202.atomix-0.1.5.react.cjs.js.map +1 -0
  7. package/dist/js/202.atomix-0.1.5.react.esm.js +2 -0
  8. package/dist/js/202.atomix-0.1.5.react.esm.js.map +1 -0
  9. package/dist/js/202.atomix-0.1.5.react.js +2 -0
  10. package/dist/js/202.atomix-0.1.5.react.js.map +1 -0
  11. package/dist/js/308.atomix-0.1.5.react.cjs.js +2 -0
  12. package/dist/js/308.atomix-0.1.5.react.cjs.js.map +1 -0
  13. package/dist/js/308.atomix-0.1.5.react.esm.js +2 -0
  14. package/dist/js/308.atomix-0.1.5.react.esm.js.map +1 -0
  15. package/dist/js/308.atomix-0.1.5.react.js +2 -0
  16. package/dist/js/308.atomix-0.1.5.react.js.map +1 -0
  17. package/dist/js/34.atomix-0.1.5.react.cjs.js +2 -0
  18. package/dist/js/34.atomix-0.1.5.react.cjs.js.map +1 -0
  19. package/dist/js/34.atomix-0.1.5.react.esm.js +2 -0
  20. package/dist/js/34.atomix-0.1.5.react.esm.js.map +1 -0
  21. package/dist/js/34.atomix-0.1.5.react.js +2 -0
  22. package/dist/js/34.atomix-0.1.5.react.js.map +1 -0
  23. package/dist/js/471.atomix-0.1.5.react.cjs.js +2 -0
  24. package/dist/js/471.atomix-0.1.5.react.cjs.js.map +1 -0
  25. package/dist/js/471.atomix-0.1.5.react.esm.js +2 -0
  26. package/dist/js/471.atomix-0.1.5.react.esm.js.map +1 -0
  27. package/dist/js/471.atomix-0.1.5.react.js +2 -0
  28. package/dist/js/471.atomix-0.1.5.react.js.map +1 -0
  29. package/dist/js/54.atomix-0.1.5.react.cjs.js +2 -0
  30. package/dist/js/54.atomix-0.1.5.react.cjs.js.map +1 -0
  31. package/dist/js/54.atomix-0.1.5.react.esm.js +2 -0
  32. package/dist/js/54.atomix-0.1.5.react.esm.js.map +1 -0
  33. package/dist/js/54.atomix-0.1.5.react.js +2 -0
  34. package/dist/js/54.atomix-0.1.5.react.js.map +1 -0
  35. package/dist/js/619.atomix-0.1.5.react.cjs.js +2 -0
  36. package/dist/js/619.atomix-0.1.5.react.cjs.js.map +1 -0
  37. package/dist/js/619.atomix-0.1.5.react.esm.js +2 -0
  38. package/dist/js/619.atomix-0.1.5.react.esm.js.map +1 -0
  39. package/dist/js/619.atomix-0.1.5.react.js +2 -0
  40. package/dist/js/619.atomix-0.1.5.react.js.map +1 -0
  41. package/dist/js/690.atomix-0.1.5.react.cjs.js +2 -0
  42. package/dist/js/690.atomix-0.1.5.react.cjs.js.map +1 -0
  43. package/dist/js/690.atomix-0.1.5.react.esm.js +2 -0
  44. package/dist/js/690.atomix-0.1.5.react.esm.js.map +1 -0
  45. package/dist/js/690.atomix-0.1.5.react.js +2 -0
  46. package/dist/js/690.atomix-0.1.5.react.js.map +1 -0
  47. package/dist/js/894.atomix-0.1.5.react.cjs.js +2 -0
  48. package/dist/js/894.atomix-0.1.5.react.cjs.js.map +1 -0
  49. package/dist/js/894.atomix-0.1.5.react.esm.js +2 -0
  50. package/dist/js/894.atomix-0.1.5.react.esm.js.map +1 -0
  51. package/dist/js/894.atomix-0.1.5.react.js +2 -0
  52. package/dist/js/894.atomix-0.1.5.react.js.map +1 -0
  53. package/dist/js/897.atomix-0.1.5.react.cjs.js +2 -0
  54. package/dist/js/897.atomix-0.1.5.react.cjs.js.map +1 -0
  55. package/dist/js/897.atomix-0.1.5.react.esm.js +2 -0
  56. package/dist/js/897.atomix-0.1.5.react.esm.js.map +1 -0
  57. package/dist/js/897.atomix-0.1.5.react.js +2 -0
  58. package/dist/js/897.atomix-0.1.5.react.js.map +1 -0
  59. package/dist/js/atomix-0.1.5.react.cjs.js +2 -0
  60. package/dist/js/atomix-0.1.5.react.cjs.js.map +1 -0
  61. package/dist/js/atomix-0.1.5.react.esm.js +2 -0
  62. package/dist/js/atomix-0.1.5.react.esm.js.map +1 -0
  63. package/dist/js/atomix-0.1.5.react.js +2 -0
  64. package/dist/js/atomix-0.1.5.react.js.map +1 -0
  65. package/package.json +3 -3
  66. package/src/components/Accordion/Accordion.tsx +11 -2
  67. package/src/components/Avatar/Avatar.tsx +12 -2
  68. package/src/components/Avatar/AvatarGroup.tsx +11 -2
  69. package/src/components/Badge/Badge.tsx +13 -2
  70. package/src/components/Badge/index.tsx +2 -4
  71. package/src/components/Breadcrumb/Breadcrumb.tsx +9 -3
  72. package/src/components/Callout/Callout.tsx +13 -2
  73. package/src/components/Card/Card.tsx +12 -2
  74. package/src/components/ColorModeToggle/ColorModeToggle.tsx +11 -2
  75. package/src/components/ColorModeToggle/index.ts +2 -1
  76. package/src/components/Countdown/Countdown.tsx +13 -3
  77. package/src/components/DataTable/DataTable.tsx +11 -2
  78. package/src/components/DatePicker/DatePicker.tsx +5 -0
  79. package/src/components/Dropdown/Dropdown.tsx +14 -1
  80. package/src/components/EdgePanel/EdgePanel.tsx +15 -2
  81. package/src/components/Form/Checkbox.tsx +12 -2
  82. package/src/components/Form/Form.tsx +11 -2
  83. package/src/components/Form/FormGroup.tsx +11 -2
  84. package/src/components/Form/Input.tsx +11 -2
  85. package/src/components/Form/Radio.tsx +11 -2
  86. package/src/components/Form/Select.tsx +11 -2
  87. package/src/components/Form/Textarea.tsx +11 -2
  88. package/src/components/Form/index.ts +7 -7
  89. package/src/components/Hero/Hero.tsx +13 -4
  90. package/src/components/Hero/index.ts +2 -2
  91. package/src/components/Icon/Icon.tsx +12 -3
  92. package/src/components/List/List.tsx +13 -2
  93. package/src/components/Messages/Messages.tsx +11 -4
  94. package/src/components/Messages/index.ts +1 -1
  95. package/src/components/Modal/Modal.tsx +11 -2
  96. package/src/components/Navbar/Menu.tsx +12 -1
  97. package/src/components/Navbar/Nav.tsx +12 -2
  98. package/src/components/Navbar/Navbar.tsx +14 -2
  99. package/src/components/Pagination/Pagination.tsx +14 -2
  100. package/src/components/PhotoViewer/PhotoViewer.tsx +10 -1
  101. package/src/components/Popover/Popover.tsx +13 -2
  102. package/src/components/ProductReview/ProductReview.tsx +11 -2
  103. package/src/components/Progress/Progress.tsx +10 -2
  104. package/src/components/Rating/Rating.tsx +9 -2
  105. package/src/components/River/River.tsx +11 -4
  106. package/src/components/River/index.ts +1 -3
  107. package/src/components/SectionIntro/SectionIntro.tsx +11 -2
  108. package/src/components/Spinner/Spinner.tsx +12 -2
  109. package/src/components/Spinner/index.ts +2 -1
  110. package/src/components/Steps/Steps.tsx +13 -4
  111. package/src/components/Tab/Tab.tsx +14 -4
  112. package/src/components/Testimonial/Testimonial.tsx +13 -4
  113. package/src/components/Todo/Todo.tsx +11 -2
  114. package/src/components/Toggle/Toggle.tsx +13 -3
  115. package/src/components/Tooltip/Tooltip.tsx +14 -3
  116. package/src/components/Upload/Upload.tsx +12 -3
  117. package/src/components/index.ts +81 -40
  118. package/src/index.ts +5 -9
  119. package/dist/js/13.atomix-0.1.3.react.cjs.js +0 -2
  120. package/dist/js/13.atomix-0.1.3.react.cjs.js.map +0 -1
  121. package/dist/js/13.atomix-0.1.3.react.esm.js +0 -2
  122. package/dist/js/13.atomix-0.1.3.react.esm.js.map +0 -1
  123. package/dist/js/13.atomix-0.1.3.react.js +0 -2
  124. package/dist/js/13.atomix-0.1.3.react.js.map +0 -1
  125. package/dist/js/646.atomix-0.1.3.react.cjs.js +0 -2
  126. package/dist/js/646.atomix-0.1.3.react.cjs.js.map +0 -1
  127. package/dist/js/646.atomix-0.1.3.react.esm.js +0 -2
  128. package/dist/js/646.atomix-0.1.3.react.esm.js.map +0 -1
  129. package/dist/js/646.atomix-0.1.3.react.js +0 -2
  130. package/dist/js/646.atomix-0.1.3.react.js.map +0 -1
  131. package/dist/js/979.atomix-0.1.3.react.cjs.js +0 -2
  132. package/dist/js/979.atomix-0.1.3.react.cjs.js.map +0 -1
  133. package/dist/js/979.atomix-0.1.3.react.esm.js +0 -2
  134. package/dist/js/979.atomix-0.1.3.react.esm.js.map +0 -1
  135. package/dist/js/979.atomix-0.1.3.react.js +0 -2
  136. package/dist/js/979.atomix-0.1.3.react.js.map +0 -1
  137. package/dist/js/989.atomix-0.1.3.react.cjs.js +0 -2
  138. package/dist/js/989.atomix-0.1.3.react.cjs.js.map +0 -1
  139. package/dist/js/989.atomix-0.1.3.react.esm.js +0 -2
  140. package/dist/js/989.atomix-0.1.3.react.esm.js.map +0 -1
  141. package/dist/js/989.atomix-0.1.3.react.js +0 -2
  142. package/dist/js/989.atomix-0.1.3.react.js.map +0 -1
  143. package/dist/js/atomix-0.1.3.react.cjs.js +0 -2
  144. package/dist/js/atomix-0.1.3.react.cjs.js.map +0 -1
  145. package/dist/js/atomix-0.1.3.react.esm.js +0 -2
  146. package/dist/js/atomix-0.1.3.react.esm.js.map +0 -1
  147. package/dist/js/atomix-0.1.3.react.js +0 -2
  148. package/dist/js/atomix-0.1.3.react.js.map +0 -1
  149. package/dist/types/components/Accordion/Accordion.d.ts +0 -17
  150. package/dist/types/components/Accordion/index.d.ts +0 -2
  151. package/dist/types/components/Accordion/scripts/accordionInteractions.d.ts +0 -19
  152. package/dist/types/components/Accordion/scripts/constants.d.ts +0 -24
  153. package/dist/types/components/Accordion/scripts/index.d.ts +0 -100
  154. package/dist/types/components/AtomixLogo/AtomixLogo.d.ts +0 -8
  155. package/dist/types/components/AtomixLogo/index.d.ts +0 -3
  156. package/dist/types/components/AtomixLogo.d.ts +0 -8
  157. package/dist/types/components/Avatar/Avatar.d.ts +0 -4
  158. package/dist/types/components/Avatar/AvatarGroup.d.ts +0 -4
  159. package/dist/types/components/Avatar/index.d.ts +0 -2
  160. package/dist/types/components/Avatar/scripts/index.d.ts +0 -105
  161. package/dist/types/components/Badge/Badge.d.ts +0 -3
  162. package/dist/types/components/Badge/index.d.ts +0 -3
  163. package/dist/types/components/Breadcrumb/Breadcrumb.d.ts +0 -43
  164. package/dist/types/components/Breadcrumb/index.d.ts +0 -2
  165. package/dist/types/components/Breadcrumb/scripts/breadcrumb.d.ts +0 -43
  166. package/dist/types/components/Breadcrumb/scripts/index.d.ts +0 -4
  167. package/dist/types/components/Breadcrumb/scripts/types.d.ts +0 -59
  168. package/dist/types/components/Button/Button.d.ts +0 -10
  169. package/dist/types/components/Button/index.d.ts +0 -5
  170. package/dist/types/components/Button/scripts/buttonInteractions.d.ts +0 -20
  171. package/dist/types/components/Button/scripts/index.d.ts +0 -1
  172. package/dist/types/components/Callout/Callout.d.ts +0 -6
  173. package/dist/types/components/Callout/index.d.ts +0 -1
  174. package/dist/types/components/Callout/scripts/CalloutInteractions.d.ts +0 -92
  175. package/dist/types/components/Callout/scripts/index.d.ts +0 -53
  176. package/dist/types/components/Card/Card.d.ts +0 -4
  177. package/dist/types/components/Card/ElevationCard.d.ts +0 -4
  178. package/dist/types/components/Card/index.d.ts +0 -9
  179. package/dist/types/components/Card/scripts/cardInteractions.d.ts +0 -37
  180. package/dist/types/components/Card/scripts/index.d.ts +0 -80
  181. package/dist/types/components/ColorModeToggle/ColorModeToggle.d.ts +0 -6
  182. package/dist/types/components/ColorModeToggle/index.d.ts +0 -1
  183. package/dist/types/components/Countdown/Countdown.d.ts +0 -17
  184. package/dist/types/components/Countdown/index.d.ts +0 -2
  185. package/dist/types/components/Countdown/scripts/index.d.ts +0 -71
  186. package/dist/types/components/DataTable/DataTable.d.ts +0 -17
  187. package/dist/types/components/DataTable/index.d.ts +0 -2
  188. package/dist/types/components/DataTable/scripts/index.d.ts +0 -174
  189. package/dist/types/components/DatePicker/DatePicker.d.ts +0 -8
  190. package/dist/types/components/DatePicker/index.d.ts +0 -4
  191. package/dist/types/components/DatePicker/scripts/componentInteractions.d.ts +0 -28
  192. package/dist/types/components/DatePicker/scripts/index.d.ts +0 -153
  193. package/dist/types/components/DatePicker/types.d.ts +0 -127
  194. package/dist/types/components/DatePicker/utils.d.ts +0 -39
  195. package/dist/types/components/Dropdown/Dropdown.d.ts +0 -18
  196. package/dist/types/components/Dropdown/index.d.ts +0 -5
  197. package/dist/types/components/Dropdown/scripts/componentInteractions.d.ts +0 -26
  198. package/dist/types/components/Dropdown/scripts/index.d.ts +0 -114
  199. package/dist/types/components/EdgePanel/EdgePanel.d.ts +0 -3
  200. package/dist/types/components/EdgePanel/index.d.ts +0 -1
  201. package/dist/types/components/EdgePanel/scripts/edgePanelInteractions.d.ts +0 -35
  202. package/dist/types/components/EdgePanel/scripts/index.d.ts +0 -126
  203. package/dist/types/components/Form/Checkbox.d.ts +0 -7
  204. package/dist/types/components/Form/Form.d.ts +0 -7
  205. package/dist/types/components/Form/FormGroup.d.ts +0 -7
  206. package/dist/types/components/Form/Input.d.ts +0 -7
  207. package/dist/types/components/Form/Radio.d.ts +0 -7
  208. package/dist/types/components/Form/Select.d.ts +0 -7
  209. package/dist/types/components/Form/Textarea.d.ts +0 -7
  210. package/dist/types/components/Form/index.d.ts +0 -7
  211. package/dist/types/components/Hero/Hero.d.ts +0 -4
  212. package/dist/types/components/Hero/index.d.ts +0 -5
  213. package/dist/types/components/Hero/scripts/heroInteractions.d.ts +0 -29
  214. package/dist/types/components/Hero/scripts/index.d.ts +0 -47
  215. package/dist/types/components/Icon/Icon.d.ts +0 -36
  216. package/dist/types/components/Icon/index.d.ts +0 -2
  217. package/dist/types/components/List/List.d.ts +0 -4
  218. package/dist/types/components/List/ListGroup.d.ts +0 -4
  219. package/dist/types/components/List/index.d.ts +0 -2
  220. package/dist/types/components/Messages/Messages.d.ts +0 -8
  221. package/dist/types/components/Messages/index.d.ts +0 -2
  222. package/dist/types/components/Messages/scripts/componentInteractions.d.ts +0 -49
  223. package/dist/types/components/Messages/scripts/index.d.ts +0 -110
  224. package/dist/types/components/Modal/Modal.d.ts +0 -7
  225. package/dist/types/components/Modal/index.d.ts +0 -1
  226. package/dist/types/components/Modal/scripts/index.d.ts +0 -83
  227. package/dist/types/components/Modal/scripts/modalInteractions.d.ts +0 -28
  228. package/dist/types/components/Navbar/MegaMenu.d.ts +0 -5
  229. package/dist/types/components/Navbar/Menu.d.ts +0 -13
  230. package/dist/types/components/Navbar/Nav.d.ts +0 -3
  231. package/dist/types/components/Navbar/NavDropdown.d.ts +0 -3
  232. package/dist/types/components/Navbar/NavItem.d.ts +0 -3
  233. package/dist/types/components/Navbar/Navbar.d.ts +0 -3
  234. package/dist/types/components/Navbar/index.d.ts +0 -6
  235. package/dist/types/components/Pagination/Pagination.d.ts +0 -6
  236. package/dist/types/components/Pagination/index.d.ts +0 -1
  237. package/dist/types/components/Pagination/scripts/index.d.ts +0 -52
  238. package/dist/types/components/PhotoViewer/PhotoViewer.d.ts +0 -21
  239. package/dist/types/components/PhotoViewer/PhotoViewerHeader.d.ts +0 -45
  240. package/dist/types/components/PhotoViewer/PhotoViewerImage.d.ts +0 -51
  241. package/dist/types/components/PhotoViewer/PhotoViewerInfo.d.ts +0 -21
  242. package/dist/types/components/PhotoViewer/PhotoViewerNavigation.d.ts +0 -28
  243. package/dist/types/components/PhotoViewer/PhotoViewerThumbnails.d.ts +0 -21
  244. package/dist/types/components/PhotoViewer/examples/ImageGallery.d.ts +0 -11
  245. package/dist/types/components/PhotoViewer/examples/SimpleGallery.d.ts +0 -3
  246. package/dist/types/components/PhotoViewer/examples/index.d.ts +0 -2
  247. package/dist/types/components/PhotoViewer/index.d.ts +0 -12
  248. package/dist/types/components/PhotoViewer/scripts/PhotoViewerInteractions.d.ts +0 -44
  249. package/dist/types/components/PhotoViewer/scripts/index.d.ts +0 -110
  250. package/dist/types/components/Popover/Popover.d.ts +0 -10
  251. package/dist/types/components/Popover/index.d.ts +0 -4
  252. package/dist/types/components/Popover/scripts/componentInteractions.d.ts +0 -60
  253. package/dist/types/components/Popover/scripts/index.d.ts +0 -89
  254. package/dist/types/components/ProductReview/ProductReview.d.ts +0 -41
  255. package/dist/types/components/ProductReview/index.d.ts +0 -2
  256. package/dist/types/components/ProductReview/scripts/bundle.d.ts +0 -2
  257. package/dist/types/components/ProductReview/scripts/componentInteractions.d.ts +0 -43
  258. package/dist/types/components/ProductReview/scripts/index.d.ts +0 -2
  259. package/dist/types/components/Progress/Progress.d.ts +0 -3
  260. package/dist/types/components/Progress/index.d.ts +0 -1
  261. package/dist/types/components/Progress/scripts/componentInteractions.d.ts +0 -29
  262. package/dist/types/components/Progress/scripts/index.d.ts +0 -64
  263. package/dist/types/components/Rating/Rating.d.ts +0 -21
  264. package/dist/types/components/Rating/index.d.ts +0 -4
  265. package/dist/types/components/Rating/scripts/bundle.d.ts +0 -3
  266. package/dist/types/components/Rating/scripts/index.d.ts +0 -74
  267. package/dist/types/components/Rating/scripts/ratingInteractions.d.ts +0 -28
  268. package/dist/types/components/River/River.d.ts +0 -8
  269. package/dist/types/components/River/index.d.ts +0 -4
  270. package/dist/types/components/River/scripts/index.d.ts +0 -40
  271. package/dist/types/components/SectionIntro/SectionIntro.d.ts +0 -62
  272. package/dist/types/components/SectionIntro/index.d.ts +0 -4
  273. package/dist/types/components/SectionIntro/scripts/componentInteractions.d.ts +0 -13
  274. package/dist/types/components/SectionIntro/scripts/index.d.ts +0 -36
  275. package/dist/types/components/Spinner/Spinner.d.ts +0 -3
  276. package/dist/types/components/Spinner/index.d.ts +0 -1
  277. package/dist/types/components/Steps/Steps.d.ts +0 -42
  278. package/dist/types/components/Steps/index.d.ts +0 -4
  279. package/dist/types/components/Steps/scripts/index.d.ts +0 -58
  280. package/dist/types/components/Tab/Tab.d.ts +0 -41
  281. package/dist/types/components/Tab/index.d.ts +0 -2
  282. package/dist/types/components/Tab/scripts/index.d.ts +0 -61
  283. package/dist/types/components/Testimonial/Testimonial.d.ts +0 -46
  284. package/dist/types/components/Testimonial/index.d.ts +0 -4
  285. package/dist/types/components/Testimonial/scripts/index.d.ts +0 -36
  286. package/dist/types/components/Todo/Todo.d.ts +0 -4
  287. package/dist/types/components/Todo/index.d.ts +0 -1
  288. package/dist/types/components/Todo/scripts/index.d.ts +0 -115
  289. package/dist/types/components/Todo/scripts/todoInteractions.d.ts +0 -38
  290. package/dist/types/components/Todo/scripts/types.d.ts +0 -17
  291. package/dist/types/components/Toggle/Toggle.d.ts +0 -27
  292. package/dist/types/components/Toggle/index.d.ts +0 -2
  293. package/dist/types/components/Toggle/scripts/index.d.ts +0 -50
  294. package/dist/types/components/Toggle/scripts/toggleInteractions.d.ts +0 -23
  295. package/dist/types/components/Tooltip/Tooltip.d.ts +0 -32
  296. package/dist/types/components/Tooltip/index.d.ts +0 -3
  297. package/dist/types/components/Tooltip/scripts/index.d.ts +0 -123
  298. package/dist/types/components/Tooltip/scripts/tooltipInteractions.d.ts +0 -23
  299. package/dist/types/components/Upload/Upload.d.ts +0 -64
  300. package/dist/types/components/Upload/index.d.ts +0 -4
  301. package/dist/types/components/Upload/scripts/index.d.ts +0 -118
  302. package/dist/types/components/index.d.ts +0 -37
  303. package/dist/types/htmlComponentsEntry.d.ts +0 -160
  304. package/dist/types/index.d.ts +0 -3
  305. package/dist/types/layouts/Grid/Container.d.ts +0 -38
  306. package/dist/types/layouts/Grid/Grid.d.ts +0 -37
  307. package/dist/types/layouts/Grid/GridCol.d.ts +0 -64
  308. package/dist/types/layouts/Grid/Row.d.ts +0 -38
  309. package/dist/types/layouts/Grid/index.d.ts +0 -8
  310. package/dist/types/layouts/MasonryGrid/MasonryGrid.d.ts +0 -71
  311. package/dist/types/layouts/MasonryGrid/MasonryGridItem.d.ts +0 -24
  312. package/dist/types/layouts/MasonryGrid/index.d.ts +0 -4
  313. package/dist/types/lib/composables/index.d.ts +0 -21
  314. package/dist/types/lib/composables/useAccordion.d.ts +0 -30
  315. package/dist/types/lib/composables/useBadge.d.ts +0 -10
  316. package/dist/types/lib/composables/useBreadcrumb.d.ts +0 -13
  317. package/dist/types/lib/composables/useButton.d.ts +0 -11
  318. package/dist/types/lib/composables/useCallout.d.ts +0 -11
  319. package/dist/types/lib/composables/useCard.d.ts +0 -8
  320. package/dist/types/lib/composables/useCheckbox.d.ts +0 -11
  321. package/dist/types/lib/composables/useDataTable.d.ts +0 -66
  322. package/dist/types/lib/composables/useDatePicker.d.ts +0 -91
  323. package/dist/types/lib/composables/useDropdown.d.ts +0 -26
  324. package/dist/types/lib/composables/useEdgePanel.d.ts +0 -15
  325. package/dist/types/lib/composables/useForm.d.ts +0 -12
  326. package/dist/types/lib/composables/useFormGroup.d.ts +0 -10
  327. package/dist/types/lib/composables/useHero.d.ts +0 -53
  328. package/dist/types/lib/composables/useInput.d.ts +0 -12
  329. package/dist/types/lib/composables/useMessages.d.ts +0 -38
  330. package/dist/types/lib/composables/useModal.d.ts +0 -40
  331. package/dist/types/lib/composables/useNavbar.d.ts +0 -59
  332. package/dist/types/lib/composables/usePagination.d.ts +0 -13
  333. package/dist/types/lib/composables/usePhotoViewer.d.ts +0 -57
  334. package/dist/types/lib/composables/usePopover.d.ts +0 -30
  335. package/dist/types/lib/composables/useProgress.d.ts +0 -38
  336. package/dist/types/lib/composables/useRadio.d.ts +0 -10
  337. package/dist/types/lib/composables/useRating.d.ts +0 -52
  338. package/dist/types/lib/composables/useRiver.d.ts +0 -107
  339. package/dist/types/lib/composables/useSelect.d.ts +0 -10
  340. package/dist/types/lib/composables/useSpinner.d.ts +0 -10
  341. package/dist/types/lib/composables/useTextarea.d.ts +0 -10
  342. package/dist/types/lib/composables/useTodo.d.ts +0 -19
  343. package/dist/types/lib/constants/components.d.ts +0 -921
  344. package/dist/types/lib/constants/index.d.ts +0 -1
  345. package/dist/types/lib/index.d.ts +0 -4
  346. package/dist/types/lib/types/components.d.ts +0 -1947
  347. package/dist/types/lib/types/index.d.ts +0 -2
  348. package/dist/types/lib/utils/dom.d.ts +0 -26
  349. package/dist/types/lib/utils/icons.d.ts +0 -20
  350. package/dist/types/lib/utils/index.d.ts +0 -2
  351. package/dist/types/lib/utils/useForkRef.d.ts +0 -10
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_shohojdhara_atomix=self.webpackChunk_shohojdhara_atomix||[]).push([[202],{202:(t,e,i)=>{i.r(e),i.d(e,{default:()=>l,initializeSteps:()=>c});var s=i(188);const n={activeIndex:0,vertical:!1};class h{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=t||s.UT.SELECTORS.STEPS,this.$element="string"==typeof t?document.querySelector(t):t,this.options={...n,...e},this.$items=null,this.activeIndex=this.options.activeIndex||0,this._initialize()}_initialize(){this.$element&&(this._initializeElements(),this.options.vertical&&!this.$element.classList.contains(s.UT.CLASSES.VERTICAL)&&this.$element.classList.add(s.UT.CLASSES.VERTICAL),this.setActive(this.activeIndex))}_initializeElements(){this.$element&&(this.$items=this.$element.querySelectorAll(s.UT.SELECTORS.ITEM))}setActive(t){this.$items&&t>=0&&this.$items.length>t&&(this.$items.forEach(((e,i)=>{t>i?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.add(s.UT.CLASSES.COMPLETED)):i===t?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED)):(e.classList.remove(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED))})),this.activeIndex=t)}next(){(this.$items?.length||0)-1>this.activeIndex&&this.setActive(this.activeIndex+1)}previous(){this.activeIndex>0&&this.setActive(this.activeIndex-1)}destroy(){}}function c(){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const e=[],i=document.querySelectorAll(arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.UT.SELECTORS.STEPS);return i.length?(i.forEach((i=>{try{const s=new h(i,t);e.push(s)}catch(s){}})),e):e}const l=h}}]);
2
+ //# sourceMappingURL=202.atomix-0.1.5.react.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/202.atomix-0.1.5.react.cjs.js","mappings":"yLAwBA,MAAMA,EAAgC,CACpCC,YAAa,EACbC,UAAU,GAMZ,MAAMC,EAYJC,WAAAA,CAAYC,GAA0C,IAAdC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjDG,KAAKL,SAAWA,GAAYM,EAAAA,GAAMC,UAAUD,MAC5CD,KAAKG,SACiB,iBAAbR,EACHS,SAASC,cAA2BV,GACpCA,EACNK,KAAKJ,QAAU,IAAKN,KAAoBM,GACxCI,KAAKM,OAAS,KACdN,KAAKT,YAAcS,KAAKJ,QAAQL,aAAe,EAC/CS,KAAKO,aACP,CAKQA,WAAAA,GACDP,KAAKG,WAEVH,KAAKQ,sBAGDR,KAAKJ,QAAQJ,WAAaQ,KAAKG,SAASM,UAAUC,SAAST,EAAAA,GAAMU,QAAQC,WAC3EZ,KAAKG,SAASM,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQC,UAG5CZ,KAAKc,UAAUd,KAAKT,aACtB,CAKQiB,mBAAAA,GACDR,KAAKG,WAEVH,KAAKM,OAASN,KAAKG,SAASY,iBAA8Bd,EAAAA,GAAMC,UAAUc,MAC5E,CAMOF,SAAAA,CAAUG,GACVjB,KAAKM,QAAUW,GAAQ,GAAcjB,KAAKM,OAAOR,OAArBmB,IAGjCjB,KAAKM,OAAOY,SAAQ,CAACC,EAAMC,KACjBH,EAAJG,GAEFD,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQW,YACxBF,IAAMH,GAEfE,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,aAGpCH,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQU,QACpCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,WACtC,IAGFtB,KAAKT,YAAc0B,EACrB,CAKOO,IAAAA,IACmBxB,KAAKM,QAAQR,QAAU,GAAK,EAAhDE,KAAKT,aACPS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOkC,QAAAA,GACDzB,KAAKT,YAAc,GACrBS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOmC,OAAAA,GACL,EAUG,SAASC,IAAiF,IAA/B/B,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3E,MAAM+B,EAAkC,GAClCC,EAAgBzB,SAASW,iBAFOlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGI,EAAAA,GAAMC,UAAUD,OAIzD,OAAK4B,EAAc/B,QAEnB+B,EAAcX,SAASY,IACrB,IACE,MAAMC,EAAW,IAAItC,EAAMqC,EAASlC,GACpCgC,EAAeI,KAAKD,EACtB,CAAE,MAAOE,GAET,KAGKL,GAX2BA,CAYpC,CAEA,S","sources":["webpack://@shohojdhara/atomix/./src/components/Steps/scripts/index.ts"],"sourcesContent":["import { STEPS } from '../../../lib/constants/components';\n\n/**\n * Interface for Steps options\n */\ninterface StepsOptions {\n activeIndex?: number;\n vertical?: boolean;\n [key: string]: any;\n}\n\n/**\n * Interface for Steps instance\n */\ninterface StepsInstance {\n setActive: (index: number) => void;\n next: () => void;\n previous: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Steps component\n */\nconst DEFAULT_OPTIONS: StepsOptions = {\n activeIndex: 0,\n vertical: false\n};\n\n/**\n * Class representing a Steps component\n */\nclass Steps implements StepsInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private options: StepsOptions;\n private $items: NodeListOf<HTMLElement> | null;\n private activeIndex: number;\n\n /**\n * Creates an instance of Steps\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || STEPS.SELECTORS.STEPS;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as StepsOptions;\n this.$items = null;\n this.activeIndex = this.options.activeIndex || 0;\n this._initialize();\n }\n\n /**\n * Initialize the steps component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n this._initializeElements();\n \n // Set vertical mode if specified\n if (this.options.vertical && !this.$element.classList.contains(STEPS.CLASSES.VERTICAL)) {\n this.$element.classList.add(STEPS.CLASSES.VERTICAL);\n }\n \n this.setActive(this.activeIndex);\n }\n\n /**\n * Initialize DOM elements\n */\n private _initializeElements(): void {\n if (!this.$element) return;\n \n this.$items = this.$element.querySelectorAll<HTMLElement>(STEPS.SELECTORS.ITEM);\n }\n\n /**\n * Sets the active step\n * @param index - The index of the step to make active\n */\n public setActive(index: number): void {\n if (!this.$items || index < 0 || index >= this.$items.length) return;\n \n // Update all items\n this.$items.forEach((item, i) => {\n if (i < index) {\n // Steps before active are completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.add(STEPS.CLASSES.COMPLETED);\n } else if (i === index) {\n // Current step is active but not completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n } else {\n // Future steps are neither active nor completed\n item.classList.remove(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n }\n });\n \n this.activeIndex = index;\n }\n\n /**\n * Moves to the next step\n */\n public next(): void {\n if (this.activeIndex < (this.$items?.length || 0) - 1) {\n this.setActive(this.activeIndex + 1);\n }\n }\n\n /**\n * Moves to the previous step\n */\n public previous(): void {\n if (this.activeIndex > 0) {\n this.setActive(this.activeIndex - 1);\n }\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n // No specific cleanup needed for steps component\n }\n}\n\n/**\n * Initialize all steps in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {StepsInstance[]} Array of Steps instances\n */\nexport function initializeSteps(selector = STEPS.SELECTORS.STEPS, options = {}): StepsInstance[] {\n const stepsInstances: StepsInstance[] = [];\n const stepsElements = document.querySelectorAll<HTMLElement>(selector);\n\n if (!stepsElements.length) return stepsInstances;\n\n stepsElements.forEach((element) => {\n try {\n const instance = new Steps(element, options);\n stepsInstances.push(instance);\n } catch (error) {\n console.error('Error initializing steps:', error);\n }\n });\n\n return stepsInstances;\n}\n\nexport default Steps; "],"names":["DEFAULT_OPTIONS","activeIndex","vertical","Steps","constructor","selector","options","arguments","length","undefined","this","STEPS","SELECTORS","$element","document","querySelector","$items","_initialize","_initializeElements","classList","contains","CLASSES","VERTICAL","add","setActive","querySelectorAll","ITEM","index","forEach","item","i","ACTIVE","COMPLETED","remove","next","previous","destroy","initializeSteps","stepsInstances","stepsElements","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=202;export const __webpack_ids__=[202];export const __webpack_modules__={202:(t,e,i)=>{i.r(e),i.d(e,{default:()=>a,initializeSteps:()=>l});var s=i(188);const n={activeIndex:0,vertical:!1};class c{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=t||s.UT.SELECTORS.STEPS,this.$element="string"==typeof t?document.querySelector(t):t,this.options={...n,...e},this.$items=null,this.activeIndex=this.options.activeIndex||0,this._initialize()}_initialize(){this.$element&&(this._initializeElements(),this.options.vertical&&!this.$element.classList.contains(s.UT.CLASSES.VERTICAL)&&this.$element.classList.add(s.UT.CLASSES.VERTICAL),this.setActive(this.activeIndex))}_initializeElements(){this.$element&&(this.$items=this.$element.querySelectorAll(s.UT.SELECTORS.ITEM))}setActive(t){this.$items&&t>=0&&this.$items.length>t&&(this.$items.forEach(((e,i)=>{t>i?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.add(s.UT.CLASSES.COMPLETED)):i===t?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED)):(e.classList.remove(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED))})),this.activeIndex=t)}next(){(this.$items?.length||0)-1>this.activeIndex&&this.setActive(this.activeIndex+1)}previous(){this.activeIndex>0&&this.setActive(this.activeIndex-1)}destroy(){}}function l(){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const e=[],i=document.querySelectorAll(arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.UT.SELECTORS.STEPS);return i.length?(i.forEach((i=>{try{const s=new c(i,t);e.push(s)}catch(s){}})),e):e}const a=c}};
2
+ //# sourceMappingURL=202.atomix-0.1.5.react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/202.atomix-0.1.5.react.esm.js","mappings":"oLAwBA,MAAMA,EAAgC,CACpCC,YAAa,EACbC,UAAU,GAMZ,MAAMC,EAYJC,WAAAA,CAAYC,GAA0C,IAAdC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjDG,KAAKL,SAAWA,GAAYM,EAAAA,GAAMC,UAAUD,MAC5CD,KAAKG,SACiB,iBAAbR,EACHS,SAASC,cAA2BV,GACpCA,EACNK,KAAKJ,QAAU,IAAKN,KAAoBM,GACxCI,KAAKM,OAAS,KACdN,KAAKT,YAAcS,KAAKJ,QAAQL,aAAe,EAC/CS,KAAKO,aACP,CAKQA,WAAAA,GACDP,KAAKG,WAEVH,KAAKQ,sBAGDR,KAAKJ,QAAQJ,WAAaQ,KAAKG,SAASM,UAAUC,SAAST,EAAAA,GAAMU,QAAQC,WAC3EZ,KAAKG,SAASM,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQC,UAG5CZ,KAAKc,UAAUd,KAAKT,aACtB,CAKQiB,mBAAAA,GACDR,KAAKG,WAEVH,KAAKM,OAASN,KAAKG,SAASY,iBAA8Bd,EAAAA,GAAMC,UAAUc,MAC5E,CAMOF,SAAAA,CAAUG,GACVjB,KAAKM,QAAUW,GAAQ,GAAcjB,KAAKM,OAAOR,OAArBmB,IAGjCjB,KAAKM,OAAOY,SAAQ,CAACC,EAAMC,KACjBH,EAAJG,GAEFD,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQW,YACxBF,IAAMH,GAEfE,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,aAGpCH,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQU,QACpCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,WACtC,IAGFtB,KAAKT,YAAc0B,EACrB,CAKOO,IAAAA,IACmBxB,KAAKM,QAAQR,QAAU,GAAK,EAAhDE,KAAKT,aACPS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOkC,QAAAA,GACDzB,KAAKT,YAAc,GACrBS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOmC,OAAAA,GACL,EAUG,SAASC,IAAiF,IAA/B/B,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3E,MAAM+B,EAAkC,GAClCC,EAAgBzB,SAASW,iBAFOlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGI,EAAAA,GAAMC,UAAUD,OAIzD,OAAK4B,EAAc/B,QAEnB+B,EAAcX,SAASY,IACrB,IACE,MAAMC,EAAW,IAAItC,EAAMqC,EAASlC,GACpCgC,EAAeI,KAAKD,EACtB,CAAE,MAAOE,GAET,KAGKL,GAX2BA,CAYpC,CAEA,S","sources":["webpack://@shohojdhara/atomix/./src/components/Steps/scripts/index.ts"],"sourcesContent":["import { STEPS } from '../../../lib/constants/components';\n\n/**\n * Interface for Steps options\n */\ninterface StepsOptions {\n activeIndex?: number;\n vertical?: boolean;\n [key: string]: any;\n}\n\n/**\n * Interface for Steps instance\n */\ninterface StepsInstance {\n setActive: (index: number) => void;\n next: () => void;\n previous: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Steps component\n */\nconst DEFAULT_OPTIONS: StepsOptions = {\n activeIndex: 0,\n vertical: false\n};\n\n/**\n * Class representing a Steps component\n */\nclass Steps implements StepsInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private options: StepsOptions;\n private $items: NodeListOf<HTMLElement> | null;\n private activeIndex: number;\n\n /**\n * Creates an instance of Steps\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || STEPS.SELECTORS.STEPS;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as StepsOptions;\n this.$items = null;\n this.activeIndex = this.options.activeIndex || 0;\n this._initialize();\n }\n\n /**\n * Initialize the steps component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n this._initializeElements();\n \n // Set vertical mode if specified\n if (this.options.vertical && !this.$element.classList.contains(STEPS.CLASSES.VERTICAL)) {\n this.$element.classList.add(STEPS.CLASSES.VERTICAL);\n }\n \n this.setActive(this.activeIndex);\n }\n\n /**\n * Initialize DOM elements\n */\n private _initializeElements(): void {\n if (!this.$element) return;\n \n this.$items = this.$element.querySelectorAll<HTMLElement>(STEPS.SELECTORS.ITEM);\n }\n\n /**\n * Sets the active step\n * @param index - The index of the step to make active\n */\n public setActive(index: number): void {\n if (!this.$items || index < 0 || index >= this.$items.length) return;\n \n // Update all items\n this.$items.forEach((item, i) => {\n if (i < index) {\n // Steps before active are completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.add(STEPS.CLASSES.COMPLETED);\n } else if (i === index) {\n // Current step is active but not completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n } else {\n // Future steps are neither active nor completed\n item.classList.remove(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n }\n });\n \n this.activeIndex = index;\n }\n\n /**\n * Moves to the next step\n */\n public next(): void {\n if (this.activeIndex < (this.$items?.length || 0) - 1) {\n this.setActive(this.activeIndex + 1);\n }\n }\n\n /**\n * Moves to the previous step\n */\n public previous(): void {\n if (this.activeIndex > 0) {\n this.setActive(this.activeIndex - 1);\n }\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n // No specific cleanup needed for steps component\n }\n}\n\n/**\n * Initialize all steps in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {StepsInstance[]} Array of Steps instances\n */\nexport function initializeSteps(selector = STEPS.SELECTORS.STEPS, options = {}): StepsInstance[] {\n const stepsInstances: StepsInstance[] = [];\n const stepsElements = document.querySelectorAll<HTMLElement>(selector);\n\n if (!stepsElements.length) return stepsInstances;\n\n stepsElements.forEach((element) => {\n try {\n const instance = new Steps(element, options);\n stepsInstances.push(instance);\n } catch (error) {\n console.error('Error initializing steps:', error);\n }\n });\n\n return stepsInstances;\n}\n\nexport default Steps; "],"names":["DEFAULT_OPTIONS","activeIndex","vertical","Steps","constructor","selector","options","arguments","length","undefined","this","STEPS","SELECTORS","$element","document","querySelector","$items","_initialize","_initializeElements","classList","contains","CLASSES","VERTICAL","add","setActive","querySelectorAll","ITEM","index","forEach","item","i","ACTIVE","COMPLETED","remove","next","previous","destroy","initializeSteps","stepsInstances","stepsElements","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(this.webpackChunkAtomix=this.webpackChunkAtomix||[]).push([[202],{202:(t,e,i)=>{i.r(e),i.d(e,{default:()=>l,initializeSteps:()=>h});var s=i(188);const n={activeIndex:0,vertical:!1};class c{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=t||s.UT.SELECTORS.STEPS,this.$element="string"==typeof t?document.querySelector(t):t,this.options={...n,...e},this.$items=null,this.activeIndex=this.options.activeIndex||0,this._initialize()}_initialize(){this.$element&&(this._initializeElements(),this.options.vertical&&!this.$element.classList.contains(s.UT.CLASSES.VERTICAL)&&this.$element.classList.add(s.UT.CLASSES.VERTICAL),this.setActive(this.activeIndex))}_initializeElements(){this.$element&&(this.$items=this.$element.querySelectorAll(s.UT.SELECTORS.ITEM))}setActive(t){this.$items&&t>=0&&this.$items.length>t&&(this.$items.forEach(((e,i)=>{t>i?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.add(s.UT.CLASSES.COMPLETED)):i===t?(e.classList.add(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED)):(e.classList.remove(s.UT.CLASSES.ACTIVE),e.classList.remove(s.UT.CLASSES.COMPLETED))})),this.activeIndex=t)}next(){(this.$items?.length||0)-1>this.activeIndex&&this.setActive(this.activeIndex+1)}previous(){this.activeIndex>0&&this.setActive(this.activeIndex-1)}destroy(){}}function h(){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const e=[],i=document.querySelectorAll(arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.UT.SELECTORS.STEPS);return i.length?(i.forEach((i=>{try{const s=new c(i,t);e.push(s)}catch(s){}})),e):e}const l=c}}]);
2
+ //# sourceMappingURL=202.atomix-0.1.5.react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/202.atomix-0.1.5.react.js","mappings":"+JAwBA,MAAMA,EAAgC,CACpCC,YAAa,EACbC,UAAU,GAMZ,MAAMC,EAYJC,WAAAA,CAAYC,GAA0C,IAAdC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EACjDG,KAAKL,SAAWA,GAAYM,EAAAA,GAAMC,UAAUD,MAC5CD,KAAKG,SACiB,iBAAbR,EACHS,SAASC,cAA2BV,GACpCA,EACNK,KAAKJ,QAAU,IAAKN,KAAoBM,GACxCI,KAAKM,OAAS,KACdN,KAAKT,YAAcS,KAAKJ,QAAQL,aAAe,EAC/CS,KAAKO,aACP,CAKQA,WAAAA,GACDP,KAAKG,WAEVH,KAAKQ,sBAGDR,KAAKJ,QAAQJ,WAAaQ,KAAKG,SAASM,UAAUC,SAAST,EAAAA,GAAMU,QAAQC,WAC3EZ,KAAKG,SAASM,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQC,UAG5CZ,KAAKc,UAAUd,KAAKT,aACtB,CAKQiB,mBAAAA,GACDR,KAAKG,WAEVH,KAAKM,OAASN,KAAKG,SAASY,iBAA8Bd,EAAAA,GAAMC,UAAUc,MAC5E,CAMOF,SAAAA,CAAUG,GACVjB,KAAKM,QAAUW,GAAQ,GAAcjB,KAAKM,OAAOR,OAArBmB,IAGjCjB,KAAKM,OAAOY,SAAQ,CAACC,EAAMC,KACjBH,EAAJG,GAEFD,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQW,YACxBF,IAAMH,GAEfE,EAAKV,UAAUI,IAAIZ,EAAAA,GAAMU,QAAQU,QACjCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,aAGpCH,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQU,QACpCF,EAAKV,UAAUc,OAAOtB,EAAAA,GAAMU,QAAQW,WACtC,IAGFtB,KAAKT,YAAc0B,EACrB,CAKOO,IAAAA,IACmBxB,KAAKM,QAAQR,QAAU,GAAK,EAAhDE,KAAKT,aACPS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOkC,QAAAA,GACDzB,KAAKT,YAAc,GACrBS,KAAKc,UAAUd,KAAKT,YAAc,EAEtC,CAKOmC,OAAAA,GACL,EAUG,SAASC,IAAiF,IAA/B/B,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3E,MAAM+B,EAAkC,GAClCC,EAAgBzB,SAASW,iBAFOlB,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAGI,EAAAA,GAAMC,UAAUD,OAIzD,OAAK4B,EAAc/B,QAEnB+B,EAAcX,SAASY,IACrB,IACE,MAAMC,EAAW,IAAItC,EAAMqC,EAASlC,GACpCgC,EAAeI,KAAKD,EACtB,CAAE,MAAOE,GAET,KAGKL,GAX2BA,CAYpC,CAEA,S","sources":["webpack://Atomix/./src/components/Steps/scripts/index.ts"],"sourcesContent":["import { STEPS } from '../../../lib/constants/components';\n\n/**\n * Interface for Steps options\n */\ninterface StepsOptions {\n activeIndex?: number;\n vertical?: boolean;\n [key: string]: any;\n}\n\n/**\n * Interface for Steps instance\n */\ninterface StepsInstance {\n setActive: (index: number) => void;\n next: () => void;\n previous: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Steps component\n */\nconst DEFAULT_OPTIONS: StepsOptions = {\n activeIndex: 0,\n vertical: false\n};\n\n/**\n * Class representing a Steps component\n */\nclass Steps implements StepsInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private options: StepsOptions;\n private $items: NodeListOf<HTMLElement> | null;\n private activeIndex: number;\n\n /**\n * Creates an instance of Steps\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || STEPS.SELECTORS.STEPS;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as StepsOptions;\n this.$items = null;\n this.activeIndex = this.options.activeIndex || 0;\n this._initialize();\n }\n\n /**\n * Initialize the steps component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n this._initializeElements();\n \n // Set vertical mode if specified\n if (this.options.vertical && !this.$element.classList.contains(STEPS.CLASSES.VERTICAL)) {\n this.$element.classList.add(STEPS.CLASSES.VERTICAL);\n }\n \n this.setActive(this.activeIndex);\n }\n\n /**\n * Initialize DOM elements\n */\n private _initializeElements(): void {\n if (!this.$element) return;\n \n this.$items = this.$element.querySelectorAll<HTMLElement>(STEPS.SELECTORS.ITEM);\n }\n\n /**\n * Sets the active step\n * @param index - The index of the step to make active\n */\n public setActive(index: number): void {\n if (!this.$items || index < 0 || index >= this.$items.length) return;\n \n // Update all items\n this.$items.forEach((item, i) => {\n if (i < index) {\n // Steps before active are completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.add(STEPS.CLASSES.COMPLETED);\n } else if (i === index) {\n // Current step is active but not completed\n item.classList.add(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n } else {\n // Future steps are neither active nor completed\n item.classList.remove(STEPS.CLASSES.ACTIVE);\n item.classList.remove(STEPS.CLASSES.COMPLETED);\n }\n });\n \n this.activeIndex = index;\n }\n\n /**\n * Moves to the next step\n */\n public next(): void {\n if (this.activeIndex < (this.$items?.length || 0) - 1) {\n this.setActive(this.activeIndex + 1);\n }\n }\n\n /**\n * Moves to the previous step\n */\n public previous(): void {\n if (this.activeIndex > 0) {\n this.setActive(this.activeIndex - 1);\n }\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n // No specific cleanup needed for steps component\n }\n}\n\n/**\n * Initialize all steps in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {StepsInstance[]} Array of Steps instances\n */\nexport function initializeSteps(selector = STEPS.SELECTORS.STEPS, options = {}): StepsInstance[] {\n const stepsInstances: StepsInstance[] = [];\n const stepsElements = document.querySelectorAll<HTMLElement>(selector);\n\n if (!stepsElements.length) return stepsInstances;\n\n stepsElements.forEach((element) => {\n try {\n const instance = new Steps(element, options);\n stepsInstances.push(instance);\n } catch (error) {\n console.error('Error initializing steps:', error);\n }\n });\n\n return stepsInstances;\n}\n\nexport default Steps; "],"names":["DEFAULT_OPTIONS","activeIndex","vertical","Steps","constructor","selector","options","arguments","length","undefined","this","STEPS","SELECTORS","$element","document","querySelector","$items","_initialize","_initializeElements","classList","contains","CLASSES","VERTICAL","add","setActive","querySelectorAll","ITEM","index","forEach","item","i","ACTIVE","COMPLETED","remove","next","previous","destroy","initializeSteps","stepsInstances","stepsElements","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_shohojdhara_atomix=self.webpackChunk_shohojdhara_atomix||[]).push([[308],{308:(e,t,s)=>{s.r(t),s.d(t,{default:()=>r,initializeUploads:()=>o});var i=s(188);const n={disabled:!1,maxSizeInMB:5,acceptedFileTypes:["application/pdf","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","image/jpeg","image/png"],multiple:!1};class l{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=e||i.oH.SELECTORS.UPLOAD,this.$element="string"==typeof e?document.querySelector(e):e,this.options={...n,...t},this.$input=null,this.$button=null,this.$loader=null,this.$loaderTitle=null,this.$loaderProgress=null,this.$loaderClose=null,this.currentFile=null,this.dragCounter=0,this._initialize()}_initialize(){this.$element&&(this._createHiddenInput(),this.$button=this.$element.querySelector(i.oH.SELECTORS.BUTTON),this.$loader=this.$element.querySelector(i.oH.SELECTORS.LOADER),this.$loaderTitle=this.$element?.querySelector(i.oH.SELECTORS.LOADER_TITLE),this.$loaderProgress=this.$element?.querySelector(i.oH.SELECTORS.LOADER_PROGRESS),this.$loaderClose=this.$element?.querySelector(i.oH.SELECTORS.LOADER_CLOSE),this.options.disabled&&this.disable(),this._setupEventListeners())}_createHiddenInput(){if(!this.$element)return;const e=document.createElement("input");e.type="file",e.style.display="none",e.accept=this.options.acceptedFileTypes?.join(",")||"",e.multiple=!!this.options.multiple,this.$element.appendChild(e),this.$input=e}_setupEventListeners(){this.$element&&this.$input&&this.$button&&(this.$button.addEventListener("click",this._handleButtonClick.bind(this)),this.$input.addEventListener("change",this._handleFileSelect.bind(this)),this.$element.addEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.addEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.addEventListener("dragover",this._handleDragOver.bind(this)),this.$element.addEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.addEventListener("click",this._handleClose.bind(this)))}_handleButtonClick(e){e.preventDefault(),this.$input&&!this.options.disabled&&this.$input.click()}_handleFileSelect(e){if(!this.$input?.files?.length)return;const t=Array.from(this.$input.files);this._processFiles(t)}_handleDragEnter(e){e.preventDefault(),this.options.disabled||(this.dragCounter++,1===this.dragCounter&&this.$element?.classList.add(i.oH.CLASSES.DRAGGING))}_handleDragLeave(e){e.preventDefault(),this.options.disabled||(this.dragCounter--,0===this.dragCounter&&this.$element?.classList.remove(i.oH.CLASSES.DRAGGING))}_handleDragOver(e){e.preventDefault()}_handleDrop(e){if(e.preventDefault(),this.options.disabled)return;if(this.dragCounter=0,this.$element?.classList.remove(i.oH.CLASSES.DRAGGING),!e.dataTransfer?.files.length)return;const t=Array.from(e.dataTransfer.files);this._processFiles(t)}_handleClose(e){e.preventDefault(),this.setStatus("idle"),this.setFile(null),this.$input&&(this.$input.value="")}_processFiles(e){if(!e.length)return;const t=(this.options.multiple?e:[e[0]]).filter((e=>this._validateFile(e)));t.length&&this.options.onFileSelect&&this.options.onFileSelect(t),t.length&&(this.setFile(t[0]),this._simulateUpload(t[0]))}_validateFile(e){if(e.size>1024*(this.options.maxSizeInMB||5)*1024)return this.setStatus("error",`File too large. Maximum size is ${this.options.maxSizeInMB}MB.`),!1;if(this.options.acceptedFileTypes?.length){if(!this.options.acceptedFileTypes.some((t=>{if(t.endsWith("/*")){const s=t.split("/")[0];return e.type.startsWith(s+"/")}return e.type===t})))return this.setStatus("error","File type not supported."),!1}return!0}_simulateUpload(e){this.setStatus("loading");let t=0;const s=setInterval((()=>{t+=5,100>t?(this.setProgress(t,Math.ceil((100-t)/5)+" seconds left"),this.options.onFileUpload&&this.options.onFileUpload(e,t)):(clearInterval(s),this.setStatus("success","Upload successful"),this.options.onFileUploadComplete&&this.options.onFileUploadComplete(e))}),500)}setFile(e){this.currentFile=e,e&&this.$loaderTitle&&(this.$loaderTitle.textContent=e.name)}setProgress(e,t){if(!this.$element||!this.$loaderProgress)return;this.$element.style.setProperty(i.oH.ATTRIBUTES.PERCENTAGE,""+e);const s=this.$element.querySelector(i.oH.SELECTORS.LOADER_PAR),n=this.$element.querySelector(i.oH.SELECTORS.LOADER_TIME);s&&(s.textContent=e+"%"),n&&t&&(n.textContent=t)}setStatus(e,t){if(this.$element){switch(this.$element.classList.remove(i.oH.CLASSES.LOADING,i.oH.CLASSES.SUCCESS,i.oH.CLASSES.ERROR),e){case"loading":this.$element.classList.add(i.oH.CLASSES.LOADING);break;case"success":this.$element.classList.add(i.oH.CLASSES.SUCCESS);break;case"error":this.$element.classList.add(i.oH.CLASSES.ERROR)}t&&this.$loaderProgress&&(this.$loaderProgress.textContent=t)}}disable(){this.$element&&this.$button&&(this.$element.classList.add(i.oH.CLASSES.DISABLED),this.$button.disabled=!0,this.options.disabled=!0)}enable(){this.$element&&this.$button&&(this.$element.classList.remove(i.oH.CLASSES.DISABLED),this.$button.disabled=!1,this.options.disabled=!1)}destroy(){this.$element&&this.$input&&this.$button&&(this.$button.removeEventListener("click",this._handleButtonClick.bind(this)),this.$input.removeEventListener("change",this._handleFileSelect.bind(this)),this.$element.removeEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.removeEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.removeEventListener("dragover",this._handleDragOver.bind(this)),this.$element.removeEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.removeEventListener("click",this._handleClose.bind(this)),this.$input.parentNode&&this.$input.parentNode.removeChild(this.$input))}}function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.oH.SELECTORS.UPLOAD,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[],n=document.querySelectorAll("string"==typeof e?e:i.oH.SELECTORS.UPLOAD);return n.length?(n.forEach((e=>{try{const i=new l(e,t);s.push(i)}catch(i){}})),s):s}const r=l}}]);
2
+ //# sourceMappingURL=308.atomix-0.1.5.react.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/308.atomix-0.1.5.react.cjs.js","mappings":"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","sources":["webpack://@shohojdhara/atomix/./src/components/Upload/scripts/index.ts"],"sourcesContent":["import { UPLOAD } from '../../../lib/constants/components';\n\n/**\n * Interface for Upload options\n */\ninterface UploadOptions {\n disabled?: boolean;\n maxSizeInMB?: number;\n acceptedFileTypes?: string[];\n multiple?: boolean;\n onFileSelect?: (files: File[]) => void;\n onFileUpload?: (file: File, progress: number) => void;\n onFileUploadComplete?: (file: File) => void;\n onFileUploadError?: (file: File, error: string) => void;\n [key: string]: any;\n}\n\n/**\n * Interface for Upload instance\n */\ninterface UploadInstance {\n setStatus: (status: 'idle' | 'loading' | 'success' | 'error', message?: string) => void;\n setProgress: (percentage: number, timeLeft?: string) => void;\n setFile: (file: File | null) => void;\n disable: () => void;\n enable: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Upload component\n */\nconst DEFAULT_OPTIONS: UploadOptions = {\n disabled: false,\n maxSizeInMB: 5,\n acceptedFileTypes: ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],\n multiple: false\n};\n\n/**\n * Class representing an Upload component\n */\nclass Upload implements UploadInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private $input: HTMLInputElement | null;\n private $button: HTMLButtonElement | null;\n private $loader: HTMLElement | null;\n private $loaderTitle: HTMLElement | null;\n private $loaderProgress: HTMLElement | null;\n private $loaderClose: HTMLButtonElement | null;\n private options: UploadOptions;\n private currentFile: File | null;\n private dragCounter: number;\n\n /**\n * Creates an instance of Upload\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || UPLOAD.SELECTORS.UPLOAD;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as UploadOptions;\n this.$input = null;\n this.$button = null;\n this.$loader = null;\n this.$loaderTitle = null;\n this.$loaderProgress = null;\n this.$loaderClose = null;\n this.currentFile = null;\n this.dragCounter = 0;\n this._initialize();\n }\n\n /**\n * Initialize the upload component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n // Create a hidden file input element\n this._createHiddenInput();\n\n // Get references to elements\n this.$button = this.$element.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.BUTTON);\n this.$loader = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER);\n this.$loaderTitle = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TITLE);\n this.$loaderProgress = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PROGRESS);\n this.$loaderClose = this.$element?.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.LOADER_CLOSE);\n\n // Apply disabled state if specified\n if (this.options.disabled) {\n this.disable();\n }\n\n // Set up event listeners\n this._setupEventListeners();\n }\n\n /**\n * Creates a hidden file input element and appends it to the element\n */\n private _createHiddenInput(): void {\n if (!this.$element) return;\n\n // Create input element\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n input.accept = this.options.acceptedFileTypes?.join(',') || '';\n input.multiple = !!this.options.multiple;\n \n // Append to element\n this.$element.appendChild(input);\n this.$input = input;\n }\n\n /**\n * Set up all event listeners\n */\n private _setupEventListeners(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n\n // Button click handler\n this.$button.addEventListener('click', this._handleButtonClick.bind(this));\n\n // Input change handler\n this.$input.addEventListener('change', this._handleFileSelect.bind(this));\n\n // Drag and drop handlers\n this.$element.addEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.addEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.addEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.addEventListener('drop', this._handleDrop.bind(this));\n\n // Close button handler\n if (this.$loaderClose) {\n this.$loaderClose.addEventListener('click', this._handleClose.bind(this));\n }\n }\n\n /**\n * Handle button click\n */\n private _handleButtonClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.$input && !this.options.disabled) {\n this.$input.click();\n }\n }\n\n /**\n * Handle file selection from the input element\n */\n private _handleFileSelect(event: Event): void {\n if (!this.$input?.files?.length) return;\n \n const files = Array.from(this.$input.files);\n this._processFiles(files);\n }\n\n /**\n * Handle drag enter event\n */\n private _handleDragEnter(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter++;\n if (this.dragCounter === 1) {\n this.$element?.classList.add(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag leave event\n */\n private _handleDragLeave(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter--;\n if (this.dragCounter === 0) {\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag over event\n */\n private _handleDragOver(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n }\n\n /**\n * Handle drop event\n */\n private _handleDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter = 0;\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n \n if (!event.dataTransfer?.files.length) return;\n \n const files = Array.from(event.dataTransfer.files);\n this._processFiles(files);\n }\n\n /**\n * Handle close button click\n */\n private _handleClose(event: MouseEvent): void {\n event.preventDefault();\n \n // Reset state\n this.setStatus('idle');\n this.setFile(null);\n \n // Reset input\n if (this.$input) {\n this.$input.value = '';\n }\n }\n\n /**\n * Process the selected files\n */\n private _processFiles(files: File[]): void {\n if (!files.length) return;\n \n // If multiple is not allowed, take only the first file\n const filesToProcess = this.options.multiple ? files : [files[0]];\n \n // Validate files\n const validFiles = filesToProcess.filter(file => this._validateFile(file));\n \n // Notify about file selection\n if (validFiles.length && this.options.onFileSelect) {\n this.options.onFileSelect(validFiles);\n }\n \n // Process the first valid file\n if (validFiles.length) {\n this.setFile(validFiles[0]);\n this._simulateUpload(validFiles[0]);\n }\n }\n\n /**\n * Validate a file based on size and type\n */\n private _validateFile(file: File): boolean {\n const maxSizeInBytes = (this.options.maxSizeInMB || 5) * 1024 * 1024;\n \n // Check file size\n if (file.size > maxSizeInBytes) {\n this.setStatus('error', `File too large. Maximum size is ${this.options.maxSizeInMB}MB.`);\n return false;\n }\n \n // Check file type if acceptedFileTypes is provided\n if (this.options.acceptedFileTypes?.length) {\n const isAcceptedType = this.options.acceptedFileTypes.some(type => {\n // Handle wildcards like image/*\n if (type.endsWith('/*')) {\n const mainType = type.split('/')[0];\n return file.type.startsWith(`${mainType}/`);\n }\n return file.type === type;\n });\n \n if (!isAcceptedType) {\n this.setStatus('error', 'File type not supported.');\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Simulate a file upload process\n * In a real implementation, this would be replaced with actual upload logic\n */\n private _simulateUpload(file: File): void {\n this.setStatus('loading');\n let progress = 0;\n \n const interval = setInterval(() => {\n progress += 5;\n \n if (progress < 100) {\n this.setProgress(progress, `${Math.ceil((100 - progress) / 5)} seconds left`);\n \n if (this.options.onFileUpload) {\n this.options.onFileUpload(file, progress);\n }\n } else {\n clearInterval(interval);\n this.setStatus('success', 'Upload successful');\n \n if (this.options.onFileUploadComplete) {\n this.options.onFileUploadComplete(file);\n }\n }\n }, 500);\n }\n\n /**\n * Set current file\n */\n public setFile(file: File | null): void {\n this.currentFile = file;\n \n if (file && this.$loaderTitle) {\n this.$loaderTitle.textContent = file.name;\n }\n }\n\n /**\n * Set upload progress\n */\n public setProgress(percentage: number, timeLeft?: string): void {\n if (!this.$element || !this.$loaderProgress) return;\n \n // Set percentage as CSS variable\n this.$element.style.setProperty(UPLOAD.ATTRIBUTES.PERCENTAGE, percentage.toString());\n \n // Update the loader elements if they exist\n const $par = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PAR);\n const $time = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TIME);\n \n if ($par) {\n $par.textContent = `${percentage}%`;\n }\n \n if ($time && timeLeft) {\n $time.textContent = timeLeft;\n }\n }\n\n /**\n * Set upload status\n */\n public setStatus(status: 'idle' | 'loading' | 'success' | 'error', message?: string): void {\n if (!this.$element) return;\n \n // Remove all status classes\n this.$element.classList.remove(\n UPLOAD.CLASSES.LOADING,\n UPLOAD.CLASSES.SUCCESS,\n UPLOAD.CLASSES.ERROR\n );\n \n // Add appropriate class based on status\n switch (status) {\n case 'loading':\n this.$element.classList.add(UPLOAD.CLASSES.LOADING);\n break;\n case 'success':\n this.$element.classList.add(UPLOAD.CLASSES.SUCCESS);\n break;\n case 'error':\n this.$element.classList.add(UPLOAD.CLASSES.ERROR);\n break;\n }\n \n // Update message if provided and loader exists\n if (message && this.$loaderProgress) {\n this.$loaderProgress.textContent = message;\n }\n }\n\n /**\n * Disable the upload component\n */\n public disable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.add(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = true;\n this.options.disabled = true;\n }\n\n /**\n * Enable the upload component\n */\n public enable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.remove(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = false;\n this.options.disabled = false;\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n \n // Remove event listeners\n this.$button.removeEventListener('click', this._handleButtonClick.bind(this));\n this.$input.removeEventListener('change', this._handleFileSelect.bind(this));\n this.$element.removeEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.removeEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.removeEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.removeEventListener('drop', this._handleDrop.bind(this));\n \n if (this.$loaderClose) {\n this.$loaderClose.removeEventListener('click', this._handleClose.bind(this));\n }\n \n // Remove input element\n if (this.$input.parentNode) {\n this.$input.parentNode.removeChild(this.$input);\n }\n }\n}\n\n/**\n * Initialize all upload components in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {UploadInstance[]} Array of Upload instances\n */\nexport function initializeUploads(selector = UPLOAD.SELECTORS.UPLOAD, options = {}): UploadInstance[] {\n const uploadInstances: UploadInstance[] = [];\n const uploadElements = document.querySelectorAll<HTMLElement>(typeof selector === 'string' ? selector : UPLOAD.SELECTORS.UPLOAD);\n\n if (!uploadElements.length) return uploadInstances;\n\n uploadElements.forEach((element) => {\n try {\n const instance = new Upload(element, options);\n uploadInstances.push(instance);\n } catch (error) {\n console.error('Error initializing upload:', error);\n }\n });\n\n return uploadInstances;\n}\n\nexport default Upload; "],"names":["DEFAULT_OPTIONS","disabled","maxSizeInMB","acceptedFileTypes","multiple","Upload","constructor","selector","options","arguments","length","undefined","this","UPLOAD","SELECTORS","$element","document","querySelector","$input","$button","$loader","$loaderTitle","$loaderProgress","$loaderClose","currentFile","dragCounter","_initialize","_createHiddenInput","BUTTON","LOADER","LOADER_TITLE","LOADER_PROGRESS","LOADER_CLOSE","disable","_setupEventListeners","input","createElement","type","style","display","accept","join","appendChild","addEventListener","_handleButtonClick","bind","_handleFileSelect","_handleDragEnter","_handleDragLeave","_handleDragOver","_handleDrop","_handleClose","event","preventDefault","click","files","Array","from","_processFiles","classList","add","CLASSES","DRAGGING","remove","dataTransfer","setStatus","setFile","value","validFiles","filter","file","_validateFile","onFileSelect","_simulateUpload","size","some","endsWith","mainType","split","startsWith","progress","interval","setInterval","setProgress","Math","ceil","onFileUpload","clearInterval","onFileUploadComplete","textContent","name","percentage","timeLeft","setProperty","ATTRIBUTES","PERCENTAGE","$par","LOADER_PAR","$time","LOADER_TIME","status","message","LOADING","SUCCESS","ERROR","DISABLED","enable","destroy","removeEventListener","parentNode","removeChild","initializeUploads","uploadInstances","uploadElements","querySelectorAll","forEach","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=308;export const __webpack_ids__=[308];export const __webpack_modules__={308:(e,t,i)=>{i.r(t),i.d(t,{default:()=>r,initializeUploads:()=>o});var s=i(188);const n={disabled:!1,maxSizeInMB:5,acceptedFileTypes:["application/pdf","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","image/jpeg","image/png"],multiple:!1};class l{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=e||s.oH.SELECTORS.UPLOAD,this.$element="string"==typeof e?document.querySelector(e):e,this.options={...n,...t},this.$input=null,this.$button=null,this.$loader=null,this.$loaderTitle=null,this.$loaderProgress=null,this.$loaderClose=null,this.currentFile=null,this.dragCounter=0,this._initialize()}_initialize(){this.$element&&(this._createHiddenInput(),this.$button=this.$element.querySelector(s.oH.SELECTORS.BUTTON),this.$loader=this.$element.querySelector(s.oH.SELECTORS.LOADER),this.$loaderTitle=this.$element?.querySelector(s.oH.SELECTORS.LOADER_TITLE),this.$loaderProgress=this.$element?.querySelector(s.oH.SELECTORS.LOADER_PROGRESS),this.$loaderClose=this.$element?.querySelector(s.oH.SELECTORS.LOADER_CLOSE),this.options.disabled&&this.disable(),this._setupEventListeners())}_createHiddenInput(){if(!this.$element)return;const e=document.createElement("input");e.type="file",e.style.display="none",e.accept=this.options.acceptedFileTypes?.join(",")||"",e.multiple=!!this.options.multiple,this.$element.appendChild(e),this.$input=e}_setupEventListeners(){this.$element&&this.$input&&this.$button&&(this.$button.addEventListener("click",this._handleButtonClick.bind(this)),this.$input.addEventListener("change",this._handleFileSelect.bind(this)),this.$element.addEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.addEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.addEventListener("dragover",this._handleDragOver.bind(this)),this.$element.addEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.addEventListener("click",this._handleClose.bind(this)))}_handleButtonClick(e){e.preventDefault(),this.$input&&!this.options.disabled&&this.$input.click()}_handleFileSelect(e){if(!this.$input?.files?.length)return;const t=Array.from(this.$input.files);this._processFiles(t)}_handleDragEnter(e){e.preventDefault(),this.options.disabled||(this.dragCounter++,1===this.dragCounter&&this.$element?.classList.add(s.oH.CLASSES.DRAGGING))}_handleDragLeave(e){e.preventDefault(),this.options.disabled||(this.dragCounter--,0===this.dragCounter&&this.$element?.classList.remove(s.oH.CLASSES.DRAGGING))}_handleDragOver(e){e.preventDefault()}_handleDrop(e){if(e.preventDefault(),this.options.disabled)return;if(this.dragCounter=0,this.$element?.classList.remove(s.oH.CLASSES.DRAGGING),!e.dataTransfer?.files.length)return;const t=Array.from(e.dataTransfer.files);this._processFiles(t)}_handleClose(e){e.preventDefault(),this.setStatus("idle"),this.setFile(null),this.$input&&(this.$input.value="")}_processFiles(e){if(!e.length)return;const t=(this.options.multiple?e:[e[0]]).filter((e=>this._validateFile(e)));t.length&&this.options.onFileSelect&&this.options.onFileSelect(t),t.length&&(this.setFile(t[0]),this._simulateUpload(t[0]))}_validateFile(e){if(e.size>1024*(this.options.maxSizeInMB||5)*1024)return this.setStatus("error",`File too large. Maximum size is ${this.options.maxSizeInMB}MB.`),!1;if(this.options.acceptedFileTypes?.length){if(!this.options.acceptedFileTypes.some((t=>{if(t.endsWith("/*")){const i=t.split("/")[0];return e.type.startsWith(i+"/")}return e.type===t})))return this.setStatus("error","File type not supported."),!1}return!0}_simulateUpload(e){this.setStatus("loading");let t=0;const i=setInterval((()=>{t+=5,100>t?(this.setProgress(t,Math.ceil((100-t)/5)+" seconds left"),this.options.onFileUpload&&this.options.onFileUpload(e,t)):(clearInterval(i),this.setStatus("success","Upload successful"),this.options.onFileUploadComplete&&this.options.onFileUploadComplete(e))}),500)}setFile(e){this.currentFile=e,e&&this.$loaderTitle&&(this.$loaderTitle.textContent=e.name)}setProgress(e,t){if(!this.$element||!this.$loaderProgress)return;this.$element.style.setProperty(s.oH.ATTRIBUTES.PERCENTAGE,""+e);const i=this.$element.querySelector(s.oH.SELECTORS.LOADER_PAR),n=this.$element.querySelector(s.oH.SELECTORS.LOADER_TIME);i&&(i.textContent=e+"%"),n&&t&&(n.textContent=t)}setStatus(e,t){if(this.$element){switch(this.$element.classList.remove(s.oH.CLASSES.LOADING,s.oH.CLASSES.SUCCESS,s.oH.CLASSES.ERROR),e){case"loading":this.$element.classList.add(s.oH.CLASSES.LOADING);break;case"success":this.$element.classList.add(s.oH.CLASSES.SUCCESS);break;case"error":this.$element.classList.add(s.oH.CLASSES.ERROR)}t&&this.$loaderProgress&&(this.$loaderProgress.textContent=t)}}disable(){this.$element&&this.$button&&(this.$element.classList.add(s.oH.CLASSES.DISABLED),this.$button.disabled=!0,this.options.disabled=!0)}enable(){this.$element&&this.$button&&(this.$element.classList.remove(s.oH.CLASSES.DISABLED),this.$button.disabled=!1,this.options.disabled=!1)}destroy(){this.$element&&this.$input&&this.$button&&(this.$button.removeEventListener("click",this._handleButtonClick.bind(this)),this.$input.removeEventListener("change",this._handleFileSelect.bind(this)),this.$element.removeEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.removeEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.removeEventListener("dragover",this._handleDragOver.bind(this)),this.$element.removeEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.removeEventListener("click",this._handleClose.bind(this)),this.$input.parentNode&&this.$input.parentNode.removeChild(this.$input))}}function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.oH.SELECTORS.UPLOAD,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],n=document.querySelectorAll("string"==typeof e?e:s.oH.SELECTORS.UPLOAD);return n.length?(n.forEach((e=>{try{const s=new l(e,t);i.push(s)}catch(s){}})),i):i}const r=l}};
2
+ //# sourceMappingURL=308.atomix-0.1.5.react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/308.atomix-0.1.5.react.esm.js","mappings":"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","sources":["webpack://@shohojdhara/atomix/./src/components/Upload/scripts/index.ts"],"sourcesContent":["import { UPLOAD } from '../../../lib/constants/components';\n\n/**\n * Interface for Upload options\n */\ninterface UploadOptions {\n disabled?: boolean;\n maxSizeInMB?: number;\n acceptedFileTypes?: string[];\n multiple?: boolean;\n onFileSelect?: (files: File[]) => void;\n onFileUpload?: (file: File, progress: number) => void;\n onFileUploadComplete?: (file: File) => void;\n onFileUploadError?: (file: File, error: string) => void;\n [key: string]: any;\n}\n\n/**\n * Interface for Upload instance\n */\ninterface UploadInstance {\n setStatus: (status: 'idle' | 'loading' | 'success' | 'error', message?: string) => void;\n setProgress: (percentage: number, timeLeft?: string) => void;\n setFile: (file: File | null) => void;\n disable: () => void;\n enable: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Upload component\n */\nconst DEFAULT_OPTIONS: UploadOptions = {\n disabled: false,\n maxSizeInMB: 5,\n acceptedFileTypes: ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],\n multiple: false\n};\n\n/**\n * Class representing an Upload component\n */\nclass Upload implements UploadInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private $input: HTMLInputElement | null;\n private $button: HTMLButtonElement | null;\n private $loader: HTMLElement | null;\n private $loaderTitle: HTMLElement | null;\n private $loaderProgress: HTMLElement | null;\n private $loaderClose: HTMLButtonElement | null;\n private options: UploadOptions;\n private currentFile: File | null;\n private dragCounter: number;\n\n /**\n * Creates an instance of Upload\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || UPLOAD.SELECTORS.UPLOAD;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as UploadOptions;\n this.$input = null;\n this.$button = null;\n this.$loader = null;\n this.$loaderTitle = null;\n this.$loaderProgress = null;\n this.$loaderClose = null;\n this.currentFile = null;\n this.dragCounter = 0;\n this._initialize();\n }\n\n /**\n * Initialize the upload component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n // Create a hidden file input element\n this._createHiddenInput();\n\n // Get references to elements\n this.$button = this.$element.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.BUTTON);\n this.$loader = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER);\n this.$loaderTitle = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TITLE);\n this.$loaderProgress = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PROGRESS);\n this.$loaderClose = this.$element?.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.LOADER_CLOSE);\n\n // Apply disabled state if specified\n if (this.options.disabled) {\n this.disable();\n }\n\n // Set up event listeners\n this._setupEventListeners();\n }\n\n /**\n * Creates a hidden file input element and appends it to the element\n */\n private _createHiddenInput(): void {\n if (!this.$element) return;\n\n // Create input element\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n input.accept = this.options.acceptedFileTypes?.join(',') || '';\n input.multiple = !!this.options.multiple;\n \n // Append to element\n this.$element.appendChild(input);\n this.$input = input;\n }\n\n /**\n * Set up all event listeners\n */\n private _setupEventListeners(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n\n // Button click handler\n this.$button.addEventListener('click', this._handleButtonClick.bind(this));\n\n // Input change handler\n this.$input.addEventListener('change', this._handleFileSelect.bind(this));\n\n // Drag and drop handlers\n this.$element.addEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.addEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.addEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.addEventListener('drop', this._handleDrop.bind(this));\n\n // Close button handler\n if (this.$loaderClose) {\n this.$loaderClose.addEventListener('click', this._handleClose.bind(this));\n }\n }\n\n /**\n * Handle button click\n */\n private _handleButtonClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.$input && !this.options.disabled) {\n this.$input.click();\n }\n }\n\n /**\n * Handle file selection from the input element\n */\n private _handleFileSelect(event: Event): void {\n if (!this.$input?.files?.length) return;\n \n const files = Array.from(this.$input.files);\n this._processFiles(files);\n }\n\n /**\n * Handle drag enter event\n */\n private _handleDragEnter(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter++;\n if (this.dragCounter === 1) {\n this.$element?.classList.add(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag leave event\n */\n private _handleDragLeave(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter--;\n if (this.dragCounter === 0) {\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag over event\n */\n private _handleDragOver(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n }\n\n /**\n * Handle drop event\n */\n private _handleDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter = 0;\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n \n if (!event.dataTransfer?.files.length) return;\n \n const files = Array.from(event.dataTransfer.files);\n this._processFiles(files);\n }\n\n /**\n * Handle close button click\n */\n private _handleClose(event: MouseEvent): void {\n event.preventDefault();\n \n // Reset state\n this.setStatus('idle');\n this.setFile(null);\n \n // Reset input\n if (this.$input) {\n this.$input.value = '';\n }\n }\n\n /**\n * Process the selected files\n */\n private _processFiles(files: File[]): void {\n if (!files.length) return;\n \n // If multiple is not allowed, take only the first file\n const filesToProcess = this.options.multiple ? files : [files[0]];\n \n // Validate files\n const validFiles = filesToProcess.filter(file => this._validateFile(file));\n \n // Notify about file selection\n if (validFiles.length && this.options.onFileSelect) {\n this.options.onFileSelect(validFiles);\n }\n \n // Process the first valid file\n if (validFiles.length) {\n this.setFile(validFiles[0]);\n this._simulateUpload(validFiles[0]);\n }\n }\n\n /**\n * Validate a file based on size and type\n */\n private _validateFile(file: File): boolean {\n const maxSizeInBytes = (this.options.maxSizeInMB || 5) * 1024 * 1024;\n \n // Check file size\n if (file.size > maxSizeInBytes) {\n this.setStatus('error', `File too large. Maximum size is ${this.options.maxSizeInMB}MB.`);\n return false;\n }\n \n // Check file type if acceptedFileTypes is provided\n if (this.options.acceptedFileTypes?.length) {\n const isAcceptedType = this.options.acceptedFileTypes.some(type => {\n // Handle wildcards like image/*\n if (type.endsWith('/*')) {\n const mainType = type.split('/')[0];\n return file.type.startsWith(`${mainType}/`);\n }\n return file.type === type;\n });\n \n if (!isAcceptedType) {\n this.setStatus('error', 'File type not supported.');\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Simulate a file upload process\n * In a real implementation, this would be replaced with actual upload logic\n */\n private _simulateUpload(file: File): void {\n this.setStatus('loading');\n let progress = 0;\n \n const interval = setInterval(() => {\n progress += 5;\n \n if (progress < 100) {\n this.setProgress(progress, `${Math.ceil((100 - progress) / 5)} seconds left`);\n \n if (this.options.onFileUpload) {\n this.options.onFileUpload(file, progress);\n }\n } else {\n clearInterval(interval);\n this.setStatus('success', 'Upload successful');\n \n if (this.options.onFileUploadComplete) {\n this.options.onFileUploadComplete(file);\n }\n }\n }, 500);\n }\n\n /**\n * Set current file\n */\n public setFile(file: File | null): void {\n this.currentFile = file;\n \n if (file && this.$loaderTitle) {\n this.$loaderTitle.textContent = file.name;\n }\n }\n\n /**\n * Set upload progress\n */\n public setProgress(percentage: number, timeLeft?: string): void {\n if (!this.$element || !this.$loaderProgress) return;\n \n // Set percentage as CSS variable\n this.$element.style.setProperty(UPLOAD.ATTRIBUTES.PERCENTAGE, percentage.toString());\n \n // Update the loader elements if they exist\n const $par = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PAR);\n const $time = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TIME);\n \n if ($par) {\n $par.textContent = `${percentage}%`;\n }\n \n if ($time && timeLeft) {\n $time.textContent = timeLeft;\n }\n }\n\n /**\n * Set upload status\n */\n public setStatus(status: 'idle' | 'loading' | 'success' | 'error', message?: string): void {\n if (!this.$element) return;\n \n // Remove all status classes\n this.$element.classList.remove(\n UPLOAD.CLASSES.LOADING,\n UPLOAD.CLASSES.SUCCESS,\n UPLOAD.CLASSES.ERROR\n );\n \n // Add appropriate class based on status\n switch (status) {\n case 'loading':\n this.$element.classList.add(UPLOAD.CLASSES.LOADING);\n break;\n case 'success':\n this.$element.classList.add(UPLOAD.CLASSES.SUCCESS);\n break;\n case 'error':\n this.$element.classList.add(UPLOAD.CLASSES.ERROR);\n break;\n }\n \n // Update message if provided and loader exists\n if (message && this.$loaderProgress) {\n this.$loaderProgress.textContent = message;\n }\n }\n\n /**\n * Disable the upload component\n */\n public disable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.add(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = true;\n this.options.disabled = true;\n }\n\n /**\n * Enable the upload component\n */\n public enable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.remove(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = false;\n this.options.disabled = false;\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n \n // Remove event listeners\n this.$button.removeEventListener('click', this._handleButtonClick.bind(this));\n this.$input.removeEventListener('change', this._handleFileSelect.bind(this));\n this.$element.removeEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.removeEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.removeEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.removeEventListener('drop', this._handleDrop.bind(this));\n \n if (this.$loaderClose) {\n this.$loaderClose.removeEventListener('click', this._handleClose.bind(this));\n }\n \n // Remove input element\n if (this.$input.parentNode) {\n this.$input.parentNode.removeChild(this.$input);\n }\n }\n}\n\n/**\n * Initialize all upload components in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {UploadInstance[]} Array of Upload instances\n */\nexport function initializeUploads(selector = UPLOAD.SELECTORS.UPLOAD, options = {}): UploadInstance[] {\n const uploadInstances: UploadInstance[] = [];\n const uploadElements = document.querySelectorAll<HTMLElement>(typeof selector === 'string' ? selector : UPLOAD.SELECTORS.UPLOAD);\n\n if (!uploadElements.length) return uploadInstances;\n\n uploadElements.forEach((element) => {\n try {\n const instance = new Upload(element, options);\n uploadInstances.push(instance);\n } catch (error) {\n console.error('Error initializing upload:', error);\n }\n });\n\n return uploadInstances;\n}\n\nexport default Upload; "],"names":["DEFAULT_OPTIONS","disabled","maxSizeInMB","acceptedFileTypes","multiple","Upload","constructor","selector","options","arguments","length","undefined","this","UPLOAD","SELECTORS","$element","document","querySelector","$input","$button","$loader","$loaderTitle","$loaderProgress","$loaderClose","currentFile","dragCounter","_initialize","_createHiddenInput","BUTTON","LOADER","LOADER_TITLE","LOADER_PROGRESS","LOADER_CLOSE","disable","_setupEventListeners","input","createElement","type","style","display","accept","join","appendChild","addEventListener","_handleButtonClick","bind","_handleFileSelect","_handleDragEnter","_handleDragLeave","_handleDragOver","_handleDrop","_handleClose","event","preventDefault","click","files","Array","from","_processFiles","classList","add","CLASSES","DRAGGING","remove","dataTransfer","setStatus","setFile","value","validFiles","filter","file","_validateFile","onFileSelect","_simulateUpload","size","some","endsWith","mainType","split","startsWith","progress","interval","setInterval","setProgress","Math","ceil","onFileUpload","clearInterval","onFileUploadComplete","textContent","name","percentage","timeLeft","setProperty","ATTRIBUTES","PERCENTAGE","$par","LOADER_PAR","$time","LOADER_TIME","status","message","LOADING","SUCCESS","ERROR","DISABLED","enable","destroy","removeEventListener","parentNode","removeChild","initializeUploads","uploadInstances","uploadElements","querySelectorAll","forEach","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(this.webpackChunkAtomix=this.webpackChunkAtomix||[]).push([[308],{308:(e,t,i)=>{i.r(t),i.d(t,{default:()=>r,initializeUploads:()=>o});var s=i(188);const n={disabled:!1,maxSizeInMB:5,acceptedFileTypes:["application/pdf","application/vnd.ms-excel","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","image/jpeg","image/png"],multiple:!1};class l{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.selector=e||s.oH.SELECTORS.UPLOAD,this.$element="string"==typeof e?document.querySelector(e):e,this.options={...n,...t},this.$input=null,this.$button=null,this.$loader=null,this.$loaderTitle=null,this.$loaderProgress=null,this.$loaderClose=null,this.currentFile=null,this.dragCounter=0,this._initialize()}_initialize(){this.$element&&(this._createHiddenInput(),this.$button=this.$element.querySelector(s.oH.SELECTORS.BUTTON),this.$loader=this.$element.querySelector(s.oH.SELECTORS.LOADER),this.$loaderTitle=this.$element?.querySelector(s.oH.SELECTORS.LOADER_TITLE),this.$loaderProgress=this.$element?.querySelector(s.oH.SELECTORS.LOADER_PROGRESS),this.$loaderClose=this.$element?.querySelector(s.oH.SELECTORS.LOADER_CLOSE),this.options.disabled&&this.disable(),this._setupEventListeners())}_createHiddenInput(){if(!this.$element)return;const e=document.createElement("input");e.type="file",e.style.display="none",e.accept=this.options.acceptedFileTypes?.join(",")||"",e.multiple=!!this.options.multiple,this.$element.appendChild(e),this.$input=e}_setupEventListeners(){this.$element&&this.$input&&this.$button&&(this.$button.addEventListener("click",this._handleButtonClick.bind(this)),this.$input.addEventListener("change",this._handleFileSelect.bind(this)),this.$element.addEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.addEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.addEventListener("dragover",this._handleDragOver.bind(this)),this.$element.addEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.addEventListener("click",this._handleClose.bind(this)))}_handleButtonClick(e){e.preventDefault(),this.$input&&!this.options.disabled&&this.$input.click()}_handleFileSelect(e){if(!this.$input?.files?.length)return;const t=Array.from(this.$input.files);this._processFiles(t)}_handleDragEnter(e){e.preventDefault(),this.options.disabled||(this.dragCounter++,1===this.dragCounter&&this.$element?.classList.add(s.oH.CLASSES.DRAGGING))}_handleDragLeave(e){e.preventDefault(),this.options.disabled||(this.dragCounter--,0===this.dragCounter&&this.$element?.classList.remove(s.oH.CLASSES.DRAGGING))}_handleDragOver(e){e.preventDefault()}_handleDrop(e){if(e.preventDefault(),this.options.disabled)return;if(this.dragCounter=0,this.$element?.classList.remove(s.oH.CLASSES.DRAGGING),!e.dataTransfer?.files.length)return;const t=Array.from(e.dataTransfer.files);this._processFiles(t)}_handleClose(e){e.preventDefault(),this.setStatus("idle"),this.setFile(null),this.$input&&(this.$input.value="")}_processFiles(e){if(!e.length)return;const t=(this.options.multiple?e:[e[0]]).filter((e=>this._validateFile(e)));t.length&&this.options.onFileSelect&&this.options.onFileSelect(t),t.length&&(this.setFile(t[0]),this._simulateUpload(t[0]))}_validateFile(e){if(e.size>1024*(this.options.maxSizeInMB||5)*1024)return this.setStatus("error",`File too large. Maximum size is ${this.options.maxSizeInMB}MB.`),!1;if(this.options.acceptedFileTypes?.length){if(!this.options.acceptedFileTypes.some((t=>{if(t.endsWith("/*")){const i=t.split("/")[0];return e.type.startsWith(i+"/")}return e.type===t})))return this.setStatus("error","File type not supported."),!1}return!0}_simulateUpload(e){this.setStatus("loading");let t=0;const i=setInterval((()=>{t+=5,100>t?(this.setProgress(t,Math.ceil((100-t)/5)+" seconds left"),this.options.onFileUpload&&this.options.onFileUpload(e,t)):(clearInterval(i),this.setStatus("success","Upload successful"),this.options.onFileUploadComplete&&this.options.onFileUploadComplete(e))}),500)}setFile(e){this.currentFile=e,e&&this.$loaderTitle&&(this.$loaderTitle.textContent=e.name)}setProgress(e,t){if(!this.$element||!this.$loaderProgress)return;this.$element.style.setProperty(s.oH.ATTRIBUTES.PERCENTAGE,""+e);const i=this.$element.querySelector(s.oH.SELECTORS.LOADER_PAR),n=this.$element.querySelector(s.oH.SELECTORS.LOADER_TIME);i&&(i.textContent=e+"%"),n&&t&&(n.textContent=t)}setStatus(e,t){if(this.$element){switch(this.$element.classList.remove(s.oH.CLASSES.LOADING,s.oH.CLASSES.SUCCESS,s.oH.CLASSES.ERROR),e){case"loading":this.$element.classList.add(s.oH.CLASSES.LOADING);break;case"success":this.$element.classList.add(s.oH.CLASSES.SUCCESS);break;case"error":this.$element.classList.add(s.oH.CLASSES.ERROR)}t&&this.$loaderProgress&&(this.$loaderProgress.textContent=t)}}disable(){this.$element&&this.$button&&(this.$element.classList.add(s.oH.CLASSES.DISABLED),this.$button.disabled=!0,this.options.disabled=!0)}enable(){this.$element&&this.$button&&(this.$element.classList.remove(s.oH.CLASSES.DISABLED),this.$button.disabled=!1,this.options.disabled=!1)}destroy(){this.$element&&this.$input&&this.$button&&(this.$button.removeEventListener("click",this._handleButtonClick.bind(this)),this.$input.removeEventListener("change",this._handleFileSelect.bind(this)),this.$element.removeEventListener("dragenter",this._handleDragEnter.bind(this)),this.$element.removeEventListener("dragleave",this._handleDragLeave.bind(this)),this.$element.removeEventListener("dragover",this._handleDragOver.bind(this)),this.$element.removeEventListener("drop",this._handleDrop.bind(this)),this.$loaderClose&&this.$loaderClose.removeEventListener("click",this._handleClose.bind(this)),this.$input.parentNode&&this.$input.parentNode.removeChild(this.$input))}}function o(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s.oH.SELECTORS.UPLOAD,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=[],n=document.querySelectorAll("string"==typeof e?e:s.oH.SELECTORS.UPLOAD);return n.length?(n.forEach((e=>{try{const s=new l(e,t);i.push(s)}catch(s){}})),i):i}const r=l}}]);
2
+ //# sourceMappingURL=308.atomix-0.1.5.react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/308.atomix-0.1.5.react.js","mappings":"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","sources":["webpack://Atomix/./src/components/Upload/scripts/index.ts"],"sourcesContent":["import { UPLOAD } from '../../../lib/constants/components';\n\n/**\n * Interface for Upload options\n */\ninterface UploadOptions {\n disabled?: boolean;\n maxSizeInMB?: number;\n acceptedFileTypes?: string[];\n multiple?: boolean;\n onFileSelect?: (files: File[]) => void;\n onFileUpload?: (file: File, progress: number) => void;\n onFileUploadComplete?: (file: File) => void;\n onFileUploadError?: (file: File, error: string) => void;\n [key: string]: any;\n}\n\n/**\n * Interface for Upload instance\n */\ninterface UploadInstance {\n setStatus: (status: 'idle' | 'loading' | 'success' | 'error', message?: string) => void;\n setProgress: (percentage: number, timeLeft?: string) => void;\n setFile: (file: File | null) => void;\n disable: () => void;\n enable: () => void;\n destroy: () => void;\n}\n\n/**\n * Default options for the Upload component\n */\nconst DEFAULT_OPTIONS: UploadOptions = {\n disabled: false,\n maxSizeInMB: 5,\n acceptedFileTypes: ['application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'image/jpeg', 'image/png'],\n multiple: false\n};\n\n/**\n * Class representing an Upload component\n */\nclass Upload implements UploadInstance {\n private selector: string | Element;\n private $element: HTMLElement | null;\n private $input: HTMLInputElement | null;\n private $button: HTMLButtonElement | null;\n private $loader: HTMLElement | null;\n private $loaderTitle: HTMLElement | null;\n private $loaderProgress: HTMLElement | null;\n private $loaderClose: HTMLButtonElement | null;\n private options: UploadOptions;\n private currentFile: File | null;\n private dragCounter: number;\n\n /**\n * Creates an instance of Upload\n * @param selector - CSS selector string or DOM Element\n * @param options - Custom options to override defaults\n */\n constructor(selector: string | Element, options = {}) {\n this.selector = selector || UPLOAD.SELECTORS.UPLOAD;\n this.$element =\n typeof selector === 'string'\n ? document.querySelector<HTMLElement>(selector)\n : selector as HTMLElement;\n this.options = { ...DEFAULT_OPTIONS, ...options } as UploadOptions;\n this.$input = null;\n this.$button = null;\n this.$loader = null;\n this.$loaderTitle = null;\n this.$loaderProgress = null;\n this.$loaderClose = null;\n this.currentFile = null;\n this.dragCounter = 0;\n this._initialize();\n }\n\n /**\n * Initialize the upload component\n */\n private _initialize(): void {\n if (!this.$element) return;\n\n // Create a hidden file input element\n this._createHiddenInput();\n\n // Get references to elements\n this.$button = this.$element.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.BUTTON);\n this.$loader = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER);\n this.$loaderTitle = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TITLE);\n this.$loaderProgress = this.$element?.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PROGRESS);\n this.$loaderClose = this.$element?.querySelector<HTMLButtonElement>(UPLOAD.SELECTORS.LOADER_CLOSE);\n\n // Apply disabled state if specified\n if (this.options.disabled) {\n this.disable();\n }\n\n // Set up event listeners\n this._setupEventListeners();\n }\n\n /**\n * Creates a hidden file input element and appends it to the element\n */\n private _createHiddenInput(): void {\n if (!this.$element) return;\n\n // Create input element\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n input.accept = this.options.acceptedFileTypes?.join(',') || '';\n input.multiple = !!this.options.multiple;\n \n // Append to element\n this.$element.appendChild(input);\n this.$input = input;\n }\n\n /**\n * Set up all event listeners\n */\n private _setupEventListeners(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n\n // Button click handler\n this.$button.addEventListener('click', this._handleButtonClick.bind(this));\n\n // Input change handler\n this.$input.addEventListener('change', this._handleFileSelect.bind(this));\n\n // Drag and drop handlers\n this.$element.addEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.addEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.addEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.addEventListener('drop', this._handleDrop.bind(this));\n\n // Close button handler\n if (this.$loaderClose) {\n this.$loaderClose.addEventListener('click', this._handleClose.bind(this));\n }\n }\n\n /**\n * Handle button click\n */\n private _handleButtonClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.$input && !this.options.disabled) {\n this.$input.click();\n }\n }\n\n /**\n * Handle file selection from the input element\n */\n private _handleFileSelect(event: Event): void {\n if (!this.$input?.files?.length) return;\n \n const files = Array.from(this.$input.files);\n this._processFiles(files);\n }\n\n /**\n * Handle drag enter event\n */\n private _handleDragEnter(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter++;\n if (this.dragCounter === 1) {\n this.$element?.classList.add(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag leave event\n */\n private _handleDragLeave(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter--;\n if (this.dragCounter === 0) {\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n }\n }\n\n /**\n * Handle drag over event\n */\n private _handleDragOver(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n }\n\n /**\n * Handle drop event\n */\n private _handleDrop(event: DragEvent): void {\n event.preventDefault();\n if (this.options.disabled) return;\n \n this.dragCounter = 0;\n this.$element?.classList.remove(UPLOAD.CLASSES.DRAGGING);\n \n if (!event.dataTransfer?.files.length) return;\n \n const files = Array.from(event.dataTransfer.files);\n this._processFiles(files);\n }\n\n /**\n * Handle close button click\n */\n private _handleClose(event: MouseEvent): void {\n event.preventDefault();\n \n // Reset state\n this.setStatus('idle');\n this.setFile(null);\n \n // Reset input\n if (this.$input) {\n this.$input.value = '';\n }\n }\n\n /**\n * Process the selected files\n */\n private _processFiles(files: File[]): void {\n if (!files.length) return;\n \n // If multiple is not allowed, take only the first file\n const filesToProcess = this.options.multiple ? files : [files[0]];\n \n // Validate files\n const validFiles = filesToProcess.filter(file => this._validateFile(file));\n \n // Notify about file selection\n if (validFiles.length && this.options.onFileSelect) {\n this.options.onFileSelect(validFiles);\n }\n \n // Process the first valid file\n if (validFiles.length) {\n this.setFile(validFiles[0]);\n this._simulateUpload(validFiles[0]);\n }\n }\n\n /**\n * Validate a file based on size and type\n */\n private _validateFile(file: File): boolean {\n const maxSizeInBytes = (this.options.maxSizeInMB || 5) * 1024 * 1024;\n \n // Check file size\n if (file.size > maxSizeInBytes) {\n this.setStatus('error', `File too large. Maximum size is ${this.options.maxSizeInMB}MB.`);\n return false;\n }\n \n // Check file type if acceptedFileTypes is provided\n if (this.options.acceptedFileTypes?.length) {\n const isAcceptedType = this.options.acceptedFileTypes.some(type => {\n // Handle wildcards like image/*\n if (type.endsWith('/*')) {\n const mainType = type.split('/')[0];\n return file.type.startsWith(`${mainType}/`);\n }\n return file.type === type;\n });\n \n if (!isAcceptedType) {\n this.setStatus('error', 'File type not supported.');\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Simulate a file upload process\n * In a real implementation, this would be replaced with actual upload logic\n */\n private _simulateUpload(file: File): void {\n this.setStatus('loading');\n let progress = 0;\n \n const interval = setInterval(() => {\n progress += 5;\n \n if (progress < 100) {\n this.setProgress(progress, `${Math.ceil((100 - progress) / 5)} seconds left`);\n \n if (this.options.onFileUpload) {\n this.options.onFileUpload(file, progress);\n }\n } else {\n clearInterval(interval);\n this.setStatus('success', 'Upload successful');\n \n if (this.options.onFileUploadComplete) {\n this.options.onFileUploadComplete(file);\n }\n }\n }, 500);\n }\n\n /**\n * Set current file\n */\n public setFile(file: File | null): void {\n this.currentFile = file;\n \n if (file && this.$loaderTitle) {\n this.$loaderTitle.textContent = file.name;\n }\n }\n\n /**\n * Set upload progress\n */\n public setProgress(percentage: number, timeLeft?: string): void {\n if (!this.$element || !this.$loaderProgress) return;\n \n // Set percentage as CSS variable\n this.$element.style.setProperty(UPLOAD.ATTRIBUTES.PERCENTAGE, percentage.toString());\n \n // Update the loader elements if they exist\n const $par = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_PAR);\n const $time = this.$element.querySelector<HTMLElement>(UPLOAD.SELECTORS.LOADER_TIME);\n \n if ($par) {\n $par.textContent = `${percentage}%`;\n }\n \n if ($time && timeLeft) {\n $time.textContent = timeLeft;\n }\n }\n\n /**\n * Set upload status\n */\n public setStatus(status: 'idle' | 'loading' | 'success' | 'error', message?: string): void {\n if (!this.$element) return;\n \n // Remove all status classes\n this.$element.classList.remove(\n UPLOAD.CLASSES.LOADING,\n UPLOAD.CLASSES.SUCCESS,\n UPLOAD.CLASSES.ERROR\n );\n \n // Add appropriate class based on status\n switch (status) {\n case 'loading':\n this.$element.classList.add(UPLOAD.CLASSES.LOADING);\n break;\n case 'success':\n this.$element.classList.add(UPLOAD.CLASSES.SUCCESS);\n break;\n case 'error':\n this.$element.classList.add(UPLOAD.CLASSES.ERROR);\n break;\n }\n \n // Update message if provided and loader exists\n if (message && this.$loaderProgress) {\n this.$loaderProgress.textContent = message;\n }\n }\n\n /**\n * Disable the upload component\n */\n public disable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.add(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = true;\n this.options.disabled = true;\n }\n\n /**\n * Enable the upload component\n */\n public enable(): void {\n if (!this.$element || !this.$button) return;\n \n this.$element.classList.remove(UPLOAD.CLASSES.DISABLED);\n this.$button.disabled = false;\n this.options.disabled = false;\n }\n\n /**\n * Clean up event listeners\n */\n public destroy(): void {\n if (!this.$element || !this.$input || !this.$button) return;\n \n // Remove event listeners\n this.$button.removeEventListener('click', this._handleButtonClick.bind(this));\n this.$input.removeEventListener('change', this._handleFileSelect.bind(this));\n this.$element.removeEventListener('dragenter', this._handleDragEnter.bind(this));\n this.$element.removeEventListener('dragleave', this._handleDragLeave.bind(this));\n this.$element.removeEventListener('dragover', this._handleDragOver.bind(this));\n this.$element.removeEventListener('drop', this._handleDrop.bind(this));\n \n if (this.$loaderClose) {\n this.$loaderClose.removeEventListener('click', this._handleClose.bind(this));\n }\n \n // Remove input element\n if (this.$input.parentNode) {\n this.$input.parentNode.removeChild(this.$input);\n }\n }\n}\n\n/**\n * Initialize all upload components in the document\n * @param {string|Element} selector - CSS selector string or DOM Element\n * @param {Object} options - Custom options to override defaults\n * @returns {UploadInstance[]} Array of Upload instances\n */\nexport function initializeUploads(selector = UPLOAD.SELECTORS.UPLOAD, options = {}): UploadInstance[] {\n const uploadInstances: UploadInstance[] = [];\n const uploadElements = document.querySelectorAll<HTMLElement>(typeof selector === 'string' ? selector : UPLOAD.SELECTORS.UPLOAD);\n\n if (!uploadElements.length) return uploadInstances;\n\n uploadElements.forEach((element) => {\n try {\n const instance = new Upload(element, options);\n uploadInstances.push(instance);\n } catch (error) {\n console.error('Error initializing upload:', error);\n }\n });\n\n return uploadInstances;\n}\n\nexport default Upload; "],"names":["DEFAULT_OPTIONS","disabled","maxSizeInMB","acceptedFileTypes","multiple","Upload","constructor","selector","options","arguments","length","undefined","this","UPLOAD","SELECTORS","$element","document","querySelector","$input","$button","$loader","$loaderTitle","$loaderProgress","$loaderClose","currentFile","dragCounter","_initialize","_createHiddenInput","BUTTON","LOADER","LOADER_TITLE","LOADER_PROGRESS","LOADER_CLOSE","disable","_setupEventListeners","input","createElement","type","style","display","accept","join","appendChild","addEventListener","_handleButtonClick","bind","_handleFileSelect","_handleDragEnter","_handleDragLeave","_handleDragOver","_handleDrop","_handleClose","event","preventDefault","click","files","Array","from","_processFiles","classList","add","CLASSES","DRAGGING","remove","dataTransfer","setStatus","setFile","value","validFiles","filter","file","_validateFile","onFileSelect","_simulateUpload","size","some","endsWith","mainType","split","startsWith","progress","interval","setInterval","setProgress","Math","ceil","onFileUpload","clearInterval","onFileUploadComplete","textContent","name","percentage","timeLeft","setProperty","ATTRIBUTES","PERCENTAGE","$par","LOADER_PAR","$time","LOADER_TIME","status","message","LOADING","SUCCESS","ERROR","DISABLED","enable","destroy","removeEventListener","parentNode","removeChild","initializeUploads","uploadInstances","uploadElements","querySelectorAll","forEach","element","instance","push","error"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_shohojdhara_atomix=self.webpackChunk_shohojdhara_atomix||[]).push([[34],{34:(t,e,i)=>{i.r(e),i.d(e,{default:()=>r});const r=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.element=t,this.options={productName:"",productImage:null,initialRating:0,maxRating:5,allowHalf:!0,ratingColor:"warning",onSubmit:null,...e},this.ratingElement=this.element.querySelector(".c-rating"),this.textareaElement=this.element.querySelector(".c-product-review__textarea"),this.submitButton=this.element.querySelector(".c-product-review__actions .c-btn"),this.formElement=this.element.querySelector(".c-product-review__form"),this.onSubmit=this.options.onSubmit,this.init()}init(){this.formElement&&this.formElement.addEventListener("submit",this.handleSubmit.bind(this)),this.setupAccessibility()}setupAccessibility(){if(this.ratingElement){this.ratingElement.setAttribute("role","radiogroup"),this.ratingElement.setAttribute("aria-label","Rating");this.ratingElement.querySelectorAll(".c-rating__star").forEach(((t,e)=>{t.setAttribute("role","radio"),t.setAttribute("aria-label",`${e+1} star${0===e?"":"s"}`)}))}this.textareaElement&&this.textareaElement.setAttribute("aria-required","false")}handleSubmit(t){if(t.preventDefault(),!this.ratingElement||!this.textareaElement)return;const e=parseFloat(this.ratingElement.getAttribute("data-value")||"0");this.onSubmit&&e>0&&this.onSubmit(e,this.textareaElement.value),this.showSuccessState()}showSuccessState(){}reset(){if(this.ratingElement){this.ratingElement.setAttribute("data-value","0");this.ratingElement.querySelectorAll(".c-rating__star").forEach((t=>{t.classList.remove("c-rating__star--full","c-rating__star--half")}))}this.textareaElement&&(this.textareaElement.value="")}destroy(){this.formElement&&this.formElement.removeEventListener("submit",this.handleSubmit.bind(this))}}}}]);
2
+ //# sourceMappingURL=34.atomix-0.1.5.react.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/34.atomix-0.1.5.react.cjs.js","mappings":"oJAEA,QCCe,MAcbA,WAAAA,CAAYC,GAAyC,IAAnBC,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChDG,KAAKL,QAAUA,EACfK,KAAKJ,QAAU,CACbK,YAAa,GACbC,aAAc,KACdC,cAAe,EACfC,UAAW,EACXC,WAAW,EACXC,YAAa,UACbC,SAAU,QACPX,GAGLI,KAAKQ,cAAgBR,KAAKL,QAAQc,cAAc,aAChDT,KAAKU,gBAAkBV,KAAKL,QAAQc,cAAc,+BAClDT,KAAKW,aAAeX,KAAKL,QAAQc,cAAc,qCAC/CT,KAAKY,YAAcZ,KAAKL,QAAQc,cAAc,2BAC9CT,KAAKO,SAAWP,KAAKJ,QAAQW,SAE7BP,KAAKa,MACP,CAKAA,IAAAA,GACMb,KAAKY,aACPZ,KAAKY,YAAYE,iBAAiB,SAAUd,KAAKe,aAAaC,KAAKhB,OAIrEA,KAAKiB,oBACP,CAKAA,kBAAAA,GAEE,GAAIjB,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,OAAQ,cACxClB,KAAKQ,cAAcU,aAAa,aAAc,UAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQ,CAACC,EAAMC,KACnBD,EAAKH,aAAa,OAAQ,SAC1BG,EAAKH,aAAa,aAAc,GAAGI,EAAQ,SAAmB,IAAVA,EAAc,GAAK,MAAM,GAEjF,CAEItB,KAAKU,iBACPV,KAAKU,gBAAgBQ,aAAa,gBAAiB,QAEvD,CAMAH,YAAAA,CAAaQ,GAGX,GAFAA,EAAEC,kBAEGxB,KAAKQ,gBAAkBR,KAAKU,gBAAiB,OAElD,MAAMe,EAASC,WAAW1B,KAAKQ,cAAcmB,aAAa,eAAiB,KAGvE3B,KAAKO,UAAYkB,EAAS,GAC5BzB,KAAKO,SAASkB,EAHCzB,KAAKU,gBAAwCkB,OAO9D5B,KAAK6B,kBACP,CAKAA,gBAAAA,GAEE,CAMFC,KAAAA,GACE,GAAI9B,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,aAAc,KAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQC,IACZA,EAAKU,UAAUC,OAAO,uBAAwB,uBAAuB,GAEzE,CAEIhC,KAAKU,kBACNV,KAAKU,gBAAwCkB,MAAQ,GAE1D,CAKAK,OAAAA,GACMjC,KAAKY,aACPZ,KAAKY,YAAYsB,oBAAoB,SAAUlC,KAAKe,aAAaC,KAAKhB,MAI1E,E","sources":["webpack://@shohojdhara/atomix/./src/components/ProductReview/scripts/bundle.ts","webpack://@shohojdhara/atomix/./src/components/ProductReview/scripts/componentInteractions.ts"],"sourcesContent":["import ProductReview from './componentInteractions';\n\nexport default ProductReview;\n","/**\n * Class for handling ProductReview component interactions\n */\nexport default class ProductReview {\n element: HTMLElement;\n options: any;\n ratingElement: HTMLElement | null;\n textareaElement: HTMLElement | null;\n submitButton: HTMLElement | null;\n formElement: HTMLFormElement | null;\n onSubmit: ((rating: number, comment: string) => void) | null;\n \n /**\n * Create a new ProductReview instance\n * @param element - The product review container element\n * @param options - Configuration options\n */\n constructor(element: HTMLElement, options: any = {}) {\n this.element = element;\n this.options = {\n productName: '',\n productImage: null,\n initialRating: 0,\n maxRating: 5,\n allowHalf: true,\n ratingColor: 'warning',\n onSubmit: null,\n ...options\n };\n \n this.ratingElement = this.element.querySelector('.c-rating');\n this.textareaElement = this.element.querySelector('.c-product-review__textarea');\n this.submitButton = this.element.querySelector('.c-product-review__actions .c-btn');\n this.formElement = this.element.querySelector('.c-product-review__form') as HTMLFormElement;\n this.onSubmit = this.options.onSubmit;\n \n this.init();\n }\n \n /**\n * Initialize the product review component\n */\n init() {\n if (this.formElement) {\n this.formElement.addEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Add any additional initialization logic here\n this.setupAccessibility();\n }\n \n /**\n * Set up accessibility features\n */\n setupAccessibility() {\n // Add ARIA attributes for better accessibility\n if (this.ratingElement) {\n this.ratingElement.setAttribute('role', 'radiogroup');\n this.ratingElement.setAttribute('aria-label', 'Rating');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach((star, index) => {\n star.setAttribute('role', 'radio');\n star.setAttribute('aria-label', `${index + 1} star${index === 0 ? '' : 's'}`);\n });\n }\n \n if (this.textareaElement) {\n this.textareaElement.setAttribute('aria-required', 'false');\n }\n }\n \n /**\n * Handle form submission\n * @param e - Submit event\n */\n handleSubmit(e: Event) {\n e.preventDefault();\n \n if (!this.ratingElement || !this.textareaElement) return;\n \n const rating = parseFloat(this.ratingElement.getAttribute('data-value') || '0');\n const comment = (this.textareaElement as HTMLTextAreaElement).value;\n \n if (this.onSubmit && rating > 0) {\n this.onSubmit(rating, comment);\n }\n \n // Show success state\n this.showSuccessState();\n }\n \n /**\n * Show the success state after submission\n */\n showSuccessState() {\n // This will be handled by React state in the component\n // But we could add additional logic here if needed\n }\n \n /**\n * Reset the form\n */\n reset() {\n if (this.ratingElement) {\n this.ratingElement.setAttribute('data-value', '0');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach(star => {\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n });\n }\n \n if (this.textareaElement) {\n (this.textareaElement as HTMLTextAreaElement).value = '';\n }\n }\n \n /**\n * Clean up event listeners\n */\n destroy() {\n if (this.formElement) {\n this.formElement.removeEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Clean up any other event listeners\n }\n}\n"],"names":["constructor","element","options","arguments","length","undefined","this","productName","productImage","initialRating","maxRating","allowHalf","ratingColor","onSubmit","ratingElement","querySelector","textareaElement","submitButton","formElement","init","addEventListener","handleSubmit","bind","setupAccessibility","setAttribute","querySelectorAll","forEach","star","index","e","preventDefault","rating","parseFloat","getAttribute","value","showSuccessState","reset","classList","remove","destroy","removeEventListener"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=34;export const __webpack_ids__=[34];export const __webpack_modules__={34:(t,e,i)=>{i.r(e),i.d(e,{default:()=>r});const r=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.element=t,this.options={productName:"",productImage:null,initialRating:0,maxRating:5,allowHalf:!0,ratingColor:"warning",onSubmit:null,...e},this.ratingElement=this.element.querySelector(".c-rating"),this.textareaElement=this.element.querySelector(".c-product-review__textarea"),this.submitButton=this.element.querySelector(".c-product-review__actions .c-btn"),this.formElement=this.element.querySelector(".c-product-review__form"),this.onSubmit=this.options.onSubmit,this.init()}init(){this.formElement&&this.formElement.addEventListener("submit",this.handleSubmit.bind(this)),this.setupAccessibility()}setupAccessibility(){if(this.ratingElement){this.ratingElement.setAttribute("role","radiogroup"),this.ratingElement.setAttribute("aria-label","Rating");this.ratingElement.querySelectorAll(".c-rating__star").forEach(((t,e)=>{t.setAttribute("role","radio"),t.setAttribute("aria-label",`${e+1} star${0===e?"":"s"}`)}))}this.textareaElement&&this.textareaElement.setAttribute("aria-required","false")}handleSubmit(t){if(t.preventDefault(),!this.ratingElement||!this.textareaElement)return;const e=parseFloat(this.ratingElement.getAttribute("data-value")||"0");this.onSubmit&&e>0&&this.onSubmit(e,this.textareaElement.value),this.showSuccessState()}showSuccessState(){}reset(){if(this.ratingElement){this.ratingElement.setAttribute("data-value","0");this.ratingElement.querySelectorAll(".c-rating__star").forEach((t=>{t.classList.remove("c-rating__star--full","c-rating__star--half")}))}this.textareaElement&&(this.textareaElement.value="")}destroy(){this.formElement&&this.formElement.removeEventListener("submit",this.handleSubmit.bind(this))}}}};
2
+ //# sourceMappingURL=34.atomix-0.1.5.react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/34.atomix-0.1.5.react.esm.js","mappings":"8IAEA,QCCe,MAcbA,WAAAA,CAAYC,GAAyC,IAAnBC,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChDG,KAAKL,QAAUA,EACfK,KAAKJ,QAAU,CACbK,YAAa,GACbC,aAAc,KACdC,cAAe,EACfC,UAAW,EACXC,WAAW,EACXC,YAAa,UACbC,SAAU,QACPX,GAGLI,KAAKQ,cAAgBR,KAAKL,QAAQc,cAAc,aAChDT,KAAKU,gBAAkBV,KAAKL,QAAQc,cAAc,+BAClDT,KAAKW,aAAeX,KAAKL,QAAQc,cAAc,qCAC/CT,KAAKY,YAAcZ,KAAKL,QAAQc,cAAc,2BAC9CT,KAAKO,SAAWP,KAAKJ,QAAQW,SAE7BP,KAAKa,MACP,CAKAA,IAAAA,GACMb,KAAKY,aACPZ,KAAKY,YAAYE,iBAAiB,SAAUd,KAAKe,aAAaC,KAAKhB,OAIrEA,KAAKiB,oBACP,CAKAA,kBAAAA,GAEE,GAAIjB,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,OAAQ,cACxClB,KAAKQ,cAAcU,aAAa,aAAc,UAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQ,CAACC,EAAMC,KACnBD,EAAKH,aAAa,OAAQ,SAC1BG,EAAKH,aAAa,aAAc,GAAGI,EAAQ,SAAmB,IAAVA,EAAc,GAAK,MAAM,GAEjF,CAEItB,KAAKU,iBACPV,KAAKU,gBAAgBQ,aAAa,gBAAiB,QAEvD,CAMAH,YAAAA,CAAaQ,GAGX,GAFAA,EAAEC,kBAEGxB,KAAKQ,gBAAkBR,KAAKU,gBAAiB,OAElD,MAAMe,EAASC,WAAW1B,KAAKQ,cAAcmB,aAAa,eAAiB,KAGvE3B,KAAKO,UAAYkB,EAAS,GAC5BzB,KAAKO,SAASkB,EAHCzB,KAAKU,gBAAwCkB,OAO9D5B,KAAK6B,kBACP,CAKAA,gBAAAA,GAEE,CAMFC,KAAAA,GACE,GAAI9B,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,aAAc,KAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQC,IACZA,EAAKU,UAAUC,OAAO,uBAAwB,uBAAuB,GAEzE,CAEIhC,KAAKU,kBACNV,KAAKU,gBAAwCkB,MAAQ,GAE1D,CAKAK,OAAAA,GACMjC,KAAKY,aACPZ,KAAKY,YAAYsB,oBAAoB,SAAUlC,KAAKe,aAAaC,KAAKhB,MAI1E,E","sources":["webpack://@shohojdhara/atomix/./src/components/ProductReview/scripts/bundle.ts","webpack://@shohojdhara/atomix/./src/components/ProductReview/scripts/componentInteractions.ts"],"sourcesContent":["import ProductReview from './componentInteractions';\n\nexport default ProductReview;\n","/**\n * Class for handling ProductReview component interactions\n */\nexport default class ProductReview {\n element: HTMLElement;\n options: any;\n ratingElement: HTMLElement | null;\n textareaElement: HTMLElement | null;\n submitButton: HTMLElement | null;\n formElement: HTMLFormElement | null;\n onSubmit: ((rating: number, comment: string) => void) | null;\n \n /**\n * Create a new ProductReview instance\n * @param element - The product review container element\n * @param options - Configuration options\n */\n constructor(element: HTMLElement, options: any = {}) {\n this.element = element;\n this.options = {\n productName: '',\n productImage: null,\n initialRating: 0,\n maxRating: 5,\n allowHalf: true,\n ratingColor: 'warning',\n onSubmit: null,\n ...options\n };\n \n this.ratingElement = this.element.querySelector('.c-rating');\n this.textareaElement = this.element.querySelector('.c-product-review__textarea');\n this.submitButton = this.element.querySelector('.c-product-review__actions .c-btn');\n this.formElement = this.element.querySelector('.c-product-review__form') as HTMLFormElement;\n this.onSubmit = this.options.onSubmit;\n \n this.init();\n }\n \n /**\n * Initialize the product review component\n */\n init() {\n if (this.formElement) {\n this.formElement.addEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Add any additional initialization logic here\n this.setupAccessibility();\n }\n \n /**\n * Set up accessibility features\n */\n setupAccessibility() {\n // Add ARIA attributes for better accessibility\n if (this.ratingElement) {\n this.ratingElement.setAttribute('role', 'radiogroup');\n this.ratingElement.setAttribute('aria-label', 'Rating');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach((star, index) => {\n star.setAttribute('role', 'radio');\n star.setAttribute('aria-label', `${index + 1} star${index === 0 ? '' : 's'}`);\n });\n }\n \n if (this.textareaElement) {\n this.textareaElement.setAttribute('aria-required', 'false');\n }\n }\n \n /**\n * Handle form submission\n * @param e - Submit event\n */\n handleSubmit(e: Event) {\n e.preventDefault();\n \n if (!this.ratingElement || !this.textareaElement) return;\n \n const rating = parseFloat(this.ratingElement.getAttribute('data-value') || '0');\n const comment = (this.textareaElement as HTMLTextAreaElement).value;\n \n if (this.onSubmit && rating > 0) {\n this.onSubmit(rating, comment);\n }\n \n // Show success state\n this.showSuccessState();\n }\n \n /**\n * Show the success state after submission\n */\n showSuccessState() {\n // This will be handled by React state in the component\n // But we could add additional logic here if needed\n }\n \n /**\n * Reset the form\n */\n reset() {\n if (this.ratingElement) {\n this.ratingElement.setAttribute('data-value', '0');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach(star => {\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n });\n }\n \n if (this.textareaElement) {\n (this.textareaElement as HTMLTextAreaElement).value = '';\n }\n }\n \n /**\n * Clean up event listeners\n */\n destroy() {\n if (this.formElement) {\n this.formElement.removeEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Clean up any other event listeners\n }\n}\n"],"names":["constructor","element","options","arguments","length","undefined","this","productName","productImage","initialRating","maxRating","allowHalf","ratingColor","onSubmit","ratingElement","querySelector","textareaElement","submitButton","formElement","init","addEventListener","handleSubmit","bind","setupAccessibility","setAttribute","querySelectorAll","forEach","star","index","e","preventDefault","rating","parseFloat","getAttribute","value","showSuccessState","reset","classList","remove","destroy","removeEventListener"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(this.webpackChunkAtomix=this.webpackChunkAtomix||[]).push([[34],{34:(t,e,i)=>{i.r(e),i.d(e,{default:()=>r});const r=class{constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.element=t,this.options={productName:"",productImage:null,initialRating:0,maxRating:5,allowHalf:!0,ratingColor:"warning",onSubmit:null,...e},this.ratingElement=this.element.querySelector(".c-rating"),this.textareaElement=this.element.querySelector(".c-product-review__textarea"),this.submitButton=this.element.querySelector(".c-product-review__actions .c-btn"),this.formElement=this.element.querySelector(".c-product-review__form"),this.onSubmit=this.options.onSubmit,this.init()}init(){this.formElement&&this.formElement.addEventListener("submit",this.handleSubmit.bind(this)),this.setupAccessibility()}setupAccessibility(){if(this.ratingElement){this.ratingElement.setAttribute("role","radiogroup"),this.ratingElement.setAttribute("aria-label","Rating");this.ratingElement.querySelectorAll(".c-rating__star").forEach(((t,e)=>{t.setAttribute("role","radio"),t.setAttribute("aria-label",`${e+1} star${0===e?"":"s"}`)}))}this.textareaElement&&this.textareaElement.setAttribute("aria-required","false")}handleSubmit(t){if(t.preventDefault(),!this.ratingElement||!this.textareaElement)return;const e=parseFloat(this.ratingElement.getAttribute("data-value")||"0");this.onSubmit&&e>0&&this.onSubmit(e,this.textareaElement.value),this.showSuccessState()}showSuccessState(){}reset(){if(this.ratingElement){this.ratingElement.setAttribute("data-value","0");this.ratingElement.querySelectorAll(".c-rating__star").forEach((t=>{t.classList.remove("c-rating__star--full","c-rating__star--half")}))}this.textareaElement&&(this.textareaElement.value="")}destroy(){this.formElement&&this.formElement.removeEventListener("submit",this.handleSubmit.bind(this))}}}}]);
2
+ //# sourceMappingURL=34.atomix-0.1.5.react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/34.atomix-0.1.5.react.js","mappings":"0HAEA,QCCe,MAcbA,WAAAA,CAAYC,GAAyC,IAAnBC,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAChDG,KAAKL,QAAUA,EACfK,KAAKJ,QAAU,CACbK,YAAa,GACbC,aAAc,KACdC,cAAe,EACfC,UAAW,EACXC,WAAW,EACXC,YAAa,UACbC,SAAU,QACPX,GAGLI,KAAKQ,cAAgBR,KAAKL,QAAQc,cAAc,aAChDT,KAAKU,gBAAkBV,KAAKL,QAAQc,cAAc,+BAClDT,KAAKW,aAAeX,KAAKL,QAAQc,cAAc,qCAC/CT,KAAKY,YAAcZ,KAAKL,QAAQc,cAAc,2BAC9CT,KAAKO,SAAWP,KAAKJ,QAAQW,SAE7BP,KAAKa,MACP,CAKAA,IAAAA,GACMb,KAAKY,aACPZ,KAAKY,YAAYE,iBAAiB,SAAUd,KAAKe,aAAaC,KAAKhB,OAIrEA,KAAKiB,oBACP,CAKAA,kBAAAA,GAEE,GAAIjB,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,OAAQ,cACxClB,KAAKQ,cAAcU,aAAa,aAAc,UAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQ,CAACC,EAAMC,KACnBD,EAAKH,aAAa,OAAQ,SAC1BG,EAAKH,aAAa,aAAc,GAAGI,EAAQ,SAAmB,IAAVA,EAAc,GAAK,MAAM,GAEjF,CAEItB,KAAKU,iBACPV,KAAKU,gBAAgBQ,aAAa,gBAAiB,QAEvD,CAMAH,YAAAA,CAAaQ,GAGX,GAFAA,EAAEC,kBAEGxB,KAAKQ,gBAAkBR,KAAKU,gBAAiB,OAElD,MAAMe,EAASC,WAAW1B,KAAKQ,cAAcmB,aAAa,eAAiB,KAGvE3B,KAAKO,UAAYkB,EAAS,GAC5BzB,KAAKO,SAASkB,EAHCzB,KAAKU,gBAAwCkB,OAO9D5B,KAAK6B,kBACP,CAKAA,gBAAAA,GAEE,CAMFC,KAAAA,GACE,GAAI9B,KAAKQ,cAAe,CACtBR,KAAKQ,cAAcU,aAAa,aAAc,KAEhClB,KAAKQ,cAAcW,iBAAiB,mBAC5CC,SAAQC,IACZA,EAAKU,UAAUC,OAAO,uBAAwB,uBAAuB,GAEzE,CAEIhC,KAAKU,kBACNV,KAAKU,gBAAwCkB,MAAQ,GAE1D,CAKAK,OAAAA,GACMjC,KAAKY,aACPZ,KAAKY,YAAYsB,oBAAoB,SAAUlC,KAAKe,aAAaC,KAAKhB,MAI1E,E","sources":["webpack://Atomix/./src/components/ProductReview/scripts/bundle.ts","webpack://Atomix/./src/components/ProductReview/scripts/componentInteractions.ts"],"sourcesContent":["import ProductReview from './componentInteractions';\n\nexport default ProductReview;\n","/**\n * Class for handling ProductReview component interactions\n */\nexport default class ProductReview {\n element: HTMLElement;\n options: any;\n ratingElement: HTMLElement | null;\n textareaElement: HTMLElement | null;\n submitButton: HTMLElement | null;\n formElement: HTMLFormElement | null;\n onSubmit: ((rating: number, comment: string) => void) | null;\n \n /**\n * Create a new ProductReview instance\n * @param element - The product review container element\n * @param options - Configuration options\n */\n constructor(element: HTMLElement, options: any = {}) {\n this.element = element;\n this.options = {\n productName: '',\n productImage: null,\n initialRating: 0,\n maxRating: 5,\n allowHalf: true,\n ratingColor: 'warning',\n onSubmit: null,\n ...options\n };\n \n this.ratingElement = this.element.querySelector('.c-rating');\n this.textareaElement = this.element.querySelector('.c-product-review__textarea');\n this.submitButton = this.element.querySelector('.c-product-review__actions .c-btn');\n this.formElement = this.element.querySelector('.c-product-review__form') as HTMLFormElement;\n this.onSubmit = this.options.onSubmit;\n \n this.init();\n }\n \n /**\n * Initialize the product review component\n */\n init() {\n if (this.formElement) {\n this.formElement.addEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Add any additional initialization logic here\n this.setupAccessibility();\n }\n \n /**\n * Set up accessibility features\n */\n setupAccessibility() {\n // Add ARIA attributes for better accessibility\n if (this.ratingElement) {\n this.ratingElement.setAttribute('role', 'radiogroup');\n this.ratingElement.setAttribute('aria-label', 'Rating');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach((star, index) => {\n star.setAttribute('role', 'radio');\n star.setAttribute('aria-label', `${index + 1} star${index === 0 ? '' : 's'}`);\n });\n }\n \n if (this.textareaElement) {\n this.textareaElement.setAttribute('aria-required', 'false');\n }\n }\n \n /**\n * Handle form submission\n * @param e - Submit event\n */\n handleSubmit(e: Event) {\n e.preventDefault();\n \n if (!this.ratingElement || !this.textareaElement) return;\n \n const rating = parseFloat(this.ratingElement.getAttribute('data-value') || '0');\n const comment = (this.textareaElement as HTMLTextAreaElement).value;\n \n if (this.onSubmit && rating > 0) {\n this.onSubmit(rating, comment);\n }\n \n // Show success state\n this.showSuccessState();\n }\n \n /**\n * Show the success state after submission\n */\n showSuccessState() {\n // This will be handled by React state in the component\n // But we could add additional logic here if needed\n }\n \n /**\n * Reset the form\n */\n reset() {\n if (this.ratingElement) {\n this.ratingElement.setAttribute('data-value', '0');\n \n const stars = this.ratingElement.querySelectorAll('.c-rating__star');\n stars.forEach(star => {\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n });\n }\n \n if (this.textareaElement) {\n (this.textareaElement as HTMLTextAreaElement).value = '';\n }\n }\n \n /**\n * Clean up event listeners\n */\n destroy() {\n if (this.formElement) {\n this.formElement.removeEventListener('submit', this.handleSubmit.bind(this));\n }\n \n // Clean up any other event listeners\n }\n}\n"],"names":["constructor","element","options","arguments","length","undefined","this","productName","productImage","initialRating","maxRating","allowHalf","ratingColor","onSubmit","ratingElement","querySelector","textareaElement","submitButton","formElement","init","addEventListener","handleSubmit","bind","setupAccessibility","setAttribute","querySelectorAll","forEach","star","index","e","preventDefault","rating","parseFloat","getAttribute","value","showSuccessState","reset","classList","remove","destroy","removeEventListener"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_shohojdhara_atomix=self.webpackChunk_shohojdhara_atomix||[]).push([[471],{471:(t,e,a)=>{a.r(e),a.d(e,{default:()=>n,disposeAll:()=>l,enhanceWithKeyboardNavigation:()=>i,getInstance:()=>o,initFromDataAttributes:()=>r});const s={value:0,maxValue:5,allowHalf:!1,readOnly:!1,size:"md"};class n{stars=null;constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.element="string"==typeof t?document.querySelector(t):t,!this.element)throw Error("Rating: Element not found");this.options={...s,...e},this._currentValue=this.options.value||0,this._boundHandleMouseEnter=this._handleMouseEnter.bind(this),this._boundHandleMouseLeave=this._handleMouseLeave.bind(this),this._boundHandleClick=this._handleClick.bind(this),this._boundHandleKeyDown=this._handleKeyDown.bind(this),this.element._rating=this,this._init()}_init(){this.element.setAttribute("data-max-value",this.options.maxValue+""),this.element.setAttribute("data-allow-half",this.options.allowHalf+""),this.element.setAttribute("data-readonly",this.options.readOnly+""),this.options.readOnly?(this.element.setAttribute("role","img"),this.element.setAttribute("aria-label",`Rating: ${this._currentValue} out of ${this.options.maxValue} stars`)):this.element.setAttribute("role","radiogroup"),this.options.size&&"md"!==this.options.size&&this.element.classList.add("c-rating--"+this.options.size),this.options.color&&this.element.classList.add("c-rating--"+this.options.color),this.stars=this.element.querySelectorAll(".c-rating__star"),this._updateStars(),this.options.readOnly||this._bindEvents(),this.element.dispatchEvent(new CustomEvent("rating:init",{bubbles:!0,detail:{instance:this}}))}_bindEvents(){this.stars&&(this.stars.forEach((t=>{t.addEventListener("mouseenter",this._boundHandleMouseEnter),t.addEventListener("click",this._boundHandleClick),t.addEventListener("keydown",this._boundHandleKeyDown),t.setAttribute("tabindex","0"),t.setAttribute("role","button")})),this.element.addEventListener("mouseleave",this._boundHandleMouseLeave))}_handleMouseEnter(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this._highlightStars(e)}_handleMouseLeave(){this.options.readOnly||this._updateStars()}_handleClick(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this.setValue(e),this.options.onChange&&this.options.onChange(e)}_handleKeyDown(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value")),a=this.options.allowHalf?.5:1;let s=this._currentValue;switch(t.key){case"ArrowRight":case"ArrowUp":s=Math.min(this.options.maxValue||5,this._currentValue+a),t.preventDefault();break;case"ArrowLeft":case"ArrowDown":s=Math.max(0,this._currentValue-a),t.preventDefault();break;case"Home":s=0,t.preventDefault();break;case"End":s=this.options.maxValue||5,t.preventDefault();break;case" ":case"Enter":s=e,t.preventDefault();break;default:return}s!==this._currentValue&&(this.setValue(s),this.options.onChange&&this.options.onChange(s))}_updateStars(){if(!this.stars)return;const t=this.options.allowHalf?Math.floor(2*this._currentValue)/2:Math.round(this._currentValue);this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value")),s=Math.floor(t)>=a,n=this.options.allowHalf&&a-.5===t;e.classList.remove("c-rating__star--full","c-rating__star--half"),s?e.classList.add("c-rating__star--full"):n&&e.classList.add("c-rating__star--half"),e.setAttribute("aria-checked",s||n?"true":"false")})),this.options.readOnly&&this.element.setAttribute("aria-label",`Rating: ${t} out of ${this.options.maxValue} stars`),this.element.setAttribute("data-value",t+"")}_highlightStars(t){this.stars&&this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value"));e.classList.remove("c-rating__star--full","c-rating__star--half"),a>t||e.classList.add("c-rating__star--full")}))}getValue(){return this._currentValue}setValue(t){const e=Math.max(0,Math.min(t,this.options.maxValue||5));this._currentValue=e,this._updateStars(),this.element.dispatchEvent(new CustomEvent("rating:change",{bubbles:!0,detail:{value:e}}))}updateOptions(t){this.options={...this.options,...t},this._init()}destroy(){this.stars&&this.stars.forEach((t=>{t.removeEventListener("mouseenter",this._boundHandleMouseEnter),t.removeEventListener("click",this._boundHandleClick),t.removeEventListener("keydown",this._boundHandleKeyDown)})),this.element.removeEventListener("mouseleave",this._boundHandleMouseLeave),delete this.element._rating}}function i(t){const e=t.element;if(!e)return;e.addEventListener("keydown",(t=>{!function(t,e){if(!e)return;const a=e.querySelectorAll(".c-rating__star");if(!a.length)return;const s=Array.from(a).findIndex((t=>t===document.activeElement));let n=-1;switch(t.key){case"ArrowRight":case"ArrowUp":t.preventDefault(),n=a.length-1>s?s+1:0;break;case"ArrowLeft":case"ArrowDown":t.preventDefault(),n=s>0?s-1:a.length-1;break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=a.length-1;break;case" ":case"Enter":t.preventDefault(),0>s||a[s].click()}0>n||a[n].focus()}(t,e)}));const a=e.querySelectorAll(".c-rating__star");a.forEach((t=>{t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","button"),t.setAttribute("aria-label",`Rate ${Array.from(a).indexOf(t)+1} out of ${a.length}`)}))}function r(){const t=[];return document.querySelectorAll("[data-rating]").forEach((e=>{const a=e,s={};a.dataset.value&&(s.value=parseFloat(a.dataset.value)),a.dataset.maxValue&&(s.maxValue=parseFloat(a.dataset.maxValue)),void 0!==a.dataset.allowHalf&&(s.allowHalf="true"===a.dataset.allowHalf),void 0!==a.dataset.readOnly&&(s.readOnly="true"===a.dataset.readOnly),a.dataset.size&&(s.size=a.dataset.size),a.dataset.color&&(s.color=a.dataset.color);const r=new n(a,s);t.push(r),i(r)})),t}function o(t){const e="string"==typeof t?document.querySelector(t):t;return e&&e._rating||null}function l(){document.querySelectorAll("[data-rating]").forEach((t=>{const e=o(t);e&&e.destroy()}))}"undefined"!=typeof window&&(window.Atomix=window.Atomix||{},window.Atomix.Rating={create:n,init:r,get:o,disposeAll:l,enhanceKeyboardNavigation:i},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",(()=>{r()})):r())}}]);
2
+ //# sourceMappingURL=471.atomix-0.1.5.react.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/471.atomix-0.1.5.react.cjs.js","mappings":"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","sources":["webpack://@shohojdhara/atomix/./src/components/Rating/scripts/index.ts","webpack://@shohojdhara/atomix/./src/components/Rating/scripts/ratingInteractions.ts","webpack://@shohojdhara/atomix/./src/components/Rating/scripts/bundle.ts"],"sourcesContent":["import type { RatingProps, Size, ThemeColor } from '../../../lib/types/components';\n\n/**\n * Rating component class for vanilla JavaScript implementation\n */\nexport type RatingOptions = Pick<RatingProps, \n 'value' | \n 'defaultValue' | \n 'maxValue' | \n 'allowHalf' | \n 'readOnly' | \n 'size' | \n 'color' | \n 'onChange'\n>;\n\n// Define default options\nconst DEFAULTS = {\n value: 0,\n maxValue: 5,\n allowHalf: false,\n readOnly: false,\n size: 'md' as Size,\n};\n\n/**\n * Rating component class for vanilla JavaScript implementation\n */\nexport default class Rating {\n element: HTMLElement;\n options: RatingOptions;\n stars: NodeListOf<HTMLElement> | null = null;\n private _currentValue: number;\n private _boundHandleMouseEnter: (event: MouseEvent) => void;\n private _boundHandleMouseLeave: (event: MouseEvent) => void;\n private _boundHandleClick: (event: MouseEvent) => void;\n private _boundHandleKeyDown: (event: KeyboardEvent) => void;\n \n /**\n * Create a new Rating instance\n * @param element - The element to attach the rating to\n * @param options - Configuration options\n */\n constructor(element: string | HTMLElement, options: RatingOptions = {}) {\n this.element = typeof element === 'string' ? document.querySelector(element) as HTMLElement : element;\n if (!this.element) {\n throw new Error('Rating: Element not found');\n }\n \n this.options = { ...DEFAULTS, ...options };\n this._currentValue = this.options.value || 0;\n \n // Bind event handlers to this instance\n this._boundHandleMouseEnter = this._handleMouseEnter.bind(this);\n this._boundHandleMouseLeave = this._handleMouseLeave.bind(this);\n this._boundHandleClick = this._handleClick.bind(this);\n this._boundHandleKeyDown = this._handleKeyDown.bind(this);\n \n // Store reference to instance on element\n (this.element as any)._rating = this;\n \n this._init();\n }\n \n /**\n * Initialize the component\n */\n private _init(): void {\n // Set data attributes\n this.element.setAttribute('data-max-value', String(this.options.maxValue));\n this.element.setAttribute('data-allow-half', String(this.options.allowHalf));\n this.element.setAttribute('data-readonly', String(this.options.readOnly));\n \n // Set ARIA attributes\n if (this.options.readOnly) {\n this.element.setAttribute('role', 'img');\n this.element.setAttribute('aria-label', `Rating: ${this._currentValue} out of ${this.options.maxValue} stars`);\n } else {\n this.element.setAttribute('role', 'radiogroup');\n }\n \n // Add CSS classes\n if (this.options.size && this.options.size !== 'md') {\n this.element.classList.add(`c-rating--${this.options.size}`);\n }\n \n if (this.options.color) {\n this.element.classList.add(`c-rating--${this.options.color}`);\n }\n \n // Get all stars\n this.stars = this.element.querySelectorAll('.c-rating__star');\n \n // Set initial state\n this._updateStars();\n \n // Bind events if not read-only\n if (!this.options.readOnly) {\n this._bindEvents();\n }\n \n // Dispatch init event\n this.element.dispatchEvent(new CustomEvent('rating:init', {\n bubbles: true,\n detail: { instance: this }\n }));\n }\n \n /**\n * Bind event listeners\n */\n private _bindEvents(): void {\n if (!this.stars) return;\n \n // Add event listeners to each star\n this.stars.forEach((star) => {\n star.addEventListener('mouseenter', this._boundHandleMouseEnter);\n star.addEventListener('click', this._boundHandleClick);\n star.addEventListener('keydown', this._boundHandleKeyDown);\n \n // Make stars focusable\n star.setAttribute('tabindex', '0');\n star.setAttribute('role', 'button');\n });\n \n // Add mouseleave to the container\n this.element.addEventListener('mouseleave', this._boundHandleMouseLeave);\n }\n \n /**\n * Handle mouse enter on a star\n */\n private _handleMouseEnter(event: MouseEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const value = Number(target.getAttribute('data-value'));\n \n this._highlightStars(value);\n }\n \n /**\n * Handle mouse leave from rating component\n */\n private _handleMouseLeave(): void {\n if (this.options.readOnly) return;\n \n this._updateStars();\n }\n \n /**\n * Handle click on a star\n */\n private _handleClick(event: MouseEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const value = Number(target.getAttribute('data-value'));\n \n this.setValue(value);\n \n if (this.options.onChange) {\n this.options.onChange(value);\n }\n }\n \n /**\n * Handle keyboard navigation\n */\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const index = Number(target.getAttribute('data-value'));\n const step = this.options.allowHalf ? 0.5 : 1;\n let newValue = this._currentValue;\n \n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(this.options.maxValue || 5, this._currentValue + step);\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(0, this._currentValue - step);\n event.preventDefault();\n break;\n case 'Home':\n newValue = 0;\n event.preventDefault();\n break;\n case 'End':\n newValue = this.options.maxValue || 5;\n event.preventDefault();\n break;\n case ' ':\n case 'Enter':\n newValue = index;\n event.preventDefault();\n break;\n default:\n return;\n }\n \n if (newValue !== this._currentValue) {\n this.setValue(newValue);\n \n if (this.options.onChange) {\n this.options.onChange(newValue);\n }\n }\n }\n \n /**\n * Update star appearance based on current value\n */\n private _updateStars(): void {\n if (!this.stars) return;\n \n const roundedValue = this.options.allowHalf \n ? Math.floor(this._currentValue * 2) / 2 \n : Math.round(this._currentValue);\n \n this.stars.forEach((star) => {\n const starValue = Number(star.getAttribute('data-value'));\n const isFullStar = starValue <= Math.floor(roundedValue);\n const isHalfStar = this.options.allowHalf && (starValue - 0.5 === roundedValue);\n \n // Remove existing classes\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n \n // Add appropriate classes\n if (isFullStar) {\n star.classList.add('c-rating__star--full');\n } else if (isHalfStar) {\n star.classList.add('c-rating__star--half');\n }\n \n // Update ARIA attributes\n star.setAttribute('aria-checked', isFullStar || isHalfStar ? 'true' : 'false');\n });\n \n // Update container ARIA label if read-only\n if (this.options.readOnly) {\n this.element.setAttribute('aria-label', `Rating: ${roundedValue} out of ${this.options.maxValue} stars`);\n }\n \n // Update data attribute\n this.element.setAttribute('data-value', String(roundedValue));\n }\n \n /**\n * Temporarily highlight stars up to a value\n */\n private _highlightStars(value: number): void {\n if (!this.stars) return;\n \n this.stars.forEach((star) => {\n const starValue = Number(star.getAttribute('data-value'));\n \n // Remove existing classes\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n \n // Add full class if star value is less than or equal to hovered value\n if (starValue <= value) {\n star.classList.add('c-rating__star--full');\n }\n });\n }\n \n /**\n * Get current rating value\n */\n public getValue(): number {\n return this._currentValue;\n }\n \n /**\n * Set the rating value\n * @param value - The new rating value\n */\n public setValue(value: number): void {\n // Clamp value between 0 and maxValue\n const clampedValue = Math.max(0, Math.min(value, this.options.maxValue || 5));\n \n // Update current value\n this._currentValue = clampedValue;\n \n // Update visual state\n this._updateStars();\n \n // Dispatch change event\n this.element.dispatchEvent(new CustomEvent('rating:change', {\n bubbles: true,\n detail: { value: clampedValue }\n }));\n }\n \n /**\n * Update component options\n * @param options Partial options to update\n */\n public updateOptions(options: Partial<RatingOptions>): void {\n // Update options\n this.options = { ...this.options, ...options };\n \n // Re-initialize component with new options\n this._init();\n }\n \n /**\n * Destroy the rating component and remove event listeners\n */\n public destroy(): void {\n if (this.stars) {\n // Remove event listeners from stars\n this.stars.forEach((star) => {\n star.removeEventListener('mouseenter', this._boundHandleMouseEnter);\n star.removeEventListener('click', this._boundHandleClick);\n star.removeEventListener('keydown', this._boundHandleKeyDown);\n });\n }\n \n // Remove event listener from container\n this.element.removeEventListener('mouseleave', this._boundHandleMouseLeave);\n \n // Remove reference from element\n delete (this.element as any)._rating;\n }\n}\n","import Rating from './index';\nimport type { RatingOptions } from './index';\n\n/**\n * Event handlers and utility functions for Rating component\n */\n\n/**\n * Handle keyboard navigation for rating stars\n * @param event Keyboard event\n * @param container Rating container element\n */\nexport function handleKeyboardNavigation(event: KeyboardEvent, container: HTMLElement): void {\n if (!container) return;\n \n const stars = container.querySelectorAll<HTMLElement>('.c-rating__star');\n if (!stars.length) return;\n \n const currentIndex = Array.from(stars).findIndex(item => item === document.activeElement);\n let nextIndex = -1;\n \n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = currentIndex < stars.length - 1 ? currentIndex + 1 : 0;\n break;\n \n case 'ArrowLeft':\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = currentIndex > 0 ? currentIndex - 1 : stars.length - 1;\n break;\n \n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n \n case 'End':\n event.preventDefault();\n nextIndex = stars.length - 1;\n break;\n \n case ' ':\n case 'Enter':\n event.preventDefault();\n if (currentIndex >= 0) {\n stars[currentIndex].click();\n }\n break;\n }\n \n if (nextIndex >= 0) {\n stars[nextIndex].focus();\n }\n}\n\n/**\n * Enhance a rating with keyboard navigation\n * @param rating Rating instance\n */\nexport function enhanceWithKeyboardNavigation(rating: Rating): void {\n const element = rating.element;\n if (!element) return;\n \n element.addEventListener('keydown', (e: KeyboardEvent) => {\n handleKeyboardNavigation(e, element);\n });\n \n // Make stars focusable\n const stars = element.querySelectorAll<HTMLElement>('.c-rating__star');\n stars.forEach(star => {\n if (!star.hasAttribute('tabindex')) {\n star.setAttribute('tabindex', '0');\n }\n star.setAttribute('role', 'button');\n star.setAttribute('aria-label', `Rate ${Array.from(stars).indexOf(star) + 1} out of ${stars.length}`);\n });\n}\n\n/**\n * Initialize ratings with data attributes\n */\nexport function initFromDataAttributes(): Rating[] {\n const instances: Rating[] = [];\n \n document.querySelectorAll('[data-rating]').forEach(element => {\n const el = element as HTMLElement;\n \n // Parse options from data attributes\n const options: Record<string, any> = {};\n \n // Value\n if (el.dataset.value) {\n options.value = parseFloat(el.dataset.value);\n }\n \n // Max value\n if (el.dataset.maxValue) {\n options.maxValue = parseFloat(el.dataset.maxValue);\n }\n \n // Allow half\n if (el.dataset.allowHalf !== undefined) {\n options.allowHalf = el.dataset.allowHalf === 'true';\n }\n \n // Read only\n if (el.dataset.readOnly !== undefined) {\n options.readOnly = el.dataset.readOnly === 'true';\n }\n \n // Size\n if (el.dataset.size) {\n options.size = el.dataset.size;\n }\n \n // Color\n if (el.dataset.color) {\n options.color = el.dataset.color;\n }\n \n const instance = new Rating(el, options);\n instances.push(instance);\n \n // Enhance with keyboard navigation\n enhanceWithKeyboardNavigation(instance);\n });\n \n return instances;\n}\n\n/**\n * Get a Rating instance from an element\n * @param element Element or selector\n */\nexport function getInstance(element: string | HTMLElement): Rating | null {\n const el = typeof element === 'string' ? document.querySelector(element) : element;\n \n if (!el) return null;\n \n // Use a stored reference if exists\n return (el as any)._rating || null;\n}\n\n/**\n * Dispose all Rating instances\n */\nexport function disposeAll(): void {\n document.querySelectorAll('[data-rating]').forEach(element => {\n const instance = getInstance(element as HTMLElement);\n if (instance) {\n instance.destroy();\n }\n });\n}\n","import Rating from './index';\nimport { initFromDataAttributes, getInstance, disposeAll, enhanceWithKeyboardNavigation } from './ratingInteractions';\n\nif (typeof window !== 'undefined') {\n // Initialize the Atomix global object if it doesn't exist\n (window as any).Atomix = (window as any).Atomix || {};\n \n // Add Rating to the global Atomix object\n (window as any).Atomix.Rating = {\n create: Rating,\n init: initFromDataAttributes,\n get: getInstance,\n disposeAll: disposeAll,\n enhanceKeyboardNavigation: enhanceWithKeyboardNavigation\n };\n \n // Auto-initialize ratings when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n initFromDataAttributes();\n });\n } else {\n initFromDataAttributes();\n }\n}\n\n// Export everything for module bundling\nexport { \n Rating as default,\n initFromDataAttributes,\n getInstance,\n disposeAll,\n enhanceWithKeyboardNavigation\n};\n"],"names":["DEFAULTS","value","maxValue","allowHalf","readOnly","size","Rating","stars","constructor","element","options","arguments","length","undefined","this","document","querySelector","Error","_currentValue","_boundHandleMouseEnter","_handleMouseEnter","bind","_boundHandleMouseLeave","_handleMouseLeave","_boundHandleClick","_handleClick","_boundHandleKeyDown","_handleKeyDown","_rating","_init","setAttribute","String","classList","add","color","querySelectorAll","_updateStars","_bindEvents","dispatchEvent","CustomEvent","bubbles","detail","instance","forEach","star","addEventListener","event","Number","currentTarget","getAttribute","_highlightStars","setValue","onChange","index","step","newValue","key","Math","min","preventDefault","max","roundedValue","floor","round","starValue","isFullStar","isHalfStar","remove","getValue","clampedValue","updateOptions","destroy","removeEventListener","enhanceWithKeyboardNavigation","rating","e","container","currentIndex","Array","from","findIndex","item","activeElement","nextIndex","click","focus","handleKeyboardNavigation","hasAttribute","indexOf","initFromDataAttributes","instances","el","dataset","parseFloat","push","getInstance","disposeAll","window","Atomix","create","init","get","enhanceKeyboardNavigation","readyState"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ export const __webpack_id__=471;export const __webpack_ids__=[471];export const __webpack_modules__={471:(t,e,a)=>{a.r(e),a.d(e,{default:()=>n,disposeAll:()=>l,enhanceWithKeyboardNavigation:()=>i,getInstance:()=>o,initFromDataAttributes:()=>r});const s={value:0,maxValue:5,allowHalf:!1,readOnly:!1,size:"md"};class n{stars=null;constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.element="string"==typeof t?document.querySelector(t):t,!this.element)throw Error("Rating: Element not found");this.options={...s,...e},this._currentValue=this.options.value||0,this._boundHandleMouseEnter=this._handleMouseEnter.bind(this),this._boundHandleMouseLeave=this._handleMouseLeave.bind(this),this._boundHandleClick=this._handleClick.bind(this),this._boundHandleKeyDown=this._handleKeyDown.bind(this),this.element._rating=this,this._init()}_init(){this.element.setAttribute("data-max-value",this.options.maxValue+""),this.element.setAttribute("data-allow-half",this.options.allowHalf+""),this.element.setAttribute("data-readonly",this.options.readOnly+""),this.options.readOnly?(this.element.setAttribute("role","img"),this.element.setAttribute("aria-label",`Rating: ${this._currentValue} out of ${this.options.maxValue} stars`)):this.element.setAttribute("role","radiogroup"),this.options.size&&"md"!==this.options.size&&this.element.classList.add("c-rating--"+this.options.size),this.options.color&&this.element.classList.add("c-rating--"+this.options.color),this.stars=this.element.querySelectorAll(".c-rating__star"),this._updateStars(),this.options.readOnly||this._bindEvents(),this.element.dispatchEvent(new CustomEvent("rating:init",{bubbles:!0,detail:{instance:this}}))}_bindEvents(){this.stars&&(this.stars.forEach((t=>{t.addEventListener("mouseenter",this._boundHandleMouseEnter),t.addEventListener("click",this._boundHandleClick),t.addEventListener("keydown",this._boundHandleKeyDown),t.setAttribute("tabindex","0"),t.setAttribute("role","button")})),this.element.addEventListener("mouseleave",this._boundHandleMouseLeave))}_handleMouseEnter(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this._highlightStars(e)}_handleMouseLeave(){this.options.readOnly||this._updateStars()}_handleClick(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this.setValue(e),this.options.onChange&&this.options.onChange(e)}_handleKeyDown(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value")),a=this.options.allowHalf?.5:1;let s=this._currentValue;switch(t.key){case"ArrowRight":case"ArrowUp":s=Math.min(this.options.maxValue||5,this._currentValue+a),t.preventDefault();break;case"ArrowLeft":case"ArrowDown":s=Math.max(0,this._currentValue-a),t.preventDefault();break;case"Home":s=0,t.preventDefault();break;case"End":s=this.options.maxValue||5,t.preventDefault();break;case" ":case"Enter":s=e,t.preventDefault();break;default:return}s!==this._currentValue&&(this.setValue(s),this.options.onChange&&this.options.onChange(s))}_updateStars(){if(!this.stars)return;const t=this.options.allowHalf?Math.floor(2*this._currentValue)/2:Math.round(this._currentValue);this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value")),s=Math.floor(t)>=a,n=this.options.allowHalf&&a-.5===t;e.classList.remove("c-rating__star--full","c-rating__star--half"),s?e.classList.add("c-rating__star--full"):n&&e.classList.add("c-rating__star--half"),e.setAttribute("aria-checked",s||n?"true":"false")})),this.options.readOnly&&this.element.setAttribute("aria-label",`Rating: ${t} out of ${this.options.maxValue} stars`),this.element.setAttribute("data-value",t+"")}_highlightStars(t){this.stars&&this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value"));e.classList.remove("c-rating__star--full","c-rating__star--half"),a>t||e.classList.add("c-rating__star--full")}))}getValue(){return this._currentValue}setValue(t){const e=Math.max(0,Math.min(t,this.options.maxValue||5));this._currentValue=e,this._updateStars(),this.element.dispatchEvent(new CustomEvent("rating:change",{bubbles:!0,detail:{value:e}}))}updateOptions(t){this.options={...this.options,...t},this._init()}destroy(){this.stars&&this.stars.forEach((t=>{t.removeEventListener("mouseenter",this._boundHandleMouseEnter),t.removeEventListener("click",this._boundHandleClick),t.removeEventListener("keydown",this._boundHandleKeyDown)})),this.element.removeEventListener("mouseleave",this._boundHandleMouseLeave),delete this.element._rating}}function i(t){const e=t.element;if(!e)return;e.addEventListener("keydown",(t=>{!function(t,e){if(!e)return;const a=e.querySelectorAll(".c-rating__star");if(!a.length)return;const s=Array.from(a).findIndex((t=>t===document.activeElement));let n=-1;switch(t.key){case"ArrowRight":case"ArrowUp":t.preventDefault(),n=a.length-1>s?s+1:0;break;case"ArrowLeft":case"ArrowDown":t.preventDefault(),n=s>0?s-1:a.length-1;break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=a.length-1;break;case" ":case"Enter":t.preventDefault(),0>s||a[s].click()}0>n||a[n].focus()}(t,e)}));const a=e.querySelectorAll(".c-rating__star");a.forEach((t=>{t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","button"),t.setAttribute("aria-label",`Rate ${Array.from(a).indexOf(t)+1} out of ${a.length}`)}))}function r(){const t=[];return document.querySelectorAll("[data-rating]").forEach((e=>{const a=e,s={};a.dataset.value&&(s.value=parseFloat(a.dataset.value)),a.dataset.maxValue&&(s.maxValue=parseFloat(a.dataset.maxValue)),void 0!==a.dataset.allowHalf&&(s.allowHalf="true"===a.dataset.allowHalf),void 0!==a.dataset.readOnly&&(s.readOnly="true"===a.dataset.readOnly),a.dataset.size&&(s.size=a.dataset.size),a.dataset.color&&(s.color=a.dataset.color);const r=new n(a,s);t.push(r),i(r)})),t}function o(t){const e="string"==typeof t?document.querySelector(t):t;return e&&e._rating||null}function l(){document.querySelectorAll("[data-rating]").forEach((t=>{const e=o(t);e&&e.destroy()}))}"undefined"!=typeof window&&(window.Atomix=window.Atomix||{},window.Atomix.Rating={create:n,init:r,get:o,disposeAll:l,enhanceKeyboardNavigation:i},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",(()=>{r()})):r())}};
2
+ //# sourceMappingURL=471.atomix-0.1.5.react.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/471.atomix-0.1.5.react.esm.js","mappings":"qPAiBA,MAAMA,EAAW,CACfC,MAAO,EACPC,SAAU,EACVC,WAAW,EACXC,UAAU,EACVC,KAAM,MAMO,MAAMC,EAGnBC,MAAwC,KAYxCC,WAAAA,CAAYC,GAA4D,IAA7BC,EAAsBC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,CAAC,EAEnE,GADAG,KAAKL,QAA6B,iBAAZA,EAAuBM,SAASC,cAAcP,GAA0BA,GACzFK,KAAKL,QACR,MAAUQ,MAAM,6BAGlBH,KAAKJ,QAAU,IAAKV,KAAaU,GACjCI,KAAKI,cAAgBJ,KAAKJ,QAAQT,OAAS,EAG3Ca,KAAKK,uBAAyBL,KAAKM,kBAAkBC,KAAKP,MAC1DA,KAAKQ,uBAAyBR,KAAKS,kBAAkBF,KAAKP,MAC1DA,KAAKU,kBAAoBV,KAAKW,aAAaJ,KAAKP,MAChDA,KAAKY,oBAAsBZ,KAAKa,eAAeN,KAAKP,MAGnDA,KAAKL,QAAgBmB,QAAUd,KAEhCA,KAAKe,OACP,CAKQA,KAAAA,GAENf,KAAKL,QAAQqB,aAAa,iBAAyBhB,KAAKJ,QAAQR,SAApB6B,IAC5CjB,KAAKL,QAAQqB,aAAa,kBAA0BhB,KAAKJ,QAAQP,UAApB4B,IAC7CjB,KAAKL,QAAQqB,aAAa,gBAAwBhB,KAAKJ,QAAQN,SAApB2B,IAGvCjB,KAAKJ,QAAQN,UACfU,KAAKL,QAAQqB,aAAa,OAAQ,OAClChB,KAAKL,QAAQqB,aAAa,aAAc,WAAWhB,KAAKI,wBAAwBJ,KAAKJ,QAAQR,mBAE7FY,KAAKL,QAAQqB,aAAa,OAAQ,cAIhChB,KAAKJ,QAAQL,MAA8B,OAAtBS,KAAKJ,QAAQL,MACpCS,KAAKL,QAAQuB,UAAUC,IAAI,aAAanB,KAAKJ,QAAQL,MAGnDS,KAAKJ,QAAQwB,OACfpB,KAAKL,QAAQuB,UAAUC,IAAI,aAAanB,KAAKJ,QAAQwB,OAIvDpB,KAAKP,MAAQO,KAAKL,QAAQ0B,iBAAiB,mBAG3CrB,KAAKsB,eAGAtB,KAAKJ,QAAQN,UAChBU,KAAKuB,cAIPvB,KAAKL,QAAQ6B,cAAc,IAAIC,YAAY,cAAe,CACxDC,SAAS,EACTC,OAAQ,CAAEC,SAAU5B,QAExB,CAKQuB,WAAAA,GACDvB,KAAKP,QAGVO,KAAKP,MAAMoC,SAASC,IAClBA,EAAKC,iBAAiB,aAAc/B,KAAKK,wBACzCyB,EAAKC,iBAAiB,QAAS/B,KAAKU,mBACpCoB,EAAKC,iBAAiB,UAAW/B,KAAKY,qBAGtCkB,EAAKd,aAAa,WAAY,KAC9Bc,EAAKd,aAAa,OAAQ,SAAS,IAIrChB,KAAKL,QAAQoC,iBAAiB,aAAc/B,KAAKQ,wBACnD,CAKQF,iBAAAA,CAAkB0B,GACxB,GAAIhC,KAAKJ,QAAQN,SAAU,OAE3B,MACMH,EAAQ8C,OADCD,EAAME,cACOC,aAAa,eAEzCnC,KAAKoC,gBAAgBjD,EACvB,CAKQsB,iBAAAA,GACFT,KAAKJ,QAAQN,UAEjBU,KAAKsB,cACP,CAKQX,YAAAA,CAAaqB,GACnB,GAAIhC,KAAKJ,QAAQN,SAAU,OAE3B,MACMH,EAAQ8C,OADCD,EAAME,cACOC,aAAa,eAEzCnC,KAAKqC,SAASlD,GAEVa,KAAKJ,QAAQ0C,UACftC,KAAKJ,QAAQ0C,SAASnD,EAE1B,CAKQ0B,cAAAA,CAAemB,GACrB,GAAIhC,KAAKJ,QAAQN,SAAU,OAE3B,MACMiD,EAAQN,OADCD,EAAME,cACOC,aAAa,eACnCK,EAAOxC,KAAKJ,QAAQP,UAAY,GAAM,EAC5C,IAAIoD,EAAWzC,KAAKI,cAEpB,OAAQ4B,EAAMU,KACZ,IAAK,aACL,IAAK,UACHD,EAAWE,KAAKC,IAAI5C,KAAKJ,QAAQR,UAAY,EAAGY,KAAKI,cAAgBoC,GACrER,EAAMa,iBACN,MACF,IAAK,YACL,IAAK,YACHJ,EAAWE,KAAKG,IAAI,EAAG9C,KAAKI,cAAgBoC,GAC5CR,EAAMa,iBACN,MACF,IAAK,OACHJ,EAAW,EACXT,EAAMa,iBACN,MACF,IAAK,MACHJ,EAAWzC,KAAKJ,QAAQR,UAAY,EACpC4C,EAAMa,iBACN,MACF,IAAK,IACL,IAAK,QACHJ,EAAWF,EACXP,EAAMa,iBACN,MACF,QACE,OAGAJ,IAAazC,KAAKI,gBACpBJ,KAAKqC,SAASI,GAEVzC,KAAKJ,QAAQ0C,UACftC,KAAKJ,QAAQ0C,SAASG,GAG5B,CAKQnB,YAAAA,GACN,IAAKtB,KAAKP,MAAO,OAEjB,MAAMsD,EAAe/C,KAAKJ,QAAQP,UAC9BsD,KAAKK,MAA2B,EAArBhD,KAAKI,eAAqB,EACrCuC,KAAKM,MAAMjD,KAAKI,eAEpBJ,KAAKP,MAAMoC,SAASC,IAClB,MAAMoB,EAAYjB,OAAOH,EAAKK,aAAa,eACrCgB,EAA0BR,KAAKK,MAAMD,IAAxBG,EACbE,EAAapD,KAAKJ,QAAQP,WAAc6D,EAAY,KAAQH,EAGlEjB,EAAKZ,UAAUmC,OAAO,uBAAwB,wBAG1CF,EACFrB,EAAKZ,UAAUC,IAAI,wBACViC,GACTtB,EAAKZ,UAAUC,IAAI,wBAIrBW,EAAKd,aAAa,eAAgBmC,GAAcC,EAAa,OAAS,QAAQ,IAI5EpD,KAAKJ,QAAQN,UACfU,KAAKL,QAAQqB,aAAa,aAAc,WAAW+B,YAAuB/C,KAAKJ,QAAQR,kBAIzFY,KAAKL,QAAQqB,aAAa,aAAqB+B,EAAP9B,GAC1C,CAKQmB,eAAAA,CAAgBjD,GACjBa,KAAKP,OAEVO,KAAKP,MAAMoC,SAASC,IAClB,MAAMoB,EAAYjB,OAAOH,EAAKK,aAAa,eAG3CL,EAAKZ,UAAUmC,OAAO,uBAAwB,wBAG1CH,EAAa/D,GACf2C,EAAKZ,UAAUC,IAAI,uBACrB,GAEJ,CAKOmC,QAAAA,GACL,OAAOtD,KAAKI,aACd,CAMOiC,QAAAA,CAASlD,GAEd,MAAMoE,EAAeZ,KAAKG,IAAI,EAAGH,KAAKC,IAAIzD,EAAOa,KAAKJ,QAAQR,UAAY,IAG1EY,KAAKI,cAAgBmD,EAGrBvD,KAAKsB,eAGLtB,KAAKL,QAAQ6B,cAAc,IAAIC,YAAY,gBAAiB,CAC1DC,SAAS,EACTC,OAAQ,CAAExC,MAAOoE,KAErB,CAMOC,aAAAA,CAAc5D,GAEnBI,KAAKJ,QAAU,IAAKI,KAAKJ,WAAYA,GAGrCI,KAAKe,OACP,CAKO0C,OAAAA,GACDzD,KAAKP,OAEPO,KAAKP,MAAMoC,SAASC,IAClBA,EAAK4B,oBAAoB,aAAc1D,KAAKK,wBAC5CyB,EAAK4B,oBAAoB,QAAS1D,KAAKU,mBACvCoB,EAAK4B,oBAAoB,UAAW1D,KAAKY,oBAAoB,IAKjEZ,KAAKL,QAAQ+D,oBAAoB,aAAc1D,KAAKQ,+BAG5CR,KAAKL,QAAgBmB,OAC/B,EC3QK,SAAS6C,EAA8BC,GAC5C,MAAMjE,EAAUiE,EAAOjE,QACvB,IAAKA,EAAS,OAEdA,EAAQoC,iBAAiB,WAAY8B,KAtDhC,SAAkC7B,EAAsB8B,GAC7D,IAAKA,EAAW,OAEhB,MAAMrE,EAAQqE,EAAUzC,iBAA8B,mBACtD,IAAK5B,EAAMK,OAAQ,OAEnB,MAAMiE,EAAeC,MAAMC,KAAKxE,GAAOyE,WAAUC,GAAQA,IAASlE,SAASmE,gBAC3E,IAAIC,GAAa,EAEjB,OAAQrC,EAAMU,KACZ,IAAK,aACL,IAAK,UACHV,EAAMa,iBACNwB,EAA2B5E,EAAMK,OAAS,EAA9BiE,EAAkCA,EAAe,EAAI,EACjE,MAEF,IAAK,YACL,IAAK,YACH/B,EAAMa,iBACNwB,EAAYN,EAAe,EAAIA,EAAe,EAAItE,EAAMK,OAAS,EACjE,MAEF,IAAK,OACHkC,EAAMa,iBACNwB,EAAY,EACZ,MAEF,IAAK,MACHrC,EAAMa,iBACNwB,EAAY5E,EAAMK,OAAS,EAC3B,MAEF,IAAK,IACL,IAAK,QACHkC,EAAMa,iBACc,EAAhBkB,GACFtE,EAAMsE,GAAcO,QAKT,EAAbD,GACF5E,EAAM4E,GAAWE,OAErB,CAWIC,CAAyBX,EAAGlE,EAAQ,IAItC,MAAMF,EAAQE,EAAQ0B,iBAA8B,mBACpD5B,EAAMoC,SAAQC,IACPA,EAAK2C,aAAa,aACrB3C,EAAKd,aAAa,WAAY,KAEhCc,EAAKd,aAAa,OAAQ,UAC1Bc,EAAKd,aAAa,aAAc,QAAQgD,MAAMC,KAAKxE,GAAOiF,QAAQ5C,GAAQ,YAAYrC,EAAMK,SAAS,GAEzG,CAKO,SAAS6E,IACd,MAAMC,EAAsB,GA6C5B,OA3CA3E,SAASoB,iBAAiB,iBAAiBQ,SAAQlC,IACjD,MAAMkF,EAAKlF,EAGLC,EAA+B,CAAC,EAGlCiF,EAAGC,QAAQ3F,QACbS,EAAQT,MAAQ4F,WAAWF,EAAGC,QAAQ3F,QAIpC0F,EAAGC,QAAQ1F,WACbQ,EAAQR,SAAW2F,WAAWF,EAAGC,QAAQ1F,gBAIdW,IAAzB8E,EAAGC,QAAQzF,YACbO,EAAQP,UAAqC,SAAzBwF,EAAGC,QAAQzF,gBAILU,IAAxB8E,EAAGC,QAAQxF,WACbM,EAAQN,SAAmC,SAAxBuF,EAAGC,QAAQxF,UAI5BuF,EAAGC,QAAQvF,OACbK,EAAQL,KAAOsF,EAAGC,QAAQvF,MAIxBsF,EAAGC,QAAQ1D,QACbxB,EAAQwB,MAAQyD,EAAGC,QAAQ1D,OAG7B,MAAMQ,EAAW,IAAIpC,EAAOqF,EAAIjF,GAChCgF,EAAUI,KAAKpD,GAGf+B,EAA8B/B,EAAS,IAGlCgD,CACT,CAMO,SAASK,EAAYtF,GAC1B,MAAMkF,EAAwB,iBAAZlF,EAAuBM,SAASC,cAAcP,GAAWA,EAE3E,OAAKkF,GAGGA,EAAW/D,SAHH,IAIlB,CAKO,SAASoE,IACdjF,SAASoB,iBAAiB,iBAAiBQ,SAAQlC,IACjD,MAAMiC,EAAWqD,EAAYtF,GACzBiC,GACFA,EAAS6B,SACX,GAEJ,CCzJsB,oBAAX0B,SAERA,OAAeC,OAAUD,OAAeC,QAAU,CAAC,EAGnDD,OAAeC,OAAO5F,OAAS,CAC9B6F,OAAQ7F,EACR8F,KAAMX,EACNY,IAAKN,EACLC,WAAYA,EACZM,0BAA2B7B,GAID,YAAxB1D,SAASwF,WACXxF,SAAS8B,iBAAiB,oBAAoB,KAC5C4C,GAAwB,IAG1BA,I","sources":["webpack://@shohojdhara/atomix/./src/components/Rating/scripts/index.ts","webpack://@shohojdhara/atomix/./src/components/Rating/scripts/ratingInteractions.ts","webpack://@shohojdhara/atomix/./src/components/Rating/scripts/bundle.ts"],"sourcesContent":["import type { RatingProps, Size, ThemeColor } from '../../../lib/types/components';\n\n/**\n * Rating component class for vanilla JavaScript implementation\n */\nexport type RatingOptions = Pick<RatingProps, \n 'value' | \n 'defaultValue' | \n 'maxValue' | \n 'allowHalf' | \n 'readOnly' | \n 'size' | \n 'color' | \n 'onChange'\n>;\n\n// Define default options\nconst DEFAULTS = {\n value: 0,\n maxValue: 5,\n allowHalf: false,\n readOnly: false,\n size: 'md' as Size,\n};\n\n/**\n * Rating component class for vanilla JavaScript implementation\n */\nexport default class Rating {\n element: HTMLElement;\n options: RatingOptions;\n stars: NodeListOf<HTMLElement> | null = null;\n private _currentValue: number;\n private _boundHandleMouseEnter: (event: MouseEvent) => void;\n private _boundHandleMouseLeave: (event: MouseEvent) => void;\n private _boundHandleClick: (event: MouseEvent) => void;\n private _boundHandleKeyDown: (event: KeyboardEvent) => void;\n \n /**\n * Create a new Rating instance\n * @param element - The element to attach the rating to\n * @param options - Configuration options\n */\n constructor(element: string | HTMLElement, options: RatingOptions = {}) {\n this.element = typeof element === 'string' ? document.querySelector(element) as HTMLElement : element;\n if (!this.element) {\n throw new Error('Rating: Element not found');\n }\n \n this.options = { ...DEFAULTS, ...options };\n this._currentValue = this.options.value || 0;\n \n // Bind event handlers to this instance\n this._boundHandleMouseEnter = this._handleMouseEnter.bind(this);\n this._boundHandleMouseLeave = this._handleMouseLeave.bind(this);\n this._boundHandleClick = this._handleClick.bind(this);\n this._boundHandleKeyDown = this._handleKeyDown.bind(this);\n \n // Store reference to instance on element\n (this.element as any)._rating = this;\n \n this._init();\n }\n \n /**\n * Initialize the component\n */\n private _init(): void {\n // Set data attributes\n this.element.setAttribute('data-max-value', String(this.options.maxValue));\n this.element.setAttribute('data-allow-half', String(this.options.allowHalf));\n this.element.setAttribute('data-readonly', String(this.options.readOnly));\n \n // Set ARIA attributes\n if (this.options.readOnly) {\n this.element.setAttribute('role', 'img');\n this.element.setAttribute('aria-label', `Rating: ${this._currentValue} out of ${this.options.maxValue} stars`);\n } else {\n this.element.setAttribute('role', 'radiogroup');\n }\n \n // Add CSS classes\n if (this.options.size && this.options.size !== 'md') {\n this.element.classList.add(`c-rating--${this.options.size}`);\n }\n \n if (this.options.color) {\n this.element.classList.add(`c-rating--${this.options.color}`);\n }\n \n // Get all stars\n this.stars = this.element.querySelectorAll('.c-rating__star');\n \n // Set initial state\n this._updateStars();\n \n // Bind events if not read-only\n if (!this.options.readOnly) {\n this._bindEvents();\n }\n \n // Dispatch init event\n this.element.dispatchEvent(new CustomEvent('rating:init', {\n bubbles: true,\n detail: { instance: this }\n }));\n }\n \n /**\n * Bind event listeners\n */\n private _bindEvents(): void {\n if (!this.stars) return;\n \n // Add event listeners to each star\n this.stars.forEach((star) => {\n star.addEventListener('mouseenter', this._boundHandleMouseEnter);\n star.addEventListener('click', this._boundHandleClick);\n star.addEventListener('keydown', this._boundHandleKeyDown);\n \n // Make stars focusable\n star.setAttribute('tabindex', '0');\n star.setAttribute('role', 'button');\n });\n \n // Add mouseleave to the container\n this.element.addEventListener('mouseleave', this._boundHandleMouseLeave);\n }\n \n /**\n * Handle mouse enter on a star\n */\n private _handleMouseEnter(event: MouseEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const value = Number(target.getAttribute('data-value'));\n \n this._highlightStars(value);\n }\n \n /**\n * Handle mouse leave from rating component\n */\n private _handleMouseLeave(): void {\n if (this.options.readOnly) return;\n \n this._updateStars();\n }\n \n /**\n * Handle click on a star\n */\n private _handleClick(event: MouseEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const value = Number(target.getAttribute('data-value'));\n \n this.setValue(value);\n \n if (this.options.onChange) {\n this.options.onChange(value);\n }\n }\n \n /**\n * Handle keyboard navigation\n */\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.options.readOnly) return;\n \n const target = event.currentTarget as HTMLElement;\n const index = Number(target.getAttribute('data-value'));\n const step = this.options.allowHalf ? 0.5 : 1;\n let newValue = this._currentValue;\n \n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n newValue = Math.min(this.options.maxValue || 5, this._currentValue + step);\n event.preventDefault();\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n newValue = Math.max(0, this._currentValue - step);\n event.preventDefault();\n break;\n case 'Home':\n newValue = 0;\n event.preventDefault();\n break;\n case 'End':\n newValue = this.options.maxValue || 5;\n event.preventDefault();\n break;\n case ' ':\n case 'Enter':\n newValue = index;\n event.preventDefault();\n break;\n default:\n return;\n }\n \n if (newValue !== this._currentValue) {\n this.setValue(newValue);\n \n if (this.options.onChange) {\n this.options.onChange(newValue);\n }\n }\n }\n \n /**\n * Update star appearance based on current value\n */\n private _updateStars(): void {\n if (!this.stars) return;\n \n const roundedValue = this.options.allowHalf \n ? Math.floor(this._currentValue * 2) / 2 \n : Math.round(this._currentValue);\n \n this.stars.forEach((star) => {\n const starValue = Number(star.getAttribute('data-value'));\n const isFullStar = starValue <= Math.floor(roundedValue);\n const isHalfStar = this.options.allowHalf && (starValue - 0.5 === roundedValue);\n \n // Remove existing classes\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n \n // Add appropriate classes\n if (isFullStar) {\n star.classList.add('c-rating__star--full');\n } else if (isHalfStar) {\n star.classList.add('c-rating__star--half');\n }\n \n // Update ARIA attributes\n star.setAttribute('aria-checked', isFullStar || isHalfStar ? 'true' : 'false');\n });\n \n // Update container ARIA label if read-only\n if (this.options.readOnly) {\n this.element.setAttribute('aria-label', `Rating: ${roundedValue} out of ${this.options.maxValue} stars`);\n }\n \n // Update data attribute\n this.element.setAttribute('data-value', String(roundedValue));\n }\n \n /**\n * Temporarily highlight stars up to a value\n */\n private _highlightStars(value: number): void {\n if (!this.stars) return;\n \n this.stars.forEach((star) => {\n const starValue = Number(star.getAttribute('data-value'));\n \n // Remove existing classes\n star.classList.remove('c-rating__star--full', 'c-rating__star--half');\n \n // Add full class if star value is less than or equal to hovered value\n if (starValue <= value) {\n star.classList.add('c-rating__star--full');\n }\n });\n }\n \n /**\n * Get current rating value\n */\n public getValue(): number {\n return this._currentValue;\n }\n \n /**\n * Set the rating value\n * @param value - The new rating value\n */\n public setValue(value: number): void {\n // Clamp value between 0 and maxValue\n const clampedValue = Math.max(0, Math.min(value, this.options.maxValue || 5));\n \n // Update current value\n this._currentValue = clampedValue;\n \n // Update visual state\n this._updateStars();\n \n // Dispatch change event\n this.element.dispatchEvent(new CustomEvent('rating:change', {\n bubbles: true,\n detail: { value: clampedValue }\n }));\n }\n \n /**\n * Update component options\n * @param options Partial options to update\n */\n public updateOptions(options: Partial<RatingOptions>): void {\n // Update options\n this.options = { ...this.options, ...options };\n \n // Re-initialize component with new options\n this._init();\n }\n \n /**\n * Destroy the rating component and remove event listeners\n */\n public destroy(): void {\n if (this.stars) {\n // Remove event listeners from stars\n this.stars.forEach((star) => {\n star.removeEventListener('mouseenter', this._boundHandleMouseEnter);\n star.removeEventListener('click', this._boundHandleClick);\n star.removeEventListener('keydown', this._boundHandleKeyDown);\n });\n }\n \n // Remove event listener from container\n this.element.removeEventListener('mouseleave', this._boundHandleMouseLeave);\n \n // Remove reference from element\n delete (this.element as any)._rating;\n }\n}\n","import Rating from './index';\nimport type { RatingOptions } from './index';\n\n/**\n * Event handlers and utility functions for Rating component\n */\n\n/**\n * Handle keyboard navigation for rating stars\n * @param event Keyboard event\n * @param container Rating container element\n */\nexport function handleKeyboardNavigation(event: KeyboardEvent, container: HTMLElement): void {\n if (!container) return;\n \n const stars = container.querySelectorAll<HTMLElement>('.c-rating__star');\n if (!stars.length) return;\n \n const currentIndex = Array.from(stars).findIndex(item => item === document.activeElement);\n let nextIndex = -1;\n \n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n event.preventDefault();\n nextIndex = currentIndex < stars.length - 1 ? currentIndex + 1 : 0;\n break;\n \n case 'ArrowLeft':\n case 'ArrowDown':\n event.preventDefault();\n nextIndex = currentIndex > 0 ? currentIndex - 1 : stars.length - 1;\n break;\n \n case 'Home':\n event.preventDefault();\n nextIndex = 0;\n break;\n \n case 'End':\n event.preventDefault();\n nextIndex = stars.length - 1;\n break;\n \n case ' ':\n case 'Enter':\n event.preventDefault();\n if (currentIndex >= 0) {\n stars[currentIndex].click();\n }\n break;\n }\n \n if (nextIndex >= 0) {\n stars[nextIndex].focus();\n }\n}\n\n/**\n * Enhance a rating with keyboard navigation\n * @param rating Rating instance\n */\nexport function enhanceWithKeyboardNavigation(rating: Rating): void {\n const element = rating.element;\n if (!element) return;\n \n element.addEventListener('keydown', (e: KeyboardEvent) => {\n handleKeyboardNavigation(e, element);\n });\n \n // Make stars focusable\n const stars = element.querySelectorAll<HTMLElement>('.c-rating__star');\n stars.forEach(star => {\n if (!star.hasAttribute('tabindex')) {\n star.setAttribute('tabindex', '0');\n }\n star.setAttribute('role', 'button');\n star.setAttribute('aria-label', `Rate ${Array.from(stars).indexOf(star) + 1} out of ${stars.length}`);\n });\n}\n\n/**\n * Initialize ratings with data attributes\n */\nexport function initFromDataAttributes(): Rating[] {\n const instances: Rating[] = [];\n \n document.querySelectorAll('[data-rating]').forEach(element => {\n const el = element as HTMLElement;\n \n // Parse options from data attributes\n const options: Record<string, any> = {};\n \n // Value\n if (el.dataset.value) {\n options.value = parseFloat(el.dataset.value);\n }\n \n // Max value\n if (el.dataset.maxValue) {\n options.maxValue = parseFloat(el.dataset.maxValue);\n }\n \n // Allow half\n if (el.dataset.allowHalf !== undefined) {\n options.allowHalf = el.dataset.allowHalf === 'true';\n }\n \n // Read only\n if (el.dataset.readOnly !== undefined) {\n options.readOnly = el.dataset.readOnly === 'true';\n }\n \n // Size\n if (el.dataset.size) {\n options.size = el.dataset.size;\n }\n \n // Color\n if (el.dataset.color) {\n options.color = el.dataset.color;\n }\n \n const instance = new Rating(el, options);\n instances.push(instance);\n \n // Enhance with keyboard navigation\n enhanceWithKeyboardNavigation(instance);\n });\n \n return instances;\n}\n\n/**\n * Get a Rating instance from an element\n * @param element Element or selector\n */\nexport function getInstance(element: string | HTMLElement): Rating | null {\n const el = typeof element === 'string' ? document.querySelector(element) : element;\n \n if (!el) return null;\n \n // Use a stored reference if exists\n return (el as any)._rating || null;\n}\n\n/**\n * Dispose all Rating instances\n */\nexport function disposeAll(): void {\n document.querySelectorAll('[data-rating]').forEach(element => {\n const instance = getInstance(element as HTMLElement);\n if (instance) {\n instance.destroy();\n }\n });\n}\n","import Rating from './index';\nimport { initFromDataAttributes, getInstance, disposeAll, enhanceWithKeyboardNavigation } from './ratingInteractions';\n\nif (typeof window !== 'undefined') {\n // Initialize the Atomix global object if it doesn't exist\n (window as any).Atomix = (window as any).Atomix || {};\n \n // Add Rating to the global Atomix object\n (window as any).Atomix.Rating = {\n create: Rating,\n init: initFromDataAttributes,\n get: getInstance,\n disposeAll: disposeAll,\n enhanceKeyboardNavigation: enhanceWithKeyboardNavigation\n };\n \n // Auto-initialize ratings when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n initFromDataAttributes();\n });\n } else {\n initFromDataAttributes();\n }\n}\n\n// Export everything for module bundling\nexport { \n Rating as default,\n initFromDataAttributes,\n getInstance,\n disposeAll,\n enhanceWithKeyboardNavigation\n};\n"],"names":["DEFAULTS","value","maxValue","allowHalf","readOnly","size","Rating","stars","constructor","element","options","arguments","length","undefined","this","document","querySelector","Error","_currentValue","_boundHandleMouseEnter","_handleMouseEnter","bind","_boundHandleMouseLeave","_handleMouseLeave","_boundHandleClick","_handleClick","_boundHandleKeyDown","_handleKeyDown","_rating","_init","setAttribute","String","classList","add","color","querySelectorAll","_updateStars","_bindEvents","dispatchEvent","CustomEvent","bubbles","detail","instance","forEach","star","addEventListener","event","Number","currentTarget","getAttribute","_highlightStars","setValue","onChange","index","step","newValue","key","Math","min","preventDefault","max","roundedValue","floor","round","starValue","isFullStar","isHalfStar","remove","getValue","clampedValue","updateOptions","destroy","removeEventListener","enhanceWithKeyboardNavigation","rating","e","container","currentIndex","Array","from","findIndex","item","activeElement","nextIndex","click","focus","handleKeyboardNavigation","hasAttribute","indexOf","initFromDataAttributes","instances","el","dataset","parseFloat","push","getInstance","disposeAll","window","Atomix","create","init","get","enhanceKeyboardNavigation","readyState"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(this.webpackChunkAtomix=this.webpackChunkAtomix||[]).push([[471],{471:(t,e,a)=>{a.r(e),a.d(e,{default:()=>n,disposeAll:()=>l,enhanceWithKeyboardNavigation:()=>i,getInstance:()=>o,initFromDataAttributes:()=>r});const s={value:0,maxValue:5,allowHalf:!1,readOnly:!1,size:"md"};class n{stars=null;constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.element="string"==typeof t?document.querySelector(t):t,!this.element)throw Error("Rating: Element not found");this.options={...s,...e},this._currentValue=this.options.value||0,this._boundHandleMouseEnter=this._handleMouseEnter.bind(this),this._boundHandleMouseLeave=this._handleMouseLeave.bind(this),this._boundHandleClick=this._handleClick.bind(this),this._boundHandleKeyDown=this._handleKeyDown.bind(this),this.element._rating=this,this._init()}_init(){this.element.setAttribute("data-max-value",this.options.maxValue+""),this.element.setAttribute("data-allow-half",this.options.allowHalf+""),this.element.setAttribute("data-readonly",this.options.readOnly+""),this.options.readOnly?(this.element.setAttribute("role","img"),this.element.setAttribute("aria-label",`Rating: ${this._currentValue} out of ${this.options.maxValue} stars`)):this.element.setAttribute("role","radiogroup"),this.options.size&&"md"!==this.options.size&&this.element.classList.add("c-rating--"+this.options.size),this.options.color&&this.element.classList.add("c-rating--"+this.options.color),this.stars=this.element.querySelectorAll(".c-rating__star"),this._updateStars(),this.options.readOnly||this._bindEvents(),this.element.dispatchEvent(new CustomEvent("rating:init",{bubbles:!0,detail:{instance:this}}))}_bindEvents(){this.stars&&(this.stars.forEach((t=>{t.addEventListener("mouseenter",this._boundHandleMouseEnter),t.addEventListener("click",this._boundHandleClick),t.addEventListener("keydown",this._boundHandleKeyDown),t.setAttribute("tabindex","0"),t.setAttribute("role","button")})),this.element.addEventListener("mouseleave",this._boundHandleMouseLeave))}_handleMouseEnter(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this._highlightStars(e)}_handleMouseLeave(){this.options.readOnly||this._updateStars()}_handleClick(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value"));this.setValue(e),this.options.onChange&&this.options.onChange(e)}_handleKeyDown(t){if(this.options.readOnly)return;const e=Number(t.currentTarget.getAttribute("data-value")),a=this.options.allowHalf?.5:1;let s=this._currentValue;switch(t.key){case"ArrowRight":case"ArrowUp":s=Math.min(this.options.maxValue||5,this._currentValue+a),t.preventDefault();break;case"ArrowLeft":case"ArrowDown":s=Math.max(0,this._currentValue-a),t.preventDefault();break;case"Home":s=0,t.preventDefault();break;case"End":s=this.options.maxValue||5,t.preventDefault();break;case" ":case"Enter":s=e,t.preventDefault();break;default:return}s!==this._currentValue&&(this.setValue(s),this.options.onChange&&this.options.onChange(s))}_updateStars(){if(!this.stars)return;const t=this.options.allowHalf?Math.floor(2*this._currentValue)/2:Math.round(this._currentValue);this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value")),s=Math.floor(t)>=a,n=this.options.allowHalf&&a-.5===t;e.classList.remove("c-rating__star--full","c-rating__star--half"),s?e.classList.add("c-rating__star--full"):n&&e.classList.add("c-rating__star--half"),e.setAttribute("aria-checked",s||n?"true":"false")})),this.options.readOnly&&this.element.setAttribute("aria-label",`Rating: ${t} out of ${this.options.maxValue} stars`),this.element.setAttribute("data-value",t+"")}_highlightStars(t){this.stars&&this.stars.forEach((e=>{const a=Number(e.getAttribute("data-value"));e.classList.remove("c-rating__star--full","c-rating__star--half"),a>t||e.classList.add("c-rating__star--full")}))}getValue(){return this._currentValue}setValue(t){const e=Math.max(0,Math.min(t,this.options.maxValue||5));this._currentValue=e,this._updateStars(),this.element.dispatchEvent(new CustomEvent("rating:change",{bubbles:!0,detail:{value:e}}))}updateOptions(t){this.options={...this.options,...t},this._init()}destroy(){this.stars&&this.stars.forEach((t=>{t.removeEventListener("mouseenter",this._boundHandleMouseEnter),t.removeEventListener("click",this._boundHandleClick),t.removeEventListener("keydown",this._boundHandleKeyDown)})),this.element.removeEventListener("mouseleave",this._boundHandleMouseLeave),delete this.element._rating}}function i(t){const e=t.element;if(!e)return;e.addEventListener("keydown",(t=>{!function(t,e){if(!e)return;const a=e.querySelectorAll(".c-rating__star");if(!a.length)return;const s=Array.from(a).findIndex((t=>t===document.activeElement));let n=-1;switch(t.key){case"ArrowRight":case"ArrowUp":t.preventDefault(),n=a.length-1>s?s+1:0;break;case"ArrowLeft":case"ArrowDown":t.preventDefault(),n=s>0?s-1:a.length-1;break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=a.length-1;break;case" ":case"Enter":t.preventDefault(),0>s||a[s].click()}0>n||a[n].focus()}(t,e)}));const a=e.querySelectorAll(".c-rating__star");a.forEach((t=>{t.hasAttribute("tabindex")||t.setAttribute("tabindex","0"),t.setAttribute("role","button"),t.setAttribute("aria-label",`Rate ${Array.from(a).indexOf(t)+1} out of ${a.length}`)}))}function r(){const t=[];return document.querySelectorAll("[data-rating]").forEach((e=>{const a=e,s={};a.dataset.value&&(s.value=parseFloat(a.dataset.value)),a.dataset.maxValue&&(s.maxValue=parseFloat(a.dataset.maxValue)),void 0!==a.dataset.allowHalf&&(s.allowHalf="true"===a.dataset.allowHalf),void 0!==a.dataset.readOnly&&(s.readOnly="true"===a.dataset.readOnly),a.dataset.size&&(s.size=a.dataset.size),a.dataset.color&&(s.color=a.dataset.color);const r=new n(a,s);t.push(r),i(r)})),t}function o(t){const e="string"==typeof t?document.querySelector(t):t;return e&&e._rating||null}function l(){document.querySelectorAll("[data-rating]").forEach((t=>{const e=o(t);e&&e.destroy()}))}"undefined"!=typeof window&&(window.Atomix=window.Atomix||{},window.Atomix.Rating={create:n,init:r,get:o,disposeAll:l,enhanceKeyboardNavigation:i},"loading"===document.readyState?document.addEventListener("DOMContentLoaded",(()=>{r()})):r())}}]);
2
+ //# sourceMappingURL=471.atomix-0.1.5.react.js.map