@shohojdhara/atomix 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CONTRIBUTING.md +151 -0
  2. package/NEXTJS_INTEGRATION.md +358 -0
  3. package/README.md +168 -119
  4. package/babel.config.js +58 -0
  5. package/css.d.ts +10 -0
  6. package/dist/css/atomix.css +1 -2
  7. package/dist/js/194.js +1 -2
  8. package/dist/js/244.js +1 -0
  9. package/dist/js/atomix.react.cjs.js +1 -0
  10. package/dist/js/atomix.react.esm.js +1 -2
  11. package/dist/js/atomix.react.umd.js +1 -2
  12. package/dist/js/chunks/cjs/202.9d3b1ef1eaa0d5c8a309.js +1 -0
  13. package/dist/js/chunks/cjs/308.6ea9685ea38ead4120d0.js +1 -0
  14. package/dist/js/chunks/cjs/54.73db6922594e421ba6b1.js +1 -0
  15. package/dist/js/chunks/cjs/619.51feecaadcab819780d4.js +1 -0
  16. package/dist/js/chunks/cjs/690.90f6d11164081cbcbc4d.js +1 -0
  17. package/dist/js/chunks/cjs/894.24877561df336a8dfd14.js +1 -0
  18. package/dist/js/chunks/cjs/897.6c2a71fae95338890de7.js +1 -0
  19. package/dist/js/chunks/esm/{202.ff48d27672233280e021.js → 202.82aa7b3244e53c9edb72.js} +1 -2
  20. package/dist/js/chunks/esm/{308.f873332126eba90e5c62.js → 308.27e1e4005705ae320432.js} +1 -2
  21. package/dist/js/chunks/esm/{54.4db919e5e4e5cc6d7c72.js → 54.ece1fd6964f98d4d994f.js} +1 -2
  22. package/dist/js/chunks/esm/{619.afc5a718eff77fa423b5.js → 619.ebeb0298432a066ac05c.js} +1 -2
  23. package/dist/js/chunks/esm/{690.a9e968c7497d61e56cdc.js → 690.c5f412cc979b55740359.js} +1 -2
  24. package/dist/js/chunks/esm/{894.f1091a4a8758c26d29e4.js → 894.3604ddc9367d75191198.js} +1 -2
  25. package/dist/js/chunks/esm/{897.561a50f7d043d42169da.js → 897.a4aab2fad9401693eb12.js} +1 -2
  26. package/dist/js/chunks/umd/{202.dac7605cc555b6bda542.js → 202.5017dd0403d696bf1644.js} +1 -2
  27. package/dist/js/chunks/umd/{308.6709979849dcbdb90c9b.js → 308.4bc14b9d7b16b6ee0ab8.js} +1 -2
  28. package/dist/js/chunks/umd/{54.403470e1f7d0ef4424a7.js → 54.7fdfb4a031989470a70d.js} +1 -2
  29. package/dist/js/chunks/umd/{619.fa05ea98c10270eb64c5.js → 619.84a0c35ecee695250085.js} +1 -2
  30. package/dist/js/chunks/umd/{690.aa7054d1c53e5402c2d6.js → 690.d7041094a34a4a434be2.js} +1 -2
  31. package/dist/js/chunks/umd/{894.3e1eaf0a2aadf4434390.js → 894.c127ee4e9513c22ee97d.js} +1 -2
  32. package/dist/js/chunks/umd/{897.554ea37be4453698c167.js → 897.26932ac837a39fc91907.js} +1 -2
  33. package/dist/types/components/Badge/index.d.ts +3 -3
  34. package/dist/types/components/{Navbar → Navigation/Menu}/MegaMenu.d.ts +1 -1
  35. package/dist/types/components/{Navbar → Navigation/Menu}/Menu.d.ts +1 -1
  36. package/dist/types/components/Navigation/Nav/Nav.d.ts +20 -0
  37. package/dist/types/components/{Navbar → Navigation/Nav}/NavDropdown.d.ts +1 -1
  38. package/dist/types/components/Navigation/Nav/NavItem.d.ts +33 -0
  39. package/dist/types/components/Navigation/Navbar/Navbar.d.ts +19 -0
  40. package/dist/types/components/Navigation/SideMenu/SideMenu.d.ts +20 -0
  41. package/dist/types/components/Navigation/SideMenu/SideMenuItem.d.ts +30 -0
  42. package/dist/types/components/Navigation/SideMenu/SideMenuList.d.ts +17 -0
  43. package/dist/types/components/Navigation/index.d.ts +10 -0
  44. package/dist/types/components/PhotoViewer/PhotoViewer.d.ts +2 -2
  45. package/dist/types/components/PhotoViewer/PhotoViewerHeader.d.ts +2 -2
  46. package/dist/types/components/Tab/index.d.ts +2 -2
  47. package/dist/types/components/Toggle/index.d.ts +2 -2
  48. package/dist/types/components/Tooltip/index.d.ts +3 -3
  49. package/dist/types/components/index.d.ts +1 -1
  50. package/dist/types/lib/composables/index.d.ts +1 -0
  51. package/dist/types/lib/composables/useDatePicker.d.ts +1 -1
  52. package/dist/types/lib/composables/useDropdown.d.ts +1 -1
  53. package/dist/types/lib/composables/useModal.d.ts +1 -1
  54. package/dist/types/lib/composables/usePhotoViewer.d.ts +1 -1
  55. package/dist/types/lib/composables/useRating.d.ts +1 -1
  56. package/dist/types/lib/composables/useSideMenu.d.ts +28 -0
  57. package/dist/types/lib/constants/components.d.ts +72 -0
  58. package/dist/types/lib/types/components.d.ts +103 -0
  59. package/examples/nextjs-example.tsx +271 -0
  60. package/implementation-guide.md +505 -0
  61. package/next.config.js +69 -0
  62. package/package.json +80 -42
  63. package/postcss.config.js +28 -0
  64. package/src/Introduction.mdx +3 -5
  65. package/src/assets/fonts/HelveticaNeue/stylesheet.css +140 -127
  66. package/src/components/Accordion/Accordion.stories.tsx +58 -45
  67. package/src/components/Accordion/Accordion.tsx +14 -4
  68. package/src/components/Accordion/scripts/accordionInteractions.ts +9 -9
  69. package/src/components/Accordion/scripts/bundle.ts +1 -1
  70. package/src/components/Accordion/scripts/index.ts +3 -3
  71. package/src/components/AtomixLogo.tsx +13 -19
  72. package/src/components/Avatar/Avatar.stories.tsx +24 -21
  73. package/src/components/Avatar/Avatar.tsx +5 -8
  74. package/src/components/Avatar/AvatarGroup.tsx +11 -11
  75. package/src/components/Avatar/index.ts +1 -1
  76. package/src/components/Avatar/scripts/index.ts +66 -71
  77. package/src/components/Badge/Badge.stories.tsx +51 -21
  78. package/src/components/Badge/Badge.tsx +14 -12
  79. package/src/components/Badge/index.ts +3 -3
  80. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +40 -40
  81. package/src/components/Breadcrumb/Breadcrumb.tsx +19 -26
  82. package/src/components/Breadcrumb/index.ts +1 -1
  83. package/src/components/Breadcrumb/scripts/breadcrumb.ts +36 -34
  84. package/src/components/Breadcrumb/scripts/index.ts +1 -1
  85. package/src/components/Breadcrumb/scripts/types.ts +9 -9
  86. package/src/components/Button/Button.stories.tsx +36 -12
  87. package/src/components/Button/Button.tsx +52 -39
  88. package/src/components/Button/index.ts +1 -1
  89. package/src/components/Button/scripts/buttonInteractions.ts +9 -9
  90. package/src/components/Button/scripts/index.ts +1 -1
  91. package/src/components/Callout/Callout.stories.tsx +207 -114
  92. package/src/components/Callout/Callout.tsx +12 -12
  93. package/src/components/Callout/index.ts +1 -1
  94. package/src/components/Callout/scripts/CalloutInteractions.ts +58 -48
  95. package/src/components/Callout/scripts/bundle.ts +2 -2
  96. package/src/components/Callout/scripts/index.ts +19 -15
  97. package/src/components/Card/Card.stories.tsx +2 -2
  98. package/src/components/Card/Card.tsx +49 -72
  99. package/src/components/Card/ElevationCard.tsx +4 -8
  100. package/src/components/Card/index.ts +1 -1
  101. package/src/components/Card/scripts/bundle.ts +7 -7
  102. package/src/components/Card/scripts/cardInteractions.ts +24 -24
  103. package/src/components/Card/scripts/index.ts +25 -26
  104. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -3
  105. package/src/components/ColorModeToggle/ColorModeToggle.tsx +12 -15
  106. package/src/components/ColorModeToggle/index.ts +1 -1
  107. package/src/components/Countdown/Countdown.stories.tsx +6 -2
  108. package/src/components/Countdown/Countdown.tsx +56 -48
  109. package/src/components/Countdown/index.ts +1 -1
  110. package/src/components/Countdown/scripts/index.ts +33 -28
  111. package/src/components/DataTable/DataTable.stories.tsx +23 -18
  112. package/src/components/DataTable/DataTable.tsx +39 -39
  113. package/src/components/DataTable/index.ts +1 -1
  114. package/src/components/DataTable/scripts/bundle.ts +8 -3
  115. package/src/components/DataTable/scripts/index.ts +182 -164
  116. package/src/components/DatePicker/DatePicker.stories.tsx +136 -148
  117. package/src/components/DatePicker/DatePicker.tsx +461 -420
  118. package/src/components/DatePicker/scripts/bundle.ts +12 -7
  119. package/src/components/DatePicker/scripts/componentInteractions.ts +76 -46
  120. package/src/components/DatePicker/scripts/index.ts +176 -156
  121. package/src/components/DatePicker/types.ts +32 -32
  122. package/src/components/DatePicker/utils.ts +41 -30
  123. package/src/components/Dropdown/Dropdown.stories.tsx +85 -55
  124. package/src/components/Dropdown/Dropdown.tsx +97 -88
  125. package/src/components/Dropdown/index.ts +5 -10
  126. package/src/components/Dropdown/scripts/bundle.ts +10 -10
  127. package/src/components/Dropdown/scripts/componentInteractions.ts +10 -2
  128. package/src/components/Dropdown/scripts/index.ts +122 -117
  129. package/src/components/EdgePanel/EdgePanel.stories.tsx +142 -58
  130. package/src/components/EdgePanel/EdgePanel.tsx +7 -13
  131. package/src/components/EdgePanel/index.ts +1 -1
  132. package/src/components/EdgePanel/scripts/bundle.ts +5 -5
  133. package/src/components/EdgePanel/scripts/edgePanelInteractions.ts +26 -26
  134. package/src/components/EdgePanel/scripts/index.ts +53 -53
  135. package/src/components/Form/Checkbox.stories.tsx +2 -2
  136. package/src/components/Form/Checkbox.tsx +13 -7
  137. package/src/components/Form/Form.stories.tsx +144 -218
  138. package/src/components/Form/Form.tsx +6 -6
  139. package/src/components/Form/FormGroup.stories.tsx +21 -38
  140. package/src/components/Form/FormGroup.tsx +18 -20
  141. package/src/components/Form/Input.stories.tsx +1 -1
  142. package/src/components/Form/Input.tsx +18 -8
  143. package/src/components/Form/Radio.stories.tsx +12 -25
  144. package/src/components/Form/Radio.tsx +11 -6
  145. package/src/components/Form/Select.stories.tsx +6 -6
  146. package/src/components/Form/Select.tsx +31 -33
  147. package/src/components/Form/Textarea.stories.tsx +7 -2
  148. package/src/components/Form/Textarea.tsx +17 -8
  149. package/src/components/Form/index.ts +1 -1
  150. package/src/components/Hero/Hero.stories.tsx +44 -42
  151. package/src/components/Hero/Hero.tsx +28 -38
  152. package/src/components/Hero/index.ts +1 -1
  153. package/src/components/Hero/scripts/bundle.ts +6 -6
  154. package/src/components/Hero/scripts/heroInteractions.ts +24 -29
  155. package/src/components/Hero/scripts/index.ts +16 -17
  156. package/src/components/Icon/Icon.tsx +16 -18
  157. package/src/components/Icon/index.ts +1 -1
  158. package/src/components/List/List.stories.tsx +1 -3
  159. package/src/components/List/List.tsx +6 -10
  160. package/src/components/List/ListGroup.tsx +1 -1
  161. package/src/components/List/index.ts +1 -1
  162. package/src/components/Messages/Messages.stories.tsx +30 -29
  163. package/src/components/Messages/Messages.tsx +60 -55
  164. package/src/components/Messages/index.ts +1 -1
  165. package/src/components/Messages/scripts/bundle.ts +1 -6
  166. package/src/components/Messages/scripts/componentInteractions.ts +32 -37
  167. package/src/components/Messages/scripts/index.ts +61 -55
  168. package/src/components/Modal/Modal.stories.tsx +77 -53
  169. package/src/components/Modal/Modal.tsx +63 -62
  170. package/src/components/Modal/index.ts +1 -1
  171. package/src/components/Modal/scripts/bundle.ts +3 -3
  172. package/src/components/Modal/scripts/index.ts +96 -84
  173. package/src/components/Modal/scripts/modalInteractions.ts +16 -14
  174. package/src/components/{Navbar → Navigation/Menu}/MegaMenu.tsx +50 -59
  175. package/src/components/Navigation/Menu/Menu.stories.tsx +340 -0
  176. package/src/components/Navigation/Menu/Menu.tsx +110 -0
  177. package/src/components/Navigation/Nav/Nav.stories.tsx +458 -0
  178. package/src/components/Navigation/Nav/Nav.tsx +50 -0
  179. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  180. package/src/components/Navigation/Nav/NavItem.tsx +159 -0
  181. package/src/components/{Navbar → Navigation/Navbar}/Navbar.stories.tsx +198 -104
  182. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  183. package/src/components/Navigation/README.md +314 -0
  184. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  185. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +618 -0
  186. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  187. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +95 -0
  188. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  189. package/src/components/Navigation/index.ts +23 -0
  190. package/src/components/Navigation/scripts/NavbarInteractions.ts +171 -0
  191. package/src/components/Navigation/scripts/SideMenu.ts +319 -0
  192. package/src/components/Navigation/scripts/SideMenuBundle.ts +69 -0
  193. package/src/components/Navigation/scripts/SideMenuInteractions.ts +250 -0
  194. package/src/components/Navigation/scripts/bundle.ts +58 -0
  195. package/src/components/Navigation/scripts/index.ts +248 -0
  196. package/src/components/Pagination/Pagination.stories.tsx +34 -33
  197. package/src/components/Pagination/Pagination.tsx +25 -35
  198. package/src/components/Pagination/index.ts +1 -1
  199. package/src/components/Pagination/scripts/index.ts +42 -37
  200. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +48 -48
  201. package/src/components/PhotoViewer/PhotoViewer.tsx +29 -46
  202. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +20 -26
  203. package/src/components/PhotoViewer/PhotoViewerImage.tsx +19 -17
  204. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +13 -5
  205. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +5 -5
  206. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +31 -30
  207. package/src/components/PhotoViewer/examples/ImageGallery.tsx +27 -37
  208. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +19 -13
  209. package/src/components/PhotoViewer/examples/index.ts +1 -1
  210. package/src/components/PhotoViewer/index.ts +1 -1
  211. package/src/components/PhotoViewer/scripts/PhotoViewerInteractions.ts +43 -33
  212. package/src/components/PhotoViewer/scripts/bundle.ts +14 -14
  213. package/src/components/PhotoViewer/scripts/index.ts +173 -129
  214. package/src/components/Popover/Popover.stories.tsx +11 -12
  215. package/src/components/Popover/Popover.tsx +36 -36
  216. package/src/components/Popover/index.ts +1 -1
  217. package/src/components/Popover/scripts/bundle.ts +1 -1
  218. package/src/components/Popover/scripts/componentInteractions.ts +34 -46
  219. package/src/components/Popover/scripts/index.ts +64 -53
  220. package/src/components/ProductReview/ProductReview.stories.tsx +10 -8
  221. package/src/components/ProductReview/ProductReview.tsx +28 -32
  222. package/src/components/ProductReview/scripts/componentInteractions.ts +20 -20
  223. package/src/components/Progress/Progress.tsx +36 -34
  224. package/src/components/Progress/scripts/bundle.ts +7 -2
  225. package/src/components/Progress/scripts/componentInteractions.ts +29 -23
  226. package/src/components/Progress/scripts/index.ts +45 -39
  227. package/src/components/Rating/Rating.stories.tsx +3 -16
  228. package/src/components/Rating/Rating.tsx +250 -231
  229. package/src/components/Rating/scripts/bundle.ts +11 -6
  230. package/src/components/Rating/scripts/index.ts +85 -80
  231. package/src/components/Rating/scripts/ratingInteractions.ts +27 -24
  232. package/src/components/River/River.stories.tsx +70 -24
  233. package/src/components/River/River.tsx +28 -38
  234. package/src/components/River/index.ts +1 -1
  235. package/src/components/River/scripts/index.ts +11 -12
  236. package/src/components/SectionIntro/SectionIntro.stories.tsx +12 -9
  237. package/src/components/SectionIntro/SectionIntro.tsx +25 -31
  238. package/src/components/SectionIntro/scripts/componentInteractions.ts +1 -1
  239. package/src/components/SectionIntro/scripts/index.ts +30 -16
  240. package/src/components/Spinner/Spinner.stories.tsx +5 -7
  241. package/src/components/Spinner/Spinner.tsx +11 -6
  242. package/src/components/Spinner/index.ts +2 -2
  243. package/src/components/Steps/Steps.stories.tsx +44 -48
  244. package/src/components/Steps/Steps.tsx +20 -20
  245. package/src/components/Steps/index.ts +1 -1
  246. package/src/components/Steps/scripts/index.ts +9 -9
  247. package/src/components/Tab/Tab.stories.tsx +14 -6
  248. package/src/components/Tab/Tab.tsx +16 -18
  249. package/src/components/Tab/index.ts +2 -2
  250. package/src/components/Tab/scripts/index.ts +13 -13
  251. package/src/components/Testimonial/Testimonial.stories.tsx +54 -51
  252. package/src/components/Testimonial/Testimonial.tsx +18 -19
  253. package/src/components/Testimonial/index.ts +1 -1
  254. package/src/components/Testimonial/scripts/index.ts +19 -8
  255. package/src/components/Todo/Todo.stories.tsx +7 -24
  256. package/src/components/Todo/Todo.tsx +35 -46
  257. package/src/components/Todo/index.ts +1 -1
  258. package/src/components/Todo/scripts/bundle.ts +1 -1
  259. package/src/components/Todo/scripts/index.ts +99 -81
  260. package/src/components/Todo/scripts/todoInteractions.ts +12 -12
  261. package/src/components/Todo/scripts/types.ts +3 -3
  262. package/src/components/Toggle/Toggle.stories.tsx +2 -2
  263. package/src/components/Toggle/Toggle.tsx +18 -18
  264. package/src/components/Toggle/index.ts +2 -2
  265. package/src/components/Toggle/scripts/bundle.ts +7 -2
  266. package/src/components/Toggle/scripts/index.ts +14 -10
  267. package/src/components/Toggle/scripts/toggleInteractions.ts +11 -14
  268. package/src/components/Tooltip/Tooltip.stories.tsx +13 -6
  269. package/src/components/Tooltip/Tooltip.tsx +25 -15
  270. package/src/components/Tooltip/index.ts +3 -3
  271. package/src/components/Tooltip/scripts/bundle.ts +0 -1
  272. package/src/components/Tooltip/scripts/index.ts +44 -41
  273. package/src/components/Tooltip/scripts/tooltipInteractions.ts +22 -22
  274. package/src/components/Upload/Upload.stories.tsx +28 -34
  275. package/src/components/Upload/Upload.tsx +86 -71
  276. package/src/components/Upload/index.ts +1 -1
  277. package/src/components/Upload/scripts/index.ts +58 -43
  278. package/src/components/index.ts +5 -6
  279. package/src/design-tokens/BoxShadow/BoxShadow.stories.tsx +13 -10
  280. package/src/design-tokens/Colors/colors.scss +10 -7
  281. package/src/design-tokens/Colors/colors.stories.tsx +46 -59
  282. package/src/design-tokens/Spacing/Spacing.scss +7 -5
  283. package/src/design-tokens/Spacing/Spacing.stories.tsx +19 -18
  284. package/src/design-tokens/Typography/Typography.scss +88 -25
  285. package/src/design-tokens/Typography/Typography.stories.tsx +22 -25
  286. package/src/docs/implementation-guide.mdx +2 -2
  287. package/src/htmlComponentsEntry.ts +23 -23
  288. package/src/index.ts +1 -1
  289. package/src/layouts/Grid/Container.tsx +6 -10
  290. package/src/layouts/Grid/Grid.stories.tsx +72 -34
  291. package/src/layouts/Grid/Grid.tsx +6 -13
  292. package/src/layouts/Grid/GridCol.tsx +29 -26
  293. package/src/layouts/Grid/Row.tsx +6 -13
  294. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +79 -72
  295. package/src/layouts/MasonryGrid/MasonryGrid.tsx +23 -25
  296. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +4 -12
  297. package/src/layouts/index.ts +3 -4
  298. package/src/lib/composables/index.ts +3 -3
  299. package/src/lib/composables/useAccordion.ts +15 -6
  300. package/src/lib/composables/useBadge.ts +3 -3
  301. package/src/lib/composables/useBreadcrumb.ts +6 -12
  302. package/src/lib/composables/useButton.ts +3 -3
  303. package/src/lib/composables/useCallout.ts +3 -3
  304. package/src/lib/composables/useCard.ts +50 -28
  305. package/src/lib/composables/useCheckbox.ts +7 -7
  306. package/src/lib/composables/useDataTable.ts +61 -57
  307. package/src/lib/composables/useDatePicker.ts +255 -231
  308. package/src/lib/composables/useDropdown.ts +90 -75
  309. package/src/lib/composables/useEdgePanel.ts +50 -47
  310. package/src/lib/composables/useForm.ts +4 -7
  311. package/src/lib/composables/useFormGroup.ts +11 -12
  312. package/src/lib/composables/useHero.ts +36 -38
  313. package/src/lib/composables/useInput.ts +9 -10
  314. package/src/lib/composables/useMessages.ts +12 -14
  315. package/src/lib/composables/useModal.ts +37 -34
  316. package/src/lib/composables/useNavbar.ts +33 -22
  317. package/src/lib/composables/usePagination.ts +3 -10
  318. package/src/lib/composables/usePhotoViewer.ts +625 -578
  319. package/src/lib/composables/usePopover.ts +68 -62
  320. package/src/lib/composables/useProgress.ts +9 -12
  321. package/src/lib/composables/useRadio.ts +4 -4
  322. package/src/lib/composables/useRating.ts +82 -70
  323. package/src/lib/composables/useRiver.ts +28 -31
  324. package/src/lib/composables/useSelect.ts +7 -8
  325. package/src/lib/composables/useSideMenu.ts +197 -0
  326. package/src/lib/composables/useSpinner.ts +3 -3
  327. package/src/lib/composables/useTextarea.ts +8 -9
  328. package/src/lib/composables/useTodo.ts +14 -18
  329. package/src/lib/constants/components.ts +191 -118
  330. package/src/lib/constants/index.ts +1 -1
  331. package/src/lib/types/components.ts +454 -324
  332. package/src/lib/utils/dom.ts +2 -6
  333. package/src/lib/utils/icons.ts +20 -12
  334. package/src/lib/utils/index.ts +2 -2
  335. package/src/lib/utils/useForkRef.ts +1 -2
  336. package/src/styles/01-settings/_index.scss +59 -59
  337. package/src/styles/01-settings/_settings.accordion.scss +21 -21
  338. package/src/styles/01-settings/_settings.animations.scss +2 -2
  339. package/src/styles/01-settings/_settings.avatar-group.scss +14 -14
  340. package/src/styles/01-settings/_settings.avatar.scss +31 -31
  341. package/src/styles/01-settings/_settings.badge.scss +11 -11
  342. package/src/styles/01-settings/_settings.border-radius.scss +10 -9
  343. package/src/styles/01-settings/_settings.border.scss +7 -7
  344. package/src/styles/01-settings/_settings.box-shadow.scss +24 -12
  345. package/src/styles/01-settings/_settings.breadcrumb.scss +18 -18
  346. package/src/styles/01-settings/_settings.btn-group.scss +1 -1
  347. package/src/styles/01-settings/_settings.button.scss +63 -49
  348. package/src/styles/01-settings/_settings.callout.scss +27 -7
  349. package/src/styles/01-settings/_settings.card.scss +27 -30
  350. package/src/styles/01-settings/_settings.checkbox-group.scss +2 -3
  351. package/src/styles/01-settings/_settings.checkbox.scss +17 -18
  352. package/src/styles/01-settings/_settings.color-mode.scss +1 -1
  353. package/src/styles/01-settings/_settings.colors.scss +197 -214
  354. package/src/styles/01-settings/_settings.config.scss +1 -3
  355. package/src/styles/01-settings/_settings.countdown.scss +14 -14
  356. package/src/styles/01-settings/_settings.data-table.scss +6 -6
  357. package/src/styles/01-settings/_settings.datepicker.scss +40 -42
  358. package/src/styles/01-settings/_settings.dropdown.scss +30 -30
  359. package/src/styles/01-settings/_settings.edge-panel.scss +16 -16
  360. package/src/styles/01-settings/_settings.fonts.scss +14 -12
  361. package/src/styles/01-settings/_settings.form-group.scss +10 -10
  362. package/src/styles/01-settings/_settings.form.scss +3 -3
  363. package/src/styles/01-settings/_settings.grid.scss +1 -1
  364. package/src/styles/01-settings/_settings.hero.scss +23 -23
  365. package/src/styles/01-settings/_settings.input.scss +32 -32
  366. package/src/styles/01-settings/_settings.link.scss +6 -6
  367. package/src/styles/01-settings/_settings.list-group.scss +12 -12
  368. package/src/styles/01-settings/_settings.list.scss +2 -2
  369. package/src/styles/01-settings/_settings.maps.scss +183 -188
  370. package/src/styles/01-settings/_settings.masonry-grid.scss +2 -2
  371. package/src/styles/01-settings/_settings.menu.scss +35 -38
  372. package/src/styles/01-settings/_settings.messages.scss +71 -77
  373. package/src/styles/01-settings/_settings.modal.scss +24 -24
  374. package/src/styles/01-settings/_settings.nav.scss +15 -15
  375. package/src/styles/01-settings/_settings.navbar.scss +39 -12
  376. package/src/styles/01-settings/_settings.pagination.scss +21 -21
  377. package/src/styles/01-settings/_settings.photoviewer.scss +1 -1
  378. package/src/styles/01-settings/_settings.popover.scss +3 -3
  379. package/src/styles/01-settings/_settings.position.scss +2 -2
  380. package/src/styles/01-settings/_settings.progress.scss +15 -18
  381. package/src/styles/01-settings/_settings.rating.scss +7 -7
  382. package/src/styles/01-settings/_settings.river.scss +25 -25
  383. package/src/styles/01-settings/_settings.sectionintro.scss +15 -16
  384. package/src/styles/01-settings/_settings.select.scss +31 -31
  385. package/src/styles/01-settings/_settings.side-menu.scss +64 -16
  386. package/src/styles/01-settings/_settings.skeleton.scss +12 -12
  387. package/src/styles/01-settings/_settings.spacing.scss +62 -33
  388. package/src/styles/01-settings/_settings.spinner.scss +10 -10
  389. package/src/styles/01-settings/_settings.steps.scss +22 -22
  390. package/src/styles/01-settings/_settings.tabs.scss +25 -25
  391. package/src/styles/01-settings/_settings.testimonials.scss +17 -19
  392. package/src/styles/01-settings/_settings.todo.scss +1 -1
  393. package/src/styles/01-settings/_settings.toggle.scss +26 -26
  394. package/src/styles/01-settings/_settings.tooltip.scss +15 -15
  395. package/src/styles/01-settings/_settings.typography.scss +65 -48
  396. package/src/styles/01-settings/_settings.upload.scss +70 -77
  397. package/src/styles/01-settings/_settings.z-layers.scss +1 -1
  398. package/src/styles/02-tools/_index.scss +19 -19
  399. package/src/styles/02-tools/_tools.animations.scss +4 -4
  400. package/src/styles/02-tools/_tools.border-radius.scss +4 -5
  401. package/src/styles/02-tools/_tools.breakpoints.scss +33 -34
  402. package/src/styles/02-tools/_tools.button.scss +49 -25
  403. package/src/styles/02-tools/_tools.color-mode.scss +11 -11
  404. package/src/styles/02-tools/_tools.event.scss +1 -1
  405. package/src/styles/02-tools/_tools.hidden-visually.scss +1 -1
  406. package/src/styles/02-tools/_tools.hidden.scss +1 -1
  407. package/src/styles/02-tools/_tools.map-loop.scss +9 -9
  408. package/src/styles/02-tools/_tools.media-queries.scss +5 -3
  409. package/src/styles/02-tools/_tools.object-fit.scss +3 -3
  410. package/src/styles/02-tools/_tools.placeholder.scss +0 -1
  411. package/src/styles/02-tools/_tools.rem.scss +1 -1
  412. package/src/styles/02-tools/_tools.spacing.scss +8 -34
  413. package/src/styles/02-tools/_tools.to-rgb.scss +3 -3
  414. package/src/styles/02-tools/_tools.transition.scss +1 -1
  415. package/src/styles/02-tools/_tools.utility-api.scss +29 -14
  416. package/src/styles/03-generic/_generic.fonts.scss +0 -1
  417. package/src/styles/03-generic/_generic.reset.scss +13 -8
  418. package/src/styles/03-generic/_generic.root.scss +5 -5
  419. package/src/styles/03-generic/_index.scss +4 -4
  420. package/src/styles/04-elements/_elements.all.scss +2 -2
  421. package/src/styles/04-elements/_elements.body.scss +1 -2
  422. package/src/styles/04-elements/_elements.heading.scss +37 -21
  423. package/src/styles/04-elements/_elements.links.scss +0 -1
  424. package/src/styles/04-elements/_index.scss +5 -5
  425. package/src/styles/05-objects/_index.scss +3 -3
  426. package/src/styles/05-objects/_objects.container.scss +5 -4
  427. package/src/styles/05-objects/_objects.grid.scss +12 -12
  428. package/src/styles/05-objects/_objects.masonry-grid.scss +80 -74
  429. package/src/styles/06-components/_components.accordion.scss +12 -6
  430. package/src/styles/06-components/_components.avatar-group.scss +9 -8
  431. package/src/styles/06-components/_components.avatar.scss +78 -77
  432. package/src/styles/06-components/_components.badge.scss +48 -48
  433. package/src/styles/06-components/_components.breadcrumb.scss +57 -58
  434. package/src/styles/06-components/_components.btn-group.scss +22 -22
  435. package/src/styles/06-components/_components.button.scss +118 -110
  436. package/src/styles/06-components/_components.callout.scss +21 -15
  437. package/src/styles/06-components/_components.card.scss +6 -10
  438. package/src/styles/06-components/_components.checkbox-group.scss +9 -10
  439. package/src/styles/06-components/_components.checkbox.scss +10 -17
  440. package/src/styles/06-components/_components.color-mode-toggle.scss +6 -6
  441. package/src/styles/06-components/_components.countdown.scss +53 -54
  442. package/src/styles/06-components/_components.data-table.scss +40 -36
  443. package/src/styles/06-components/_components.datepicker.scss +95 -73
  444. package/src/styles/06-components/_components.dropdown.scss +15 -9
  445. package/src/styles/06-components/_components.edge-panel.scss +87 -46
  446. package/src/styles/06-components/_components.form-group.scss +5 -4
  447. package/src/styles/06-components/_components.hero.scss +128 -132
  448. package/src/styles/06-components/_components.icon.scss +16 -16
  449. package/src/styles/06-components/_components.image-gallery.scss +9 -7
  450. package/src/styles/06-components/_components.input.scss +18 -16
  451. package/src/styles/06-components/_components.list-group.scss +52 -51
  452. package/src/styles/06-components/_components.list.scss +15 -15
  453. package/src/styles/06-components/_components.menu.scss +225 -220
  454. package/src/styles/06-components/_components.messages.scss +45 -32
  455. package/src/styles/06-components/_components.modal.scss +0 -1
  456. package/src/styles/06-components/_components.nav.scss +56 -11
  457. package/src/styles/06-components/_components.navbar.scss +278 -202
  458. package/src/styles/06-components/_components.pagination.scss +7 -6
  459. package/src/styles/06-components/_components.photoviewer.scss +121 -116
  460. package/src/styles/06-components/_components.popover.scss +10 -10
  461. package/src/styles/06-components/_components.product-review.scss +3 -3
  462. package/src/styles/06-components/_components.progress.scss +32 -35
  463. package/src/styles/06-components/_components.rating.scss +9 -8
  464. package/src/styles/06-components/_components.river.scss +4 -2
  465. package/src/styles/06-components/_components.sectionintro.scss +19 -26
  466. package/src/styles/06-components/_components.select.scss +7 -8
  467. package/src/styles/06-components/_components.side-menu.scss +154 -28
  468. package/src/styles/06-components/_components.skeleton.scss +0 -1
  469. package/src/styles/06-components/_components.spinner.scss +2 -4
  470. package/src/styles/06-components/_components.steps.scss +76 -77
  471. package/src/styles/06-components/_components.tabs.scss +17 -12
  472. package/src/styles/06-components/_components.testimonials.scss +49 -52
  473. package/src/styles/06-components/_components.todo.scss +26 -26
  474. package/src/styles/06-components/_components.tooltip.scss +114 -115
  475. package/src/styles/06-components/_components.upload.scss +8 -18
  476. package/src/styles/06-components/_index.scss +48 -48
  477. package/src/styles/99-utilities/_index.scss +18 -18
  478. package/src/styles/99-utilities/_utilities.background.scss +13 -13
  479. package/src/styles/99-utilities/_utilities.border.scss +30 -30
  480. package/src/styles/99-utilities/_utilities.clearfix.scss +1 -1
  481. package/src/styles/99-utilities/_utilities.display.scss +5 -4
  482. package/src/styles/99-utilities/_utilities.flex.scss +19 -19
  483. package/src/styles/99-utilities/_utilities.link.scss +52 -35
  484. package/src/styles/99-utilities/_utilities.object-fit.scss +3 -3
  485. package/src/styles/99-utilities/_utilities.opacity.scss +6 -6
  486. package/src/styles/99-utilities/_utilities.overflow.scss +4 -4
  487. package/src/styles/99-utilities/_utilities.position.scss +8 -8
  488. package/src/styles/99-utilities/_utilities.shadow.scss +13 -13
  489. package/src/styles/99-utilities/_utilities.sizes.scss +17 -17
  490. package/src/styles/99-utilities/_utilities.spacing.scss +72 -37
  491. package/src/styles/99-utilities/_utilities.text.scss +15 -15
  492. package/src/styles/99-utilities/_utilities.visibility.scss +8 -8
  493. package/src/styles/99-utilities/_utilities.visually-hidden.scss +1 -1
  494. package/src/styles/99-utilities/_utilities.z-index.scss +2 -2
  495. package/tsconfig.json +74 -0
  496. package/webpack.config.js +463 -0
  497. package/NPM_PUBLISHING.md +0 -221
  498. package/dist/css/atomix.css.map +0 -1
  499. package/dist/js/194.js.map +0 -1
  500. package/dist/js/atomix.react.esm.js.map +0 -1
  501. package/dist/js/atomix.react.umd.js.map +0 -1
  502. package/dist/js/chunks/esm/202.ff48d27672233280e021.js.map +0 -1
  503. package/dist/js/chunks/esm/308.f873332126eba90e5c62.js.map +0 -1
  504. package/dist/js/chunks/esm/54.4db919e5e4e5cc6d7c72.js.map +0 -1
  505. package/dist/js/chunks/esm/619.afc5a718eff77fa423b5.js.map +0 -1
  506. package/dist/js/chunks/esm/690.a9e968c7497d61e56cdc.js.map +0 -1
  507. package/dist/js/chunks/esm/894.f1091a4a8758c26d29e4.js.map +0 -1
  508. package/dist/js/chunks/esm/897.561a50f7d043d42169da.js.map +0 -1
  509. package/dist/js/chunks/umd/202.dac7605cc555b6bda542.js.map +0 -1
  510. package/dist/js/chunks/umd/308.6709979849dcbdb90c9b.js.map +0 -1
  511. package/dist/js/chunks/umd/54.403470e1f7d0ef4424a7.js.map +0 -1
  512. package/dist/js/chunks/umd/619.fa05ea98c10270eb64c5.js.map +0 -1
  513. package/dist/js/chunks/umd/690.aa7054d1c53e5402c2d6.js.map +0 -1
  514. package/dist/js/chunks/umd/894.3e1eaf0a2aadf4434390.js.map +0 -1
  515. package/dist/js/chunks/umd/897.554ea37be4453698c167.js.map +0 -1
  516. package/dist/types/components/Navbar/Nav.d.ts +0 -5
  517. package/dist/types/components/Navbar/NavItem.d.ts +0 -5
  518. package/dist/types/components/Navbar/Navbar.d.ts +0 -5
  519. package/dist/types/components/Navbar/index.d.ts +0 -6
  520. package/src/components/Navbar/Menu.tsx +0 -122
  521. package/src/components/Navbar/Nav.tsx +0 -35
  522. package/src/components/Navbar/NavDropdown.tsx +0 -108
  523. package/src/components/Navbar/NavItem.tsx +0 -128
  524. package/src/components/Navbar/Navbar.tsx +0 -124
  525. package/src/components/Navbar/index.ts +0 -6
@@ -17,97 +17,89 @@ export const Todo: React.FC<TodoProps> = ({
17
17
  className = '',
18
18
  disabled = false,
19
19
  }) => {
20
- const {
21
- inputText,
22
- setInputText,
23
- addTodo,
24
- generateTodoClasses,
25
- generateItemClasses,
26
- } = useTodo({ items, title, size, placeholder, showCompleted, disabled });
20
+ const { inputText, setInputText, addTodo, generateTodoClasses, generateItemClasses } = useTodo({
21
+ items,
22
+ title,
23
+ size,
24
+ placeholder,
25
+ showCompleted,
26
+ disabled,
27
+ });
27
28
 
28
29
  // State to manage local items
29
30
  const [localItems, setLocalItems] = useState(items);
30
-
31
+
31
32
  // Update local items when props change
32
33
  useEffect(() => {
33
34
  setLocalItems(items);
34
35
  }, [items]);
35
-
36
+
36
37
  // Handle item toggle
37
38
  const handleToggle = (id: string) => {
38
39
  if (disabled) return;
39
-
40
- setLocalItems(prevItems =>
41
- prevItems.map(item =>
42
- item.id === id
43
- ? { ...item, completed: !item.completed }
44
- : item
45
- )
40
+
41
+ setLocalItems(prevItems =>
42
+ prevItems.map(item => (item.id === id ? { ...item, completed: !item.completed } : item))
46
43
  );
47
-
44
+
48
45
  if (onToggleTodo) {
49
46
  onToggleTodo(id);
50
47
  }
51
48
  };
52
-
49
+
53
50
  // Handle item delete
54
51
  const handleDelete = (id: string) => {
55
52
  if (disabled) return;
56
-
53
+
57
54
  setLocalItems(prevItems => prevItems.filter(item => item.id !== id));
58
-
55
+
59
56
  if (onDeleteTodo) {
60
57
  onDeleteTodo(id);
61
58
  }
62
59
  };
63
-
60
+
64
61
  // Handle form submission
65
62
  const handleFormSubmit = (e: React.FormEvent) => {
66
63
  e.preventDefault();
67
64
  if (disabled || !inputText.trim()) return;
68
-
65
+
69
66
  // Create a new todo item with a unique ID
70
67
  const newTodo = {
71
68
  id: uuidv4(),
72
69
  text: inputText.trim(),
73
- completed: false
70
+ completed: false,
74
71
  };
75
-
72
+
76
73
  // Update local state
77
74
  setLocalItems(prevItems => [...prevItems, newTodo]);
78
-
75
+
79
76
  // Call parent callback if provided
80
77
  if (onAddTodo) {
81
78
  onAddTodo(inputText);
82
79
  }
83
-
80
+
84
81
  // Clear the input field
85
82
  setInputText('');
86
83
  };
87
-
84
+
88
85
  // Filter items based on showCompleted prop
89
- const filteredItems = showCompleted
90
- ? localItems
91
- : localItems.filter(item => !item.completed);
92
-
86
+ const filteredItems = showCompleted ? localItems : localItems.filter(item => !item.completed);
87
+
93
88
  // Generate component classes
94
89
  const todoClass = generateTodoClasses({ size, className, disabled });
95
-
90
+
96
91
  return (
97
92
  <div className={todoClass}>
98
93
  {title && <h2 className="c-todo__title">{title}</h2>}
99
-
100
- <form
101
- className="c-todo__form"
102
- onSubmit={handleFormSubmit}
103
- >
94
+
95
+ <form className="c-todo__form" onSubmit={handleFormSubmit}>
104
96
  <div className="c-todo__form-group">
105
97
  <input
106
98
  type="text"
107
99
  className="c-todo__input c-input"
108
100
  placeholder={placeholder}
109
101
  value={inputText}
110
- onChange={(e) => setInputText(e.target.value)}
102
+ onChange={e => setInputText(e.target.value)}
111
103
  disabled={disabled}
112
104
  aria-label="Add a new todo"
113
105
  />
@@ -121,16 +113,13 @@ export const Todo: React.FC<TodoProps> = ({
121
113
  </button>
122
114
  </div>
123
115
  </form>
124
-
116
+
125
117
  <ul className="c-todo__list">
126
118
  {filteredItems.length === 0 ? (
127
119
  <li className="c-todo__empty">No items to display</li>
128
120
  ) : (
129
121
  filteredItems.map(item => (
130
- <li
131
- key={item.id}
132
- className={generateItemClasses(item)}
133
- >
122
+ <li key={item.id} className={generateItemClasses(item)}>
134
123
  <div className="c-todo__item-content">
135
124
  <label className="c-todo__checkbox-label">
136
125
  <input
@@ -143,7 +132,7 @@ export const Todo: React.FC<TodoProps> = ({
143
132
  />
144
133
  <span className="c-todo__item-text">{item.text}</span>
145
134
  </label>
146
-
135
+
147
136
  <button
148
137
  type="button"
149
138
  className="c-todo__delete-btn c-btn c-btn--error c-btn--sm"
@@ -164,6 +153,6 @@ export const Todo: React.FC<TodoProps> = ({
164
153
 
165
154
  Todo.displayName = 'Todo';
166
155
 
167
- export type { TodoProps };
156
+ export type { TodoProps };
168
157
 
169
- export default Todo;
158
+ export default Todo;
@@ -1 +1 @@
1
- export {default} from './Todo';
1
+ export { default } from './Todo';
@@ -11,4 +11,4 @@ window.Atomix.initializeAllTodos = initializeAllTodos;
11
11
  window.Atomix.filterTodoItems = filterTodoItems;
12
12
  window.Atomix.sortTodoItems = sortTodoItems;
13
13
 
14
- export default Todo;
14
+ export default Todo;
@@ -26,7 +26,7 @@ export interface TodoOptions {
26
26
  export enum TodoEvents {
27
27
  ADD = 'todo:add',
28
28
  TOGGLE = 'todo:toggle',
29
- DELETE = 'todo:delete'
29
+ DELETE = 'todo:delete',
30
30
  }
31
31
 
32
32
  /**
@@ -40,7 +40,7 @@ export class Todo {
40
40
  placeholder: 'Add a new todo',
41
41
  size: 'md',
42
42
  showCompleted: true,
43
- disabled: false
43
+ disabled: false,
44
44
  };
45
45
 
46
46
  // DOM elements
@@ -60,9 +60,8 @@ export class Todo {
60
60
  */
61
61
  constructor(element: string | HTMLElement, options: TodoOptions = {}) {
62
62
  // Get element reference
63
- this.element = typeof element === 'string'
64
- ? document.querySelector(element) as HTMLElement
65
- : element;
63
+ this.element =
64
+ typeof element === 'string' ? (document.querySelector(element) as HTMLElement) : element;
66
65
 
67
66
  if (!this.element) {
68
67
  throw new Error('Todo: Element not found');
@@ -153,9 +152,12 @@ export class Todo {
153
152
 
154
153
  // Create the plus icon path
155
154
  const iconPath = document.createElementNS(svgNS, 'path');
156
- iconPath.setAttribute('d', 'M224 128a8 8 0 0 1-8 8h-80v80a8 8 0 0 1-16 0v-80H40a8 8 0 0 1 0-16h80V40a8 8 0 0 1 16 0v80h80a8 8 0 0 1 8 8Z');
155
+ iconPath.setAttribute(
156
+ 'd',
157
+ 'M224 128a8 8 0 0 1-8 8h-80v80a8 8 0 0 1-16 0v-80H40a8 8 0 0 1 0-16h80V40a8 8 0 0 1 16 0v80h80a8 8 0 0 1 8 8Z'
158
+ );
157
159
  iconPath.setAttribute('fill', 'currentColor');
158
-
160
+
159
161
  iconSvg.appendChild(iconPath);
160
162
  addButton.appendChild(iconSvg);
161
163
 
@@ -178,19 +180,23 @@ export class Todo {
178
180
  if (this.formElement) {
179
181
  this.formElement.addEventListener('submit', this._handleSubmit.bind(this));
180
182
  }
181
-
182
- // Apply focus effect to input if available
183
- if (this.inputElement) {
184
- this.inputElement.addEventListener('focus', () => {
185
- const formGroup = this.inputElement ? this.inputElement.closest('.c-todo__form-group') : null;
186
- formGroup?.classList.add('is-focused');
187
- });
188
-
189
- this.inputElement.addEventListener('blur', () => {
190
- const formGroup = this.inputElement ? this.inputElement.closest('.c-todo__form-group') : null;
191
- formGroup?.classList.remove('is-focused');
192
- });
193
- }
183
+
184
+ // Apply focus effect to input if available
185
+ if (this.inputElement) {
186
+ this.inputElement.addEventListener('focus', () => {
187
+ const formGroup = this.inputElement
188
+ ? this.inputElement.closest('.c-todo__form-group')
189
+ : null;
190
+ formGroup?.classList.add('is-focused');
191
+ });
192
+
193
+ this.inputElement.addEventListener('blur', () => {
194
+ const formGroup = this.inputElement
195
+ ? this.inputElement.closest('.c-todo__form-group')
196
+ : null;
197
+ formGroup?.classList.remove('is-focused');
198
+ });
199
+ }
194
200
  }
195
201
 
196
202
  /**
@@ -199,18 +205,18 @@ export class Todo {
199
205
  */
200
206
  private _handleSubmit(event: Event): void {
201
207
  event.preventDefault();
202
-
208
+
203
209
  if (this.options.disabled || !this.inputElement) return;
204
-
210
+
205
211
  const text = this.inputElement.value.trim();
206
212
  if (!text) return;
207
-
213
+
208
214
  // Add new todo
209
215
  const newItem = this.addTodo(text);
210
-
216
+
211
217
  // Clear input
212
218
  this.inputElement.value = '';
213
-
219
+
214
220
  // Call callback if provided
215
221
  if (newItem && this.options.onAddTodo) {
216
222
  this.options.onAddTodo(newItem.text);
@@ -223,23 +229,25 @@ export class Todo {
223
229
  */
224
230
  private _handleToggle(id: string): void {
225
231
  if (this.options.disabled) return;
226
-
232
+
227
233
  const item = this.items.find(item => item.id === id);
228
234
  if (!item) return;
229
-
235
+
230
236
  item.completed = !item.completed;
231
237
  this._renderItems();
232
-
238
+
233
239
  // Call callback if provided
234
240
  if (this.options.onToggleTodo) {
235
241
  this.options.onToggleTodo(id);
236
242
  }
237
-
243
+
238
244
  // Dispatch custom event
239
- this.element.dispatchEvent(new CustomEvent(TodoEvents.TOGGLE, {
240
- bubbles: true,
241
- detail: { id, completed: item.completed }
242
- }));
245
+ this.element.dispatchEvent(
246
+ new CustomEvent(TodoEvents.TOGGLE, {
247
+ bubbles: true,
248
+ detail: { id, completed: item.completed },
249
+ })
250
+ );
243
251
  }
244
252
 
245
253
  /**
@@ -248,20 +256,22 @@ export class Todo {
248
256
  */
249
257
  private _handleDelete(id: string): void {
250
258
  if (this.options.disabled) return;
251
-
259
+
252
260
  const deleted = this.deleteTodo(id);
253
-
261
+
254
262
  if (deleted) {
255
263
  // Call callback if provided
256
264
  if (this.options.onDeleteTodo) {
257
265
  this.options.onDeleteTodo(id);
258
266
  }
259
-
267
+
260
268
  // Dispatch custom event
261
- this.element.dispatchEvent(new CustomEvent(TodoEvents.DELETE, {
262
- bubbles: true,
263
- detail: { id }
264
- }));
269
+ this.element.dispatchEvent(
270
+ new CustomEvent(TodoEvents.DELETE, {
271
+ bubbles: true,
272
+ detail: { id },
273
+ })
274
+ );
265
275
  }
266
276
  }
267
277
 
@@ -271,45 +281,48 @@ export class Todo {
271
281
  */
272
282
  private _renderItems(): void {
273
283
  if (!this.listElement) return;
274
-
284
+
275
285
  // Clear list
276
286
  this.listElement.innerHTML = '';
277
-
287
+
278
288
  // Filter items if needed
279
289
  const itemsToRender = this.options.showCompleted
280
290
  ? this.items
281
291
  : this.items.filter(item => !item.completed);
282
-
292
+
283
293
  // Render each item
284
294
  itemsToRender.forEach(item => {
285
295
  const listItem = document.createElement('li');
286
296
  listItem.className = 'c-todo__item';
287
297
  listItem.dataset.id = item.id;
288
-
298
+
289
299
  if (item.completed) {
290
300
  listItem.classList.add('c-todo__item--completed');
291
301
  }
292
-
302
+
293
303
  // Checkbox
294
304
  const checkbox = document.createElement('input');
295
305
  checkbox.type = 'checkbox';
296
306
  checkbox.className = 'c-todo__checkbox';
297
307
  checkbox.checked = item.completed;
298
308
  checkbox.disabled = this.options.disabled || false;
299
- checkbox.setAttribute('aria-label', `Mark "${item.text}" as ${item.completed ? 'incomplete' : 'complete'}`);
300
-
309
+ checkbox.setAttribute(
310
+ 'aria-label',
311
+ `Mark "${item.text}" as ${item.completed ? 'incomplete' : 'complete'}`
312
+ );
313
+
301
314
  // Label
302
315
  const label = document.createElement('span');
303
316
  label.className = 'c-todo__text';
304
317
  label.textContent = item.text;
305
-
318
+
306
319
  // Delete button
307
320
  const deleteButton = document.createElement('button');
308
321
  deleteButton.type = 'button';
309
322
  deleteButton.className = 'c-todo__delete-btn';
310
323
  deleteButton.disabled = this.options.disabled || false;
311
324
  deleteButton.setAttribute('aria-label', `Delete "${item.text}"`);
312
-
325
+
313
326
  // Trash icon (SVG)
314
327
  const svgNS = 'http://www.w3.org/2000/svg';
315
328
  const iconSvg = document.createElementNS(svgNS, 'svg');
@@ -318,28 +331,31 @@ export class Todo {
318
331
  iconSvg.setAttribute('viewBox', '0 0 256 256');
319
332
  iconSvg.setAttribute('fill', 'none');
320
333
  iconSvg.setAttribute('xmlns', svgNS);
321
-
334
+
322
335
  // Create the trash icon path
323
336
  const iconPath = document.createElementNS(svgNS, 'path');
324
- iconPath.setAttribute('d', 'M216 48h-40v-8a24 24 0 0 0-24-24h-48a24 24 0 0 0-24 24v8H40a8 8 0 0 0 0 16h8v144a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16V64h8a8 8 0 0 0 0-16ZM96 40a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v8H96Zm96 168H64V64h128Zm-80-104v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Zm48 0v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Z');
337
+ iconPath.setAttribute(
338
+ 'd',
339
+ 'M216 48h-40v-8a24 24 0 0 0-24-24h-48a24 24 0 0 0-24 24v8H40a8 8 0 0 0 0 16h8v144a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16V64h8a8 8 0 0 0 0-16ZM96 40a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v8H96Zm96 168H64V64h128Zm-80-104v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Zm48 0v64a8 8 0 0 1-16 0v-64a8 8 0 0 1 16 0Z'
340
+ );
325
341
  iconPath.setAttribute('fill', 'currentColor');
326
-
342
+
327
343
  iconSvg.appendChild(iconPath);
328
344
  deleteButton.appendChild(iconSvg);
329
-
345
+
330
346
  // Add elements to list item
331
347
  listItem.appendChild(checkbox);
332
348
  listItem.appendChild(label);
333
349
  listItem.appendChild(deleteButton);
334
-
350
+
335
351
  // Add list item to list
336
352
  if (this.listElement) {
337
353
  this.listElement.appendChild(listItem);
338
354
  }
339
-
355
+
340
356
  // Add event listeners
341
357
  checkbox.addEventListener('change', () => this._handleToggle(item.id));
342
- deleteButton.addEventListener('click', (e) => {
358
+ deleteButton.addEventListener('click', e => {
343
359
  e.preventDefault();
344
360
  this._handleDelete(item.id);
345
361
  });
@@ -353,22 +369,24 @@ export class Todo {
353
369
  */
354
370
  public addTodo(text: string): TodoItem | null {
355
371
  if (!text.trim() || this.options.disabled) return null;
356
-
372
+
357
373
  const newItem: TodoItem = {
358
374
  id: uuidv4(),
359
375
  text: text.trim(),
360
- completed: false
376
+ completed: false,
361
377
  };
362
-
378
+
363
379
  this.items.push(newItem);
364
380
  this._renderItems();
365
-
381
+
366
382
  // Dispatch custom event
367
- this.element.dispatchEvent(new CustomEvent(TodoEvents.ADD, {
368
- bubbles: true,
369
- detail: { item: newItem }
370
- }));
371
-
383
+ this.element.dispatchEvent(
384
+ new CustomEvent(TodoEvents.ADD, {
385
+ bubbles: true,
386
+ detail: { item: newItem },
387
+ })
388
+ );
389
+
372
390
  return newItem;
373
391
  }
374
392
 
@@ -380,10 +398,10 @@ export class Todo {
380
398
  public toggleTodo(id: string): TodoItem | null {
381
399
  const item = this.items.find(item => item.id === id);
382
400
  if (!item || this.options.disabled) return null;
383
-
401
+
384
402
  item.completed = !item.completed;
385
403
  this._renderItems();
386
-
404
+
387
405
  return item;
388
406
  }
389
407
 
@@ -395,12 +413,12 @@ export class Todo {
395
413
  public deleteTodo(id: string): boolean {
396
414
  const initialLength = this.items.length;
397
415
  this.items = this.items.filter(item => item.id !== id);
398
-
416
+
399
417
  if (this.items.length !== initialLength) {
400
418
  this._renderItems();
401
419
  return true;
402
420
  }
403
-
421
+
404
422
  return false;
405
423
  }
406
424
 
@@ -419,7 +437,7 @@ export class Todo {
419
437
  */
420
438
  public update(options: Partial<TodoOptions>): void {
421
439
  this.options = { ...this.options, ...options };
422
-
440
+
423
441
  // Update disabled state
424
442
  if (options.disabled !== undefined) {
425
443
  if (options.disabled) {
@@ -427,34 +445,34 @@ export class Todo {
427
445
  } else {
428
446
  this.element.classList.remove('c-todo--disabled');
429
447
  }
430
-
448
+
431
449
  if (this.inputElement) {
432
450
  this.inputElement.disabled = options.disabled;
433
451
  }
434
-
452
+
435
453
  const addButton = this.formElement?.querySelector('.c-todo__add-btn') as HTMLButtonElement;
436
454
  if (addButton) {
437
455
  addButton.disabled = options.disabled;
438
456
  }
439
457
  }
440
-
458
+
441
459
  // Update size
442
460
  if (options.size) {
443
461
  // Remove existing size classes
444
462
  ['sm', 'md', 'lg'].forEach(size => {
445
463
  this.element.classList.remove(`c-todo--${size}`);
446
464
  });
447
-
465
+
448
466
  // Add new size class if not default
449
467
  if (options.size !== 'md') {
450
468
  this.element.classList.add(`c-todo--${options.size}`);
451
469
  }
452
470
  }
453
-
471
+
454
472
  // Update title
455
473
  if (options.title !== undefined) {
456
474
  let titleElement = this.element.querySelector('.c-todo__title') as HTMLHeadingElement;
457
-
475
+
458
476
  if (options.title) {
459
477
  if (!titleElement) {
460
478
  titleElement = document.createElement('h2');
@@ -466,12 +484,12 @@ export class Todo {
466
484
  titleElement.remove();
467
485
  }
468
486
  }
469
-
487
+
470
488
  // Update placeholder
471
489
  if (options.placeholder && this.inputElement) {
472
490
  this.inputElement.placeholder = options.placeholder;
473
491
  }
474
-
492
+
475
493
  // Update items or showCompleted flag
476
494
  if (options.items || options.showCompleted !== undefined) {
477
495
  if (options.items) {
@@ -489,13 +507,13 @@ export class Todo {
489
507
  if (this.formElement) {
490
508
  this.formElement.removeEventListener('submit', this._handleSubmit);
491
509
  }
492
-
510
+
493
511
  // Remove input event listeners
494
512
  if (this.inputElement) {
495
513
  this.inputElement.removeEventListener('focus', () => {});
496
514
  this.inputElement.removeEventListener('blur', () => {});
497
515
  }
498
-
516
+
499
517
  // Clear element
500
518
  this.element.innerHTML = '';
501
519
  this.element.classList.remove(TODO.CLASSES.BASE);
@@ -513,4 +531,4 @@ export class Todo {
513
531
  }
514
532
 
515
533
  // Export todoInteractions
516
- export * from './todoInteractions';
534
+ export * from './todoInteractions';
@@ -8,11 +8,11 @@ import { TODO } from '../../../lib/constants/components';
8
8
  */
9
9
  export function applyHoverEffect(todoItem: HTMLElement): void {
10
10
  const hoverClass = 'is-hovered';
11
-
11
+
12
12
  todoItem.addEventListener('mouseenter', () => {
13
13
  todoItem.classList.add(hoverClass);
14
14
  });
15
-
15
+
16
16
  todoItem.addEventListener('mouseleave', () => {
17
17
  todoItem.classList.remove(hoverClass);
18
18
  });
@@ -25,11 +25,11 @@ export function applyHoverEffect(todoItem: HTMLElement): void {
25
25
  export function applyFocusEffect(input: HTMLInputElement): void {
26
26
  const focusClass = 'is-focused';
27
27
  const formGroup = input.closest('.c-todo__form-group');
28
-
28
+
29
29
  input.addEventListener('focus', () => {
30
30
  formGroup?.classList.add(focusClass);
31
31
  });
32
-
32
+
33
33
  input.addEventListener('blur', () => {
34
34
  formGroup?.classList.remove(focusClass);
35
35
  });
@@ -50,20 +50,20 @@ export function initializeTodoItem(
50
50
  ): void {
51
51
  const checkbox = item.querySelector('.c-todo__checkbox') as HTMLInputElement;
52
52
  const deleteButton = item.querySelector('.c-todo__delete-btn') as HTMLButtonElement;
53
-
53
+
54
54
  if (checkbox) {
55
55
  checkbox.addEventListener('change', () => {
56
56
  if (onToggle) onToggle(id);
57
57
  });
58
58
  }
59
-
59
+
60
60
  if (deleteButton) {
61
- deleteButton.addEventListener('click', (e) => {
61
+ deleteButton.addEventListener('click', e => {
62
62
  e.preventDefault();
63
63
  if (onDelete) onDelete(id);
64
64
  });
65
65
  }
66
-
66
+
67
67
  // Apply hover effect
68
68
  applyHoverEffect(item);
69
69
  }
@@ -75,8 +75,8 @@ export function initializeTodoItem(
75
75
  export function initializeAllTodos(selector = '[data-component="todo"]'): Todo[] {
76
76
  const todoInstances: Todo[] = [];
77
77
  const todoElements = document.querySelectorAll<HTMLElement>(selector);
78
-
79
- todoElements.forEach((element) => {
78
+
79
+ todoElements.forEach(element => {
80
80
  try {
81
81
  const instance = new Todo(element);
82
82
  todoInstances.push(instance);
@@ -84,7 +84,7 @@ export function initializeAllTodos(selector = '[data-component="todo"]'): Todo[]
84
84
  console.error('Error initializing todo:', error);
85
85
  }
86
86
  });
87
-
87
+
88
88
  return todoInstances;
89
89
  }
90
90
 
@@ -115,4 +115,4 @@ export function sortTodoItems(items: TodoItem[]): TodoItem[] {
115
115
  // Then by creation time (assuming newer items have higher IDs)
116
116
  return a.id.localeCompare(b.id);
117
117
  });
118
- }
118
+ }
@@ -6,14 +6,14 @@ export interface TodoItem {
6
6
  * Unique identifier for the todo
7
7
  */
8
8
  id: string;
9
-
9
+
10
10
  /**
11
11
  * Todo item text
12
12
  */
13
13
  text: string;
14
-
14
+
15
15
  /**
16
16
  * Whether the todo is completed
17
17
  */
18
18
  completed: boolean;
19
- }
19
+ }