@shohojdhara/atomix 0.1.30 → 0.2.1

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 (469) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/LICENSE +0 -0
  3. package/README.md +151 -39
  4. package/dist/atomix.css +13529 -0
  5. package/dist/atomix.min.css +15 -0
  6. package/dist/index.d.ts +6112 -1757
  7. package/dist/index.esm.js +16852 -8364
  8. package/dist/index.esm.js.map +1 -1
  9. package/dist/index.js +16892 -8369
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.min.js +1 -1
  12. package/dist/index.min.js.map +1 -1
  13. package/dist/themes/boomdevs.css +13241 -0
  14. package/dist/themes/boomdevs.min.css +353 -0
  15. package/dist/themes/esrar.css +15374 -0
  16. package/dist/themes/esrar.min.css +189 -0
  17. package/dist/themes/mashroom.css +28079 -0
  18. package/dist/themes/mashroom.min.css +403 -0
  19. package/dist/themes/shaj-default.css +14203 -0
  20. package/dist/themes/shaj-default.min.css +500 -0
  21. package/dist/themes/yabai.css +13711 -0
  22. package/dist/themes/yabai.min.css +189 -0
  23. package/package.json +126 -99
  24. package/src/components/Accordion/Accordion.stories.tsx +271 -0
  25. package/src/components/Accordion/Accordion.tsx +131 -0
  26. package/src/components/Accordion/index.ts +3 -0
  27. package/src/components/AtomixLogo/AtomixLogo.tsx +36 -0
  28. package/src/components/AtomixLogo/index.ts +3 -0
  29. package/src/components/AtomixLogo.tsx +40 -0
  30. package/src/components/Avatar/Avatar.stories.tsx +257 -0
  31. package/src/components/Avatar/Avatar.tsx +68 -0
  32. package/src/components/Avatar/AvatarGroup.tsx +73 -0
  33. package/src/components/Avatar/index.ts +3 -0
  34. package/src/components/Badge/Badge.stories.tsx +371 -0
  35. package/src/components/Badge/Badge.tsx +39 -0
  36. package/src/components/Badge/index.ts +3 -0
  37. package/src/components/Block/Block.stories.tsx +408 -0
  38. package/src/components/Block/Block.tsx +137 -0
  39. package/src/components/Block/index.ts +1 -0
  40. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +106 -0
  41. package/src/components/Breadcrumb/Breadcrumb.tsx +112 -0
  42. package/src/components/Breadcrumb/index.ts +3 -0
  43. package/src/components/Button/Button.stories.tsx +312 -0
  44. package/src/components/Button/Button.tsx +69 -0
  45. package/src/components/Button/index.ts +3 -0
  46. package/src/components/Callout/Callout.stories.tsx +588 -0
  47. package/src/components/Callout/Callout.tsx +78 -0
  48. package/src/components/Callout/index.ts +1 -0
  49. package/src/components/Card/Card.stories.tsx +105 -0
  50. package/src/components/Card/Card.tsx +69 -0
  51. package/src/components/Card/ElevationCard.tsx +47 -0
  52. package/src/components/Card/index.ts +15 -0
  53. package/src/components/Chart/AdvancedChart.tsx +624 -0
  54. package/src/components/Chart/AnimatedChart.tsx +206 -0
  55. package/src/components/Chart/AreaChart.tsx +27 -0
  56. package/src/components/Chart/BarChart.tsx +148 -0
  57. package/src/components/Chart/BubbleChart.tsx +411 -0
  58. package/src/components/Chart/CandlestickChart.tsx +765 -0
  59. package/src/components/Chart/Chart.stories.tsx +527 -0
  60. package/src/components/Chart/Chart.tsx +218 -0
  61. package/src/components/Chart/ChartRenderer.tsx +322 -0
  62. package/src/components/Chart/ChartToolbar.tsx +436 -0
  63. package/src/components/Chart/ChartTooltip.tsx +101 -0
  64. package/src/components/Chart/DonutChart.tsx +370 -0
  65. package/src/components/Chart/FunnelChart.tsx +393 -0
  66. package/src/components/Chart/GaugeChart.tsx +550 -0
  67. package/src/components/Chart/HeatmapChart.tsx +614 -0
  68. package/src/components/Chart/LineChart.tsx +172 -0
  69. package/src/components/Chart/LineChartNew.tsx +167 -0
  70. package/src/components/Chart/MultiAxisChart.tsx +498 -0
  71. package/src/components/Chart/PieChart.tsx +103 -0
  72. package/src/components/Chart/RadarChart.tsx +332 -0
  73. package/src/components/Chart/RealTimeChart.tsx +436 -0
  74. package/src/components/Chart/ScatterChart.tsx +152 -0
  75. package/src/components/Chart/TreemapChart.tsx +574 -0
  76. package/src/components/Chart/WaterfallChart.tsx +450 -0
  77. package/src/components/Chart/index.ts +119 -0
  78. package/src/components/Chart/types.ts +338 -0
  79. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +44 -0
  80. package/src/components/ColorModeToggle/ColorModeToggle.tsx +85 -0
  81. package/src/components/ColorModeToggle/index.ts +2 -0
  82. package/src/components/Countdown/Countdown.stories.tsx +46 -0
  83. package/src/components/Countdown/Countdown.tsx +90 -0
  84. package/src/components/Countdown/index.ts +2 -0
  85. package/src/components/DataTable/DataTable.stories.tsx +248 -0
  86. package/src/components/DataTable/DataTable.tsx +213 -0
  87. package/src/components/DataTable/index.ts +3 -0
  88. package/src/components/DatePicker/DatePicker.stories.tsx +364 -0
  89. package/src/components/DatePicker/DatePicker.tsx +504 -0
  90. package/src/components/DatePicker/index.ts +4 -0
  91. package/src/components/DatePicker/readme.md +106 -0
  92. package/src/components/DatePicker/types.ts +167 -0
  93. package/src/components/DatePicker/utils.ts +185 -0
  94. package/src/components/Dropdown/Dropdown.stories.tsx +358 -0
  95. package/src/components/Dropdown/Dropdown.tsx +352 -0
  96. package/src/components/Dropdown/index.ts +14 -0
  97. package/src/components/Dropdown/readme.md +151 -0
  98. package/src/components/EdgePanel/EdgePanel.stories.tsx +266 -0
  99. package/src/components/EdgePanel/EdgePanel.tsx +73 -0
  100. package/src/components/EdgePanel/index.ts +1 -0
  101. package/src/components/Form/Checkbox.stories.tsx +76 -0
  102. package/src/components/Form/Checkbox.tsx +69 -0
  103. package/src/components/Form/Form.stories.tsx +497 -0
  104. package/src/components/Form/Form.tsx +46 -0
  105. package/src/components/Form/FormGroup.stories.tsx +162 -0
  106. package/src/components/Form/FormGroup.tsx +53 -0
  107. package/src/components/Form/Input.stories.tsx +106 -0
  108. package/src/components/Form/Input.tsx +87 -0
  109. package/src/components/Form/Radio.stories.tsx +94 -0
  110. package/src/components/Form/Radio.tsx +65 -0
  111. package/src/components/Form/Select.stories.tsx +151 -0
  112. package/src/components/Form/Select.tsx +191 -0
  113. package/src/components/Form/Textarea.stories.tsx +123 -0
  114. package/src/components/Form/Textarea.tsx +78 -0
  115. package/src/components/Form/index.ts +7 -0
  116. package/src/components/Hero/Hero.stories.tsx +295 -0
  117. package/src/components/Hero/Hero.tsx +175 -0
  118. package/src/components/Hero/index.ts +6 -0
  119. package/src/components/Icon/Icon.tsx +87 -0
  120. package/src/components/Icon/index.ts +2 -0
  121. package/src/components/List/List.stories.tsx +122 -0
  122. package/src/components/List/List.tsx +35 -0
  123. package/src/components/List/ListGroup.tsx +35 -0
  124. package/src/components/List/index.ts +2 -0
  125. package/src/components/Messages/Messages.stories.tsx +160 -0
  126. package/src/components/Messages/Messages.tsx +172 -0
  127. package/src/components/Messages/index.ts +3 -0
  128. package/src/components/Modal/Modal.stories.tsx +284 -0
  129. package/src/components/Modal/Modal.tsx +198 -0
  130. package/src/components/Modal/README.md +169 -0
  131. package/src/components/Modal/index.ts +1 -0
  132. package/src/components/Navigation/Menu/MegaMenu.tsx +109 -0
  133. package/src/components/Navigation/Menu/Menu.stories.tsx +339 -0
  134. package/src/components/Navigation/Menu/Menu.tsx +111 -0
  135. package/src/components/Navigation/Nav/Nav.stories.tsx +456 -0
  136. package/src/components/Navigation/Nav/Nav.tsx +51 -0
  137. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  138. package/src/components/Navigation/Nav/NavItem.tsx +168 -0
  139. package/src/components/Navigation/Navbar/Navbar.stories.tsx +569 -0
  140. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  141. package/src/components/Navigation/README.md +314 -0
  142. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  143. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +609 -0
  144. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  145. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +103 -0
  146. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  147. package/src/components/Navigation/index.ts +23 -0
  148. package/src/components/Pagination/Pagination.stories.tsx +188 -0
  149. package/src/components/Pagination/Pagination.tsx +162 -0
  150. package/src/components/Pagination/index.ts +1 -0
  151. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +397 -0
  152. package/src/components/PhotoViewer/PhotoViewer.tsx +246 -0
  153. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +184 -0
  154. package/src/components/PhotoViewer/PhotoViewerImage.tsx +173 -0
  155. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +91 -0
  156. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +85 -0
  157. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +63 -0
  158. package/src/components/PhotoViewer/README.md +358 -0
  159. package/src/components/PhotoViewer/examples/ImageGallery.tsx +187 -0
  160. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +73 -0
  161. package/src/components/PhotoViewer/examples/index.ts +2 -0
  162. package/src/components/PhotoViewer/index.ts +14 -0
  163. package/src/components/Popover/Popover.stories.tsx +143 -0
  164. package/src/components/Popover/Popover.tsx +137 -0
  165. package/src/components/Popover/index.ts +5 -0
  166. package/src/components/Popover/readme.md +120 -0
  167. package/src/components/ProductReview/ProductReview.stories.tsx +88 -0
  168. package/src/components/ProductReview/ProductReview.tsx +169 -0
  169. package/src/components/ProductReview/index.ts +3 -0
  170. package/src/components/Progress/Progress.stories.tsx +75 -0
  171. package/src/components/Progress/Progress.tsx +45 -0
  172. package/src/components/Progress/index.ts +1 -0
  173. package/src/components/Rating/Rating.stories.tsx +109 -0
  174. package/src/components/Rating/Rating.tsx +286 -0
  175. package/src/components/Rating/index.ts +6 -0
  176. package/src/components/River/River.stories.tsx +230 -0
  177. package/src/components/River/River.tsx +134 -0
  178. package/src/components/River/index.ts +2 -0
  179. package/src/components/SectionIntro/SectionIntro.stories.tsx +143 -0
  180. package/src/components/SectionIntro/SectionIntro.tsx +184 -0
  181. package/src/components/SectionIntro/index.ts +3 -0
  182. package/src/components/Slider/Slider.stories.tsx +241 -0
  183. package/src/components/Slider/Slider.tsx +225 -0
  184. package/src/components/Slider/index.ts +24 -0
  185. package/src/components/Spinner/Spinner.stories.tsx +65 -0
  186. package/src/components/Spinner/Spinner.tsx +36 -0
  187. package/src/components/Spinner/index.ts +2 -0
  188. package/src/components/Steps/Steps.stories.tsx +158 -0
  189. package/src/components/Steps/Steps.tsx +115 -0
  190. package/src/components/Steps/index.ts +3 -0
  191. package/src/components/Tab/Tab.stories.tsx +129 -0
  192. package/src/components/Tab/Tab.tsx +111 -0
  193. package/src/components/Tab/index.ts +2 -0
  194. package/src/components/Testimonial/Testimonial.stories.tsx +180 -0
  195. package/src/components/Testimonial/Testimonial.tsx +138 -0
  196. package/src/components/Testimonial/index.ts +3 -0
  197. package/src/components/Todo/Todo.stories.tsx +103 -0
  198. package/src/components/Todo/Todo.tsx +158 -0
  199. package/src/components/Todo/index.ts +1 -0
  200. package/src/components/Toggle/Toggle.stories.tsx +49 -0
  201. package/src/components/Toggle/Toggle.tsx +84 -0
  202. package/src/components/Toggle/index.ts +2 -0
  203. package/src/components/Tooltip/Tooltip.stories.tsx +115 -0
  204. package/src/components/Tooltip/Tooltip.tsx +150 -0
  205. package/src/components/Tooltip/index.ts +3 -0
  206. package/src/components/Upload/Upload.stories.tsx +220 -0
  207. package/src/components/Upload/Upload.tsx +354 -0
  208. package/src/components/Upload/index.ts +3 -0
  209. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +484 -0
  210. package/src/components/VideoPlayer/VideoPlayer.tsx +574 -0
  211. package/src/components/VideoPlayer/index.ts +7 -0
  212. package/src/components/index.ts +111 -0
  213. package/src/layouts/Grid/Container.tsx +58 -0
  214. package/src/layouts/Grid/Grid.stories.tsx +861 -0
  215. package/src/layouts/Grid/Grid.tsx +68 -0
  216. package/src/layouts/Grid/GridCol.tsx +161 -0
  217. package/src/layouts/Grid/README.md +108 -0
  218. package/src/layouts/Grid/Row.tsx +70 -0
  219. package/src/layouts/Grid/index.ts +8 -0
  220. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +387 -0
  221. package/src/layouts/MasonryGrid/MasonryGrid.tsx +408 -0
  222. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +44 -0
  223. package/src/layouts/MasonryGrid/README.md +117 -0
  224. package/src/layouts/MasonryGrid/index.ts +4 -0
  225. package/src/layouts/index.ts +7 -0
  226. package/src/lib/README.md +89 -0
  227. package/src/lib/composables/index.ts +63 -0
  228. package/src/lib/composables/useAccordion.ts +129 -0
  229. package/src/lib/composables/useAmbientMode.ts +90 -0
  230. package/src/lib/composables/useBadge.ts +42 -0
  231. package/src/lib/composables/useBarChart.ts +365 -0
  232. package/src/lib/composables/useBlock.ts +56 -0
  233. package/src/lib/composables/useBreadcrumb.ts +81 -0
  234. package/src/lib/composables/useButton.ts +59 -0
  235. package/src/lib/composables/useCallout.ts +55 -0
  236. package/src/lib/composables/useCard.ts +155 -0
  237. package/src/lib/composables/useChart.ts +1082 -0
  238. package/src/lib/composables/useChartAnalytics.ts +505 -0
  239. package/src/lib/composables/useChartData.ts +38 -0
  240. package/src/lib/composables/useChartExport.ts +392 -0
  241. package/src/lib/composables/useChartInteraction.ts +34 -0
  242. package/src/lib/composables/useChartInteractions.ts +123 -0
  243. package/src/lib/composables/useChartPerformance.ts +323 -0
  244. package/src/lib/composables/useChartScale.ts +48 -0
  245. package/src/lib/composables/useChartToolbar.ts +532 -0
  246. package/src/lib/composables/useCheckbox.ts +70 -0
  247. package/src/lib/composables/useDataTable.ts +208 -0
  248. package/src/lib/composables/useDatePicker.ts +564 -0
  249. package/src/lib/composables/useDropdown.ts +272 -0
  250. package/src/lib/composables/useEdgePanel.ts +261 -0
  251. package/src/lib/composables/useForm.ts +62 -0
  252. package/src/lib/composables/useFormGroup.ts +51 -0
  253. package/src/lib/composables/useHero.ts +250 -0
  254. package/src/lib/composables/useInput.ts +58 -0
  255. package/src/lib/composables/useLineChart.ts +319 -0
  256. package/src/lib/composables/useMessages.ts +77 -0
  257. package/src/lib/composables/useModal.ts +110 -0
  258. package/src/lib/composables/useNavbar.ts +288 -0
  259. package/src/lib/composables/usePagination.ts +101 -0
  260. package/src/lib/composables/usePhotoViewer.ts +937 -0
  261. package/src/lib/composables/usePieChart.ts +362 -0
  262. package/src/lib/composables/usePopover.ts +354 -0
  263. package/src/lib/composables/useProgress.ts +74 -0
  264. package/src/lib/composables/useRadio.ts +47 -0
  265. package/src/lib/composables/useRating.ts +174 -0
  266. package/src/lib/composables/useRiver.ts +205 -0
  267. package/src/lib/composables/useSelect.ts +52 -0
  268. package/src/lib/composables/useSideMenu.ts +197 -0
  269. package/src/lib/composables/useSlider.ts +339 -0
  270. package/src/lib/composables/useSpinner.ts +42 -0
  271. package/src/lib/composables/useTextarea.ts +55 -0
  272. package/src/lib/composables/useTodo.ts +141 -0
  273. package/src/lib/composables/useVideoPlayer.ts +398 -0
  274. package/src/lib/constants/components.ts +1433 -0
  275. package/src/lib/constants/index.ts +4 -0
  276. package/src/lib/index.ts +11 -0
  277. package/src/lib/types/components.ts +4750 -0
  278. package/src/lib/types/index.ts +2 -0
  279. package/src/lib/utils/dom.ts +41 -0
  280. package/src/lib/utils/icons.ts +74 -0
  281. package/src/lib/utils/index.ts +55 -0
  282. package/src/lib/utils/useForkRef.test.tsx +64 -0
  283. package/src/lib/utils/useForkRef.ts +36 -0
  284. package/src/lib/utils.test.ts +14 -0
  285. package/src/styles/01-settings/_index.scss +2 -0
  286. package/src/styles/01-settings/_settings.accordion.scss +7 -5
  287. package/src/styles/01-settings/_settings.animations.scss +0 -0
  288. package/src/styles/01-settings/_settings.avatar-group.scss +6 -3
  289. package/src/styles/01-settings/_settings.avatar.scss +2 -2
  290. package/src/styles/01-settings/_settings.badge.scss +15 -9
  291. package/src/styles/01-settings/_settings.block.scss +11 -0
  292. package/src/styles/01-settings/_settings.border-radius.scss +12 -9
  293. package/src/styles/01-settings/_settings.border.scss +4 -1
  294. package/src/styles/01-settings/_settings.box-shadow.scss +1 -1
  295. package/src/styles/01-settings/_settings.breadcrumb.scss +9 -8
  296. package/src/styles/01-settings/_settings.breakpoints.scss +0 -0
  297. package/src/styles/01-settings/_settings.btn-group.scss +4 -1
  298. package/src/styles/01-settings/_settings.button.scss +19 -21
  299. package/src/styles/01-settings/_settings.callout.scss +42 -24
  300. package/src/styles/01-settings/_settings.card.scss +12 -10
  301. package/src/styles/01-settings/_settings.chart.scss +199 -0
  302. package/src/styles/01-settings/_settings.checkbox-group.scss +0 -0
  303. package/src/styles/01-settings/_settings.checkbox.scss +0 -0
  304. package/src/styles/01-settings/_settings.color-mode.scss +0 -0
  305. package/src/styles/01-settings/_settings.colors.scss +20 -0
  306. package/src/styles/01-settings/_settings.config.scss +1 -1
  307. package/src/styles/01-settings/_settings.countdown.scss +0 -0
  308. package/src/styles/01-settings/_settings.data-table.scss +0 -0
  309. package/src/styles/01-settings/_settings.datepicker.scss +0 -0
  310. package/src/styles/01-settings/_settings.dropdown.scss +0 -0
  311. package/src/styles/01-settings/_settings.edge-panel.scss +0 -0
  312. package/src/styles/01-settings/_settings.fonts.scss +1 -1
  313. package/src/styles/01-settings/_settings.form-group.scss +0 -0
  314. package/src/styles/01-settings/_settings.form.scss +0 -0
  315. package/src/styles/01-settings/_settings.grid.scss +3 -3
  316. package/src/styles/01-settings/_settings.hero.scss +1 -1
  317. package/src/styles/01-settings/_settings.input.scss +1 -1
  318. package/src/styles/01-settings/_settings.link.scss +0 -0
  319. package/src/styles/01-settings/_settings.list-group.scss +0 -0
  320. package/src/styles/01-settings/_settings.list.scss +0 -0
  321. package/src/styles/01-settings/_settings.maps.scss +43 -8
  322. package/src/styles/01-settings/_settings.masonry-grid.scss +0 -0
  323. package/src/styles/01-settings/_settings.menu.scss +0 -0
  324. package/src/styles/01-settings/_settings.messages.scss +0 -0
  325. package/src/styles/01-settings/_settings.modal.scss +1 -1
  326. package/src/styles/01-settings/_settings.nav.scss +0 -0
  327. package/src/styles/01-settings/_settings.navbar.scss +0 -0
  328. package/src/styles/01-settings/_settings.pagination.scss +0 -0
  329. package/src/styles/01-settings/_settings.photoviewer.scss +89 -23
  330. package/src/styles/01-settings/_settings.popover.scss +0 -0
  331. package/src/styles/01-settings/_settings.position.scss +0 -0
  332. package/src/styles/01-settings/_settings.progress.scss +0 -0
  333. package/src/styles/01-settings/_settings.rating.scss +0 -0
  334. package/src/styles/01-settings/_settings.river.scss +0 -0
  335. package/src/styles/01-settings/_settings.sectionintro.scss +0 -0
  336. package/src/styles/01-settings/_settings.select.scss +0 -0
  337. package/src/styles/01-settings/_settings.side-menu.scss +0 -0
  338. package/src/styles/01-settings/_settings.skeleton.scss +0 -0
  339. package/src/styles/01-settings/_settings.slider.scss +59 -0
  340. package/src/styles/01-settings/_settings.spacing.scss +11 -3
  341. package/src/styles/01-settings/_settings.spinner.scss +0 -0
  342. package/src/styles/01-settings/_settings.steps.scss +1 -1
  343. package/src/styles/01-settings/_settings.tabs.scss +4 -4
  344. package/src/styles/01-settings/_settings.testimonials.scss +0 -0
  345. package/src/styles/01-settings/_settings.todo.scss +0 -0
  346. package/src/styles/01-settings/_settings.toggle.scss +1 -1
  347. package/src/styles/01-settings/_settings.tooltip.scss +0 -0
  348. package/src/styles/01-settings/_settings.typography.scss +2 -0
  349. package/src/styles/01-settings/_settings.upload.scss +0 -0
  350. package/src/styles/01-settings/_settings.video-player.scss +64 -0
  351. package/src/styles/01-settings/_settings.z-layers.scss +0 -0
  352. package/src/styles/02-tools/_index.scss +1 -0
  353. package/src/styles/02-tools/_tools.animations.scss +82 -0
  354. package/src/styles/02-tools/_tools.border-radius.scss +0 -0
  355. package/src/styles/02-tools/_tools.breakpoints.scss +0 -0
  356. package/src/styles/02-tools/_tools.button.scss +5 -0
  357. package/src/styles/02-tools/_tools.clearfix.scss +0 -0
  358. package/src/styles/02-tools/_tools.color-functions.scss +0 -0
  359. package/src/styles/02-tools/_tools.color-mode.scss +1 -1
  360. package/src/styles/02-tools/_tools.component.scss +479 -0
  361. package/src/styles/02-tools/_tools.event.scss +0 -0
  362. package/src/styles/02-tools/_tools.grid.scss +0 -0
  363. package/src/styles/02-tools/_tools.hidden-visually.scss +0 -0
  364. package/src/styles/02-tools/_tools.hidden.scss +0 -0
  365. package/src/styles/02-tools/_tools.map-loop.scss +0 -0
  366. package/src/styles/02-tools/_tools.media-queries.scss +0 -0
  367. package/src/styles/02-tools/_tools.object-fit.scss +0 -0
  368. package/src/styles/02-tools/_tools.placeholder.scss +0 -0
  369. package/src/styles/02-tools/_tools.rem.scss +5 -1
  370. package/src/styles/02-tools/_tools.size.scss +0 -0
  371. package/src/styles/02-tools/_tools.spacing.scss +0 -0
  372. package/src/styles/02-tools/_tools.to-rgb.scss +0 -0
  373. package/src/styles/02-tools/_tools.transition.scss +0 -0
  374. package/src/styles/02-tools/_tools.utilities.scss +0 -0
  375. package/src/styles/02-tools/_tools.utility-api.scss +23 -2
  376. package/src/styles/03-generic/_generic.fonts.scss +0 -0
  377. package/src/styles/03-generic/_generic.reset.scss +0 -0
  378. package/src/styles/03-generic/_generic.root.scss +5 -1
  379. package/src/styles/03-generic/_generic.selection.scss +0 -0
  380. package/src/styles/03-generic/_index.scss +0 -0
  381. package/src/styles/04-elements/_elements.all.scss +0 -0
  382. package/src/styles/04-elements/_elements.body.scss +0 -0
  383. package/src/styles/04-elements/_elements.heading.scss +0 -0
  384. package/src/styles/04-elements/_elements.html.scss +0 -0
  385. package/src/styles/04-elements/_elements.links.scss +0 -0
  386. package/src/styles/04-elements/_index.scss +0 -0
  387. package/src/styles/05-objects/_index.scss +1 -0
  388. package/src/styles/05-objects/_objects.block.scss +122 -0
  389. package/src/styles/05-objects/_objects.container.scss +14 -10
  390. package/src/styles/05-objects/_objects.grid.scss +0 -0
  391. package/src/styles/05-objects/_objects.masonry-grid.scss +0 -0
  392. package/src/styles/06-components/_components.accordion.scss +3 -1
  393. package/src/styles/06-components/_components.avatar-group.scss +0 -0
  394. package/src/styles/06-components/_components.avatar.scss +0 -0
  395. package/src/styles/06-components/_components.badge.scss +9 -9
  396. package/src/styles/06-components/_components.breadcrumb.scss +0 -0
  397. package/src/styles/06-components/_components.btn-group.scss +0 -0
  398. package/src/styles/06-components/_components.button.scss +0 -0
  399. package/src/styles/06-components/_components.callout.scss +2 -1
  400. package/src/styles/06-components/_components.card.scss +0 -1
  401. package/src/styles/06-components/_components.chart.scss +2102 -0
  402. package/src/styles/06-components/_components.checkbox-group.scss +0 -0
  403. package/src/styles/06-components/_components.checkbox.scss +0 -0
  404. package/src/styles/06-components/_components.color-mode-toggle.scss +0 -0
  405. package/src/styles/06-components/_components.countdown.scss +0 -0
  406. package/src/styles/06-components/_components.data-table.scss +0 -0
  407. package/src/styles/06-components/_components.datepicker.scss +0 -0
  408. package/src/styles/06-components/_components.dropdown.scss +0 -0
  409. package/src/styles/06-components/_components.edge-panel.scss +0 -0
  410. package/src/styles/06-components/_components.form-group.scss +0 -0
  411. package/src/styles/06-components/_components.form.scss +0 -0
  412. package/src/styles/06-components/_components.hero.scss +1 -0
  413. package/src/styles/06-components/_components.icon.scss +2 -2
  414. package/src/styles/06-components/_components.image-gallery.scss +0 -0
  415. package/src/styles/06-components/_components.input.scss +0 -0
  416. package/src/styles/06-components/_components.list-group.scss +0 -0
  417. package/src/styles/06-components/_components.list.scss +0 -0
  418. package/src/styles/06-components/_components.menu.scss +0 -0
  419. package/src/styles/06-components/_components.messages.scss +0 -0
  420. package/src/styles/06-components/_components.modal.scss +3 -0
  421. package/src/styles/06-components/_components.nav.scss +0 -0
  422. package/src/styles/06-components/_components.navbar.scss +0 -0
  423. package/src/styles/06-components/_components.pagination.scss +0 -0
  424. package/src/styles/06-components/_components.photoviewer.scss +603 -545
  425. package/src/styles/06-components/_components.popover.scss +0 -0
  426. package/src/styles/06-components/_components.product-review.scss +0 -0
  427. package/src/styles/06-components/_components.progress.scss +0 -0
  428. package/src/styles/06-components/_components.rating.scss +0 -0
  429. package/src/styles/06-components/_components.river.scss +0 -0
  430. package/src/styles/06-components/_components.sectionintro.scss +0 -0
  431. package/src/styles/06-components/_components.select.scss +0 -0
  432. package/src/styles/06-components/_components.side-menu.scss +0 -0
  433. package/src/styles/06-components/_components.skeleton.scss +0 -0
  434. package/src/styles/06-components/_components.slider.scss +273 -0
  435. package/src/styles/06-components/_components.spinner.scss +0 -0
  436. package/src/styles/06-components/_components.steps.scss +1 -0
  437. package/src/styles/06-components/_components.tabs.scss +0 -0
  438. package/src/styles/06-components/_components.testimonials.scss +0 -0
  439. package/src/styles/06-components/_components.todo.scss +0 -0
  440. package/src/styles/06-components/_components.toggle.scss +0 -0
  441. package/src/styles/06-components/_components.tooltip.scss +4 -9
  442. package/src/styles/06-components/_components.upload.scss +0 -0
  443. package/src/styles/06-components/_components.video-player.scss +623 -0
  444. package/src/styles/06-components/_index.scss +3 -0
  445. package/src/styles/06-components/old.chart.styles.scss +2819 -0
  446. package/src/styles/99-utilities/_index.scss +0 -0
  447. package/src/styles/99-utilities/_utilities.background.scss +0 -0
  448. package/src/styles/99-utilities/_utilities.border.scss +0 -0
  449. package/src/styles/99-utilities/_utilities.clearfix.scss +0 -0
  450. package/src/styles/99-utilities/_utilities.display.scss +0 -0
  451. package/src/styles/99-utilities/_utilities.flex.scss +0 -0
  452. package/src/styles/99-utilities/_utilities.link.scss +0 -0
  453. package/src/styles/99-utilities/_utilities.object-fit.scss +0 -0
  454. package/src/styles/99-utilities/_utilities.opacity.scss +0 -0
  455. package/src/styles/99-utilities/_utilities.overflow.scss +0 -0
  456. package/src/styles/99-utilities/_utilities.position.scss +0 -0
  457. package/src/styles/99-utilities/_utilities.scss +2 -1
  458. package/src/styles/99-utilities/_utilities.shadow.scss +0 -0
  459. package/src/styles/99-utilities/_utilities.sizes.scss +0 -0
  460. package/src/styles/99-utilities/_utilities.spacing.scss +0 -0
  461. package/src/styles/99-utilities/_utilities.text.scss +5 -0
  462. package/src/styles/99-utilities/_utilities.visibility.scss +0 -0
  463. package/src/styles/99-utilities/_utilities.visually-hidden.scss +0 -0
  464. package/src/styles/99-utilities/_utilities.z-index.scss +0 -0
  465. package/src/styles/css-modules.d.ts +0 -0
  466. package/src/styles/index.scss +0 -0
  467. package/dist/index.css +0 -15
  468. package/dist/index.esm.css +0 -15
  469. package/dist/index.min.css +0 -15
@@ -0,0 +1,614 @@
1
+ import { forwardRef, memo, useCallback, useMemo, useState } from 'react';
2
+ import { ChartProps } from '../../lib/types/components';
3
+ import Chart from './Chart';
4
+
5
+ interface HeatmapDataPoint {
6
+ x: string | number;
7
+ y: string | number;
8
+ value: number;
9
+ label?: string;
10
+ metadata?: Record<string, any>;
11
+ }
12
+
13
+ interface HeatmapChartProps extends Omit<ChartProps, 'type' | 'datasets' | 'variant'> {
14
+ /**
15
+ * Heatmap data points
16
+ */
17
+ data: HeatmapDataPoint[];
18
+
19
+ /**
20
+ * Color scale configuration
21
+ */
22
+ colorScale?: {
23
+ /**
24
+ * Color scheme - enhanced with GitHub-style contribution colors
25
+ */
26
+ scheme:
27
+ | 'viridis'
28
+ | 'plasma'
29
+ | 'inferno'
30
+ | 'magma'
31
+ | 'blues'
32
+ | 'reds'
33
+ | 'greens'
34
+ | 'github'
35
+ | 'custom';
36
+ /**
37
+ * Custom colors for custom scheme
38
+ */
39
+ colors?: string[];
40
+ /**
41
+ * Number of color steps
42
+ */
43
+ steps?: number;
44
+ /**
45
+ * Min value for color mapping
46
+ */
47
+ min?: number;
48
+ /**
49
+ * Max value for color mapping
50
+ */
51
+ max?: number;
52
+ };
53
+
54
+ /**
55
+ * Cell configuration
56
+ */
57
+ cellConfig?: {
58
+ /**
59
+ * Cell width
60
+ */
61
+ width?: number;
62
+ /**
63
+ * Cell height
64
+ */
65
+ height?: number;
66
+ /**
67
+ * Cell border radius
68
+ */
69
+ borderRadius?: number;
70
+ /**
71
+ * Cell spacing
72
+ */
73
+ spacing?: number;
74
+ /**
75
+ * Show cell borders
76
+ */
77
+ showBorders?: boolean;
78
+ };
79
+
80
+ /**
81
+ * Whether to show values in cells
82
+ */
83
+ showValues?: boolean;
84
+
85
+ /**
86
+ * Value formatter
87
+ */
88
+ valueFormatter?: (value: number) => string;
89
+
90
+ /**
91
+ * Whether to show color legend
92
+ */
93
+ showColorLegend?: boolean;
94
+
95
+ /**
96
+ * Tooltip configuration
97
+ */
98
+ tooltipConfig?: {
99
+ enabled: boolean;
100
+ formatter?: (dataPoint: HeatmapDataPoint) => string;
101
+ };
102
+
103
+ /**
104
+ * Layout variant - grid or calendar style
105
+ */
106
+ variant?: 'grid' | 'calendar';
107
+
108
+ /**
109
+ * Animation configuration
110
+ */
111
+ animationConfig?: {
112
+ enabled?: boolean;
113
+ duration?: number;
114
+ delay?: number;
115
+ easing?: string;
116
+ };
117
+ }
118
+
119
+ const HeatmapChart = memo(
120
+ forwardRef<HTMLDivElement, HeatmapChartProps>(
121
+ (
122
+ {
123
+ data = [],
124
+ colorScale = { scheme: 'github', steps: 5 },
125
+ cellConfig = {
126
+ width: 12,
127
+ height: 12,
128
+ borderRadius: 2,
129
+ spacing: 2,
130
+ showBorders: false,
131
+ },
132
+ showValues = false,
133
+ valueFormatter = v => v.toFixed(0),
134
+ showColorLegend = true,
135
+ tooltipConfig = { enabled: true },
136
+ variant = 'grid',
137
+ animationConfig = {
138
+ enabled: true,
139
+ duration: 800,
140
+ delay: 50,
141
+ easing: 'ease-out',
142
+ },
143
+ config = {},
144
+ ...props
145
+ },
146
+ ref
147
+ ) => {
148
+ const [hoveredCell, setHoveredCell] = useState<HeatmapDataPoint | null>(null);
149
+ const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 });
150
+
151
+ // Process data into matrix format
152
+ const processedData = useMemo(() => {
153
+ console.log('HeatmapChart data:', data);
154
+ if (!data.length) {
155
+ console.log('No data provided to HeatmapChart');
156
+ return { matrix: [], xLabels: [], yLabels: [], minValue: 0, maxValue: 1 };
157
+ }
158
+
159
+ // Get unique x and y values
160
+ const xValues = [...new Set(data.map(d => d.x))].sort();
161
+ const yValues = [...new Set(data.map(d => d.y))].sort();
162
+
163
+ // Calculate value range
164
+ const values = data.map(d => d.value);
165
+ const minValue = colorScale.min ?? Math.min(...values);
166
+ const maxValue = colorScale.max ?? Math.max(...values);
167
+
168
+ // Create matrix
169
+ const matrix: (HeatmapDataPoint | null)[][] = yValues.map(() =>
170
+ new Array(xValues.length).fill(null)
171
+ );
172
+
173
+ // Fill matrix with data
174
+ data.forEach(point => {
175
+ const xIndex = xValues.indexOf(point.x);
176
+ const yIndex = yValues.indexOf(point.y);
177
+ if (xIndex >= 0 && yIndex >= 0 && matrix[yIndex]) {
178
+ matrix[yIndex]![xIndex] = point;
179
+ }
180
+ });
181
+
182
+ return {
183
+ matrix,
184
+ xLabels: xValues,
185
+ yLabels: yValues,
186
+ minValue,
187
+ maxValue,
188
+ };
189
+ }, [data, colorScale.min, colorScale.max]);
190
+
191
+ // Enhanced color schemes with GitHub-style contribution colors
192
+ const colorSchemes = {
193
+ viridis: [
194
+ '#440154',
195
+ '#482777',
196
+ '#3f4a8a',
197
+ '#31678e',
198
+ '#26838f',
199
+ '#1f9d8a',
200
+ '#6cce5a',
201
+ '#b6de2b',
202
+ '#fee825',
203
+ ],
204
+ plasma: [
205
+ '#0d0887',
206
+ '#5302a3',
207
+ '#8b0aa5',
208
+ '#b83289',
209
+ '#db5c68',
210
+ '#f48849',
211
+ '#febd2a',
212
+ '#f0f921',
213
+ ],
214
+ inferno: [
215
+ '#000004',
216
+ '#1b0c41',
217
+ '#4a0c6b',
218
+ '#781c6d',
219
+ '#a52c60',
220
+ '#cf4446',
221
+ '#ed6925',
222
+ '#fb9b06',
223
+ '#fcffa4',
224
+ ],
225
+ magma: [
226
+ '#000004',
227
+ '#1c1044',
228
+ '#4f127b',
229
+ '#812581',
230
+ '#b5367a',
231
+ '#e55964',
232
+ '#fb8761',
233
+ '#fec287',
234
+ '#fcfdbf',
235
+ ],
236
+ blues: [
237
+ '#f7fbff',
238
+ '#deebf7',
239
+ '#c6dbef',
240
+ '#9ecae1',
241
+ '#6baed6',
242
+ '#4292c6',
243
+ '#2171b5',
244
+ '#08519c',
245
+ '#08306b',
246
+ ],
247
+ reds: [
248
+ '#fff5f0',
249
+ '#fee0d2',
250
+ '#fcbba1',
251
+ '#fc9272',
252
+ '#fb6a4a',
253
+ '#ef3b2c',
254
+ '#cb181d',
255
+ '#a50f15',
256
+ '#67000d',
257
+ ],
258
+ greens: [
259
+ '#f7fcf5',
260
+ '#e5f5e0',
261
+ '#c7e9c0',
262
+ '#a1d99b',
263
+ '#74c476',
264
+ '#41ab5d',
265
+ '#238b45',
266
+ '#006d2c',
267
+ '#00441b',
268
+ ],
269
+ github: ['#ebedf0', '#9be9a8', '#40c463', '#30a14e', '#216e39'],
270
+ custom: colorScale.colors || ['#ffffff', '#000000'],
271
+ };
272
+
273
+ // Generate color scale
274
+ const getColor = useCallback(
275
+ (value: number) => {
276
+ const { minValue, maxValue } = processedData;
277
+ const range = maxValue - minValue;
278
+ if (range === 0) return colorSchemes[colorScale.scheme][0];
279
+
280
+ const normalizedValue = (value - minValue) / range;
281
+ const colors = colorSchemes[colorScale.scheme];
282
+ const steps = colorScale.steps || colors.length;
283
+
284
+ const colorIndex = Math.min(Math.floor(normalizedValue * steps), steps - 1);
285
+ const scaledIndex = Math.floor((colorIndex / steps) * (colors.length - 1));
286
+
287
+ return colors[scaledIndex];
288
+ },
289
+ [processedData, colorScale.scheme, colorScale.steps, colorSchemes]
290
+ );
291
+
292
+ // Handle cell hover
293
+ const handleCellHover = useCallback(
294
+ (dataPoint: HeatmapDataPoint | null, event?: React.MouseEvent) => {
295
+ setHoveredCell(dataPoint);
296
+
297
+ if (event && dataPoint) {
298
+ const rect = event.currentTarget.getBoundingClientRect();
299
+ setTooltipPosition({
300
+ x: event.clientX,
301
+ y: event.clientY,
302
+ });
303
+ }
304
+ },
305
+ []
306
+ );
307
+
308
+ // Render heatmap content
309
+ const renderContent = useCallback(
310
+ ({ scales }: { scales: any }) => {
311
+ const { matrix, xLabels, yLabels } = processedData;
312
+ console.log(
313
+ 'Rendering heatmap with matrix:',
314
+ matrix,
315
+ 'xLabels:',
316
+ xLabels,
317
+ 'yLabels:',
318
+ yLabels
319
+ );
320
+ if (!matrix.length) {
321
+ console.log('Matrix is empty, not rendering');
322
+ return null;
323
+ }
324
+
325
+ const cellWidth = cellConfig.width || 40;
326
+ const cellHeight = cellConfig.height || 40;
327
+ const spacing = cellConfig.spacing || 2;
328
+ const borderRadius = cellConfig.borderRadius || 4;
329
+
330
+ const totalWidth = xLabels.length * (cellWidth + spacing) - spacing;
331
+ const totalHeight = yLabels.length * (cellHeight + spacing) - spacing;
332
+
333
+ const startX = 100; // Leave space for y-axis labels
334
+ const startY = 50; // Leave space for x-axis labels
335
+
336
+ return (
337
+ <g>
338
+ {/* Gradient definitions */}
339
+ <defs>
340
+ {showColorLegend && (
341
+ <linearGradient id="heatmap-legend-gradient" x1="0%" y1="100%" x2="0%" y2="0%">
342
+ {colorSchemes[colorScale.scheme].map((color, i) => (
343
+ <stop
344
+ key={i}
345
+ offset={`${(i / (colorSchemes[colorScale.scheme].length - 1)) * 100}%`}
346
+ stopColor={color}
347
+ />
348
+ ))}
349
+ </linearGradient>
350
+ )}
351
+ </defs>
352
+
353
+ {/* X-axis labels */}
354
+ {xLabels.map((label, i) => {
355
+ const showLabel =
356
+ variant === 'calendar'
357
+ ? i % 4 === 0
358
+ : i % Math.max(1, Math.floor(xLabels.length / 12)) === 0;
359
+ return showLabel ? (
360
+ <text
361
+ key={`x-label-${i}`}
362
+ x={startX + i * (cellWidth + spacing) + cellWidth / 2}
363
+ y={startY - 8}
364
+ textAnchor="middle"
365
+ className="c-chart__heatmap-axis-label"
366
+ fontSize="11"
367
+ fill="var(--atomix-gray-7)"
368
+ >
369
+ {String(label)}
370
+ </text>
371
+ ) : null;
372
+ })}
373
+
374
+ {/* Y-axis labels */}
375
+ {yLabels.map((label, i) => (
376
+ <text
377
+ key={`y-label-${i}`}
378
+ x={startX - 8}
379
+ y={startY + i * (cellHeight + spacing) + cellHeight / 2}
380
+ textAnchor="end"
381
+ dominantBaseline="middle"
382
+ className="c-chart__heatmap-axis-label"
383
+ fontSize="11"
384
+ fill="var(--atomix-gray-7)"
385
+ >
386
+ {String(label)}
387
+ </text>
388
+ ))}
389
+
390
+ {/* Heatmap cells */}
391
+ {matrix.map((row, rowIndex) =>
392
+ row.map((cell, colIndex) => {
393
+ const x = startX + colIndex * (cellWidth + spacing);
394
+ const y = startY + rowIndex * (cellHeight + spacing);
395
+ const animationDelay = animationConfig.enabled
396
+ ? (rowIndex * xLabels.length + colIndex) * (animationConfig.delay || 50)
397
+ : 0;
398
+
399
+ if (!cell) {
400
+ return (
401
+ <rect
402
+ key={`empty-${rowIndex}-${colIndex}`}
403
+ x={x}
404
+ y={y}
405
+ width={cellWidth}
406
+ height={cellHeight}
407
+ rx={borderRadius}
408
+ fill="var(--atomix-gray-2)"
409
+ stroke={cellConfig.showBorders ? 'var(--atomix-gray-3)' : 'none'}
410
+ strokeWidth={cellConfig.showBorders ? 0.5 : 0}
411
+ className="c-chart__heatmap-cell c-chart__heatmap-cell--empty"
412
+ style={{
413
+ animation: animationConfig.enabled
414
+ ? `chart-fade-in ${animationConfig.duration}ms ${animationConfig.easing} ${animationDelay}ms both`
415
+ : 'none',
416
+ }}
417
+ />
418
+ );
419
+ }
420
+
421
+ const color = getColor(cell.value);
422
+ const isHovered = hoveredCell === cell;
423
+
424
+ return (
425
+ <g key={`cell-${rowIndex}-${colIndex}`}>
426
+ <rect
427
+ x={x}
428
+ y={y}
429
+ width={cellWidth}
430
+ height={cellHeight}
431
+ fill={color}
432
+ rx={borderRadius}
433
+ stroke={cellConfig.showBorders ? 'var(--atomix-gray-3)' : 'none'}
434
+ strokeWidth={cellConfig.showBorders ? 0.5 : 0}
435
+ className={`c-chart__heatmap-cell ${isHovered ? 'c-chart__heatmap-cell--hovered' : ''}`}
436
+ onMouseEnter={e => handleCellHover(cell, e)}
437
+ onMouseLeave={() => handleCellHover(null)}
438
+ style={{
439
+ cursor: 'pointer',
440
+ transition: 'all 0.2s ease',
441
+ animation: animationConfig.enabled
442
+ ? `chart-scale-in ${animationConfig.duration}ms ${animationConfig.easing} ${animationDelay}ms both`
443
+ : 'none',
444
+ transform: isHovered ? 'scale(1.1)' : 'scale(1)',
445
+ filter: isHovered ? 'drop-shadow(0 2px 4px rgba(0,0,0,0.2))' : 'none',
446
+ }}
447
+ />
448
+
449
+ {/* Cell value */}
450
+ {showValues && cell.value > 0 && (
451
+ <text
452
+ x={x + cellWidth / 2}
453
+ y={y + cellHeight / 2}
454
+ textAnchor="middle"
455
+ dominantBaseline="middle"
456
+ fontSize="9"
457
+ fontWeight="500"
458
+ fill={
459
+ cell.value > (processedData.minValue + processedData.maxValue) / 2
460
+ ? 'white'
461
+ : 'var(--atomix-gray-8)'
462
+ }
463
+ className="c-chart__heatmap-value"
464
+ style={{ pointerEvents: 'none' }}
465
+ >
466
+ {valueFormatter(cell.value)}
467
+ </text>
468
+ )}
469
+ </g>
470
+ );
471
+ })
472
+ )}
473
+
474
+ {/* Enhanced color legend */}
475
+ {showColorLegend && (
476
+ <g transform={`translate(${startX + totalWidth + 40}, ${startY})`}>
477
+ <text x="0" y="-15" fontSize="12" fontWeight="600" fill="var(--atomix-gray-8)">
478
+ Activity
479
+ </text>
480
+
481
+ {/* Legend scale boxes */}
482
+ <g transform="translate(0, 10)">
483
+ <text x="-5" y="15" fontSize="10" fill="var(--atomix-gray-6)" textAnchor="end">
484
+ Less
485
+ </text>
486
+
487
+ {colorSchemes[colorScale.scheme].map((color, i) => (
488
+ <rect
489
+ key={i}
490
+ x={i * 14}
491
+ y={0}
492
+ width={12}
493
+ height={12}
494
+ fill={color}
495
+ rx={2}
496
+ stroke="var(--atomix-gray-3)"
497
+ strokeWidth={0.5}
498
+ />
499
+ ))}
500
+
501
+ <text
502
+ x={colorSchemes[colorScale.scheme].length * 14 + 5}
503
+ y="15"
504
+ fontSize="10"
505
+ fill="var(--atomix-gray-6)"
506
+ >
507
+ More
508
+ </text>
509
+ </g>
510
+ </g>
511
+ )}
512
+ </g>
513
+ );
514
+ },
515
+ [
516
+ processedData,
517
+ cellConfig,
518
+ showValues,
519
+ valueFormatter,
520
+ showColorLegend,
521
+ getColor,
522
+ hoveredCell,
523
+ handleCellHover,
524
+ colorScale.scheme,
525
+ colorSchemes,
526
+ ]
527
+ );
528
+
529
+ // Calculate optimal dimensions based on data
530
+ const { matrix, xLabels, yLabels } = processedData;
531
+ const cellWidth = cellConfig.width || 12;
532
+ const cellHeight = cellConfig.height || 12;
533
+ const spacing = cellConfig.spacing || 2;
534
+
535
+ const chartWidth = Math.max(600, xLabels.length * (cellWidth + spacing) + 200);
536
+ const chartHeight = Math.max(400, yLabels.length * (cellHeight + spacing) + 150);
537
+
538
+ return (
539
+ <Chart
540
+ ref={ref}
541
+ type="heatmap"
542
+ datasets={[]}
543
+ config={config}
544
+ className={`c-chart--heatmap c-chart--${variant}`}
545
+ {...props}
546
+ >
547
+ <svg
548
+ width={chartWidth}
549
+ height={chartHeight}
550
+ viewBox={`0 0 ${chartWidth} ${chartHeight}`}
551
+ className="c-chart__svg"
552
+ style={{ width: '100%', height: '100%' }}
553
+ >
554
+ {renderContent({ scales: { width: chartWidth, height: chartHeight } })}
555
+ </svg>
556
+ {tooltipConfig.enabled && hoveredCell && (
557
+ <div
558
+ className="c-chart__tooltip"
559
+ style={{
560
+ position: 'fixed',
561
+ left: tooltipPosition.x + 10,
562
+ top: tooltipPosition.y - 10,
563
+ }}
564
+ >
565
+ {tooltipConfig.formatter
566
+ ? tooltipConfig.formatter(hoveredCell)
567
+ : `${hoveredCell.label || `${hoveredCell.x}, ${hoveredCell.y}`}: ${hoveredCell.value}`}
568
+ </div>
569
+ )}
570
+ </Chart>
571
+ );
572
+ }
573
+ )
574
+ );
575
+
576
+ HeatmapChart.displayName = 'HeatmapChart';
577
+
578
+ /**
579
+ * Generate sample heatmap data for testing
580
+ */
581
+ export const generateHeatmapData = ({
582
+ weeks = 52,
583
+ daysPerWeek = 7,
584
+ maxValue = 10,
585
+ }: {
586
+ weeks?: number;
587
+ daysPerWeek?: number;
588
+ maxValue?: number;
589
+ } = {}): HeatmapDataPoint[] => {
590
+ const data: HeatmapDataPoint[] = [];
591
+ const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
592
+
593
+ for (let week = 0; week < weeks; week++) {
594
+ for (let day = 0; day < daysPerWeek; day++) {
595
+ const value = Math.floor(Math.random() * (maxValue + 1));
596
+ data.push({
597
+ x: week,
598
+ y: days[day] || `Day ${day}`,
599
+ value,
600
+ label: `Week ${week + 1}, ${days[day]}`,
601
+ metadata: {
602
+ week: week + 1,
603
+ day: days[day],
604
+ intensity: value > maxValue * 0.7 ? 'high' : value > maxValue * 0.3 ? 'medium' : 'low',
605
+ },
606
+ });
607
+ }
608
+ }
609
+
610
+ return data;
611
+ };
612
+
613
+ export default HeatmapChart;
614
+ export type { HeatmapChartProps, HeatmapDataPoint };