@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,191 @@
1
+ import React, { useRef, useEffect, useState } from 'react';
2
+ import { SelectProps } from '../../lib/types/components';
3
+ import { useSelect } from '../../lib/composables';
4
+ import { SELECT } from '../../lib/constants/components';
5
+
6
+ /**
7
+ * Select - A component for dropdown selection
8
+ */
9
+ export const Select: React.FC<SelectProps> = ({
10
+ options = [],
11
+ value,
12
+ onChange,
13
+ onBlur,
14
+ onFocus,
15
+ placeholder = 'Select an option',
16
+ className = '',
17
+ disabled = false,
18
+ required = false,
19
+ id,
20
+ name,
21
+ size = 'md',
22
+ invalid = false,
23
+ valid = false,
24
+ multiple = false,
25
+ ariaLabel,
26
+ ariaDescribedBy,
27
+ }) => {
28
+ const { generateSelectClass } = useSelect({
29
+ size,
30
+ disabled,
31
+ invalid,
32
+ valid,
33
+ });
34
+
35
+ const selectClass = generateSelectClass({
36
+ className,
37
+ size,
38
+ disabled,
39
+ invalid,
40
+ valid,
41
+ });
42
+
43
+ const [isOpen, setIsOpen] = useState(false);
44
+ const [selectedLabel, setSelectedLabel] = useState(placeholder);
45
+ const dropdownRef = useRef<HTMLDivElement>(null);
46
+ const panelRef = useRef<HTMLDivElement>(null);
47
+ const bodyRef = useRef<HTMLDivElement>(null);
48
+ const nativeSelectRef = useRef<HTMLSelectElement>(null);
49
+
50
+ // Update selected label when value changes
51
+ useEffect(() => {
52
+ if (value) {
53
+ const selectedOption = options.find(opt => opt.value === value);
54
+ if (selectedOption) {
55
+ setSelectedLabel(selectedOption.label);
56
+ }
57
+ } else {
58
+ setSelectedLabel(placeholder);
59
+ }
60
+ }, [value, options, placeholder]);
61
+
62
+ // Handle click outside to close dropdown
63
+ useEffect(() => {
64
+ const handleClickOutside = (event: MouseEvent) => {
65
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
66
+ setIsOpen(false);
67
+ if (bodyRef.current) {
68
+ bodyRef.current.style.height = '0px';
69
+ }
70
+ }
71
+ };
72
+
73
+ document.addEventListener('mousedown', handleClickOutside);
74
+ return () => {
75
+ document.removeEventListener('mousedown', handleClickOutside);
76
+ };
77
+ }, []);
78
+
79
+ // Toggle dropdown
80
+ const handleToggle = () => {
81
+ if (!disabled) {
82
+ if (!isOpen && bodyRef.current && panelRef.current) {
83
+ bodyRef.current.style.height = `${panelRef.current.clientHeight}px`;
84
+ } else if (bodyRef.current) {
85
+ bodyRef.current.style.height = '0px';
86
+ }
87
+ setIsOpen(!isOpen);
88
+ }
89
+ };
90
+
91
+ // Handle item selection
92
+ const handleItemClick = (option: { value: string; label: string }) => {
93
+ setSelectedLabel(option.label);
94
+ setIsOpen(false);
95
+ if (bodyRef.current) {
96
+ bodyRef.current.style.height = '0px';
97
+ }
98
+
99
+ if (nativeSelectRef.current) {
100
+ nativeSelectRef.current.value = option.value;
101
+ }
102
+
103
+ if (onChange) {
104
+ // Create a synthetic event
105
+ const event = {
106
+ target: {
107
+ name,
108
+ value: option.value,
109
+ },
110
+ } as React.ChangeEvent<HTMLSelectElement>;
111
+ onChange(event);
112
+ }
113
+ };
114
+
115
+ return (
116
+ <div
117
+ className={`${selectClass} ${isOpen ? SELECT.CLASSES.IS_OPEN : ''}`}
118
+ ref={dropdownRef}
119
+ aria-expanded={isOpen}
120
+ >
121
+ {/* Native select for accessibility and form submission */}
122
+ <select
123
+ ref={nativeSelectRef}
124
+ value={value}
125
+ onChange={onChange}
126
+ onBlur={onBlur}
127
+ onFocus={onFocus}
128
+ disabled={disabled}
129
+ required={required}
130
+ id={id}
131
+ name={name}
132
+ multiple={multiple}
133
+ aria-label={ariaLabel}
134
+ aria-describedby={ariaDescribedBy}
135
+ aria-invalid={invalid}
136
+ style={{ display: 'none' }}
137
+ >
138
+ {placeholder && (
139
+ <option value="" disabled>
140
+ {placeholder}
141
+ </option>
142
+ )}
143
+ {options.map(option => (
144
+ <option key={option.value} value={option.value} disabled={option.disabled}>
145
+ {option.label}
146
+ </option>
147
+ ))}
148
+ </select>
149
+
150
+ {/* Custom Select UI */}
151
+ <div className={SELECT.CLASSES.SELECTED} onClick={handleToggle} aria-disabled={disabled}>
152
+ {selectedLabel}
153
+ </div>
154
+
155
+ <i className={`${SELECT.CLASSES.ICON_CARET} ${SELECT.CLASSES.TOGGLE_ICON}`} />
156
+
157
+ <div className={SELECT.CLASSES.SELECT_BODY} ref={bodyRef} style={{ height: 0 }}>
158
+ <div className={SELECT.CLASSES.SELECT_PANEL} ref={panelRef}>
159
+ <ul className={SELECT.CLASSES.SELECT_ITEMS}>
160
+ {options.map((option, index) => (
161
+ <li
162
+ key={option.value}
163
+ className={SELECT.CLASSES.SELECT_ITEM}
164
+ data-value={option.value}
165
+ onClick={() => !option.disabled && handleItemClick(option)}
166
+ >
167
+ <label htmlFor={`SelectItem${index}`} className="c-checkbox">
168
+ <input
169
+ type="checkbox"
170
+ id={`SelectItem${index}`}
171
+ className="c-checkbox__input c-select__item-input"
172
+ checked={value === option.value}
173
+ readOnly
174
+ disabled={option.disabled}
175
+ />
176
+ <div className="c-select__item-label">{option.label}</div>
177
+ </label>
178
+ </li>
179
+ ))}
180
+ </ul>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ );
185
+ };
186
+
187
+ export type { SelectProps };
188
+
189
+ Select.displayName = 'Select';
190
+
191
+ export default Select;
@@ -0,0 +1,123 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Textarea } from './Textarea';
3
+
4
+ const meta = {
5
+ title: 'Components/Form/Textarea',
6
+ component: Textarea,
7
+ parameters: {
8
+ layout: 'centered',
9
+ },
10
+ argTypes: {
11
+ value: {
12
+ control: 'text',
13
+ description: 'Textarea value',
14
+ },
15
+ placeholder: {
16
+ control: 'text',
17
+ description: 'Placeholder text',
18
+ },
19
+ rows: {
20
+ control: 'number',
21
+ description: 'Number of visible text lines',
22
+ },
23
+ cols: {
24
+ control: 'number',
25
+ description: 'Number of average character widths',
26
+ },
27
+ size: {
28
+ control: { type: 'select' },
29
+ options: ['sm', 'md', 'lg'],
30
+ description: 'Size of the textarea',
31
+ },
32
+ variant: {
33
+ control: { type: 'select' },
34
+ options: ['primary', 'secondary', 'success', 'error', 'warning', 'info'],
35
+ description: 'Color variant of the textarea',
36
+ },
37
+ disabled: {
38
+ control: 'boolean',
39
+ description: 'Whether the textarea is disabled',
40
+ },
41
+ invalid: {
42
+ control: 'boolean',
43
+ description: 'Whether the textarea is invalid',
44
+ },
45
+ valid: {
46
+ control: 'boolean',
47
+ description: 'Whether the textarea is valid',
48
+ },
49
+ },
50
+ } satisfies Meta<typeof Textarea>;
51
+
52
+ export default meta;
53
+ type Story = StoryObj<typeof meta>;
54
+
55
+ // Basic textarea
56
+ export const Basic: Story = {
57
+ args: {
58
+ placeholder: 'Enter text here',
59
+ rows: 4,
60
+ },
61
+ };
62
+
63
+ // With value
64
+ export const WithValue: Story = {
65
+ args: {
66
+ value: 'This is some sample text in the textarea.',
67
+ rows: 4,
68
+ },
69
+ };
70
+
71
+ // Textarea sizes
72
+ export const Sizes: Story = {
73
+ render: () => (
74
+ <div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
75
+ <Textarea size="sm" placeholder="Small textarea" rows={3} />
76
+ <Textarea size="md" placeholder="Medium textarea (default)" rows={3} />
77
+ <Textarea size="lg" placeholder="Large textarea" rows={3} />
78
+ </div>
79
+ ),
80
+ };
81
+
82
+ // Textarea rows
83
+ export const Rows: Story = {
84
+ render: () => (
85
+ <div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
86
+ <Textarea placeholder="2 rows" rows={2} />
87
+ <Textarea placeholder="4 rows" rows={4} />
88
+ <Textarea placeholder="6 rows" rows={6} />
89
+ </div>
90
+ ),
91
+ };
92
+
93
+ // Textarea variants
94
+ export const Variants: Story = {
95
+ render: () => (
96
+ <div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
97
+ <Textarea variant="primary" placeholder="Primary textarea" rows={2} />
98
+ <Textarea variant="secondary" placeholder="Secondary textarea" rows={2} />
99
+ <Textarea variant="success" placeholder="Success textarea" rows={2} />
100
+ <Textarea variant="error" placeholder="Error textarea" rows={2} />
101
+ <Textarea variant="warning" placeholder="Warning textarea" rows={2} />
102
+ <Textarea variant="info" placeholder="Info textarea" rows={2} />
103
+ </div>
104
+ ),
105
+ };
106
+
107
+ // States
108
+ export const States: Story = {
109
+ render: () => (
110
+ <div className="u-d-flex u-flex-column u-gap-3" style={{ width: '300px' }}>
111
+ <Textarea placeholder="Default textarea" rows={2} />
112
+ <Textarea placeholder="Disabled textarea" disabled rows={2} />
113
+ <Textarea placeholder="Valid textarea" valid rows={2} />
114
+ <Textarea placeholder="Invalid textarea" invalid rows={2} />
115
+ <Textarea
116
+ placeholder="Read-only textarea"
117
+ readOnly
118
+ value="This content cannot be edited"
119
+ rows={2}
120
+ />
121
+ </div>
122
+ ),
123
+ };
@@ -0,0 +1,78 @@
1
+ import React from 'react';
2
+ import { TextareaProps } from '../../lib/types/components';
3
+ import { useTextarea } from '../../lib/composables/useTextarea';
4
+
5
+ /**
6
+ * Textarea - A component for multiline text input
7
+ */
8
+ export const Textarea: React.FC<TextareaProps> = ({
9
+ value,
10
+ onChange,
11
+ onBlur,
12
+ onFocus,
13
+ placeholder,
14
+ className = '',
15
+ disabled = false,
16
+ required = false,
17
+ readOnly = false,
18
+ id,
19
+ name,
20
+ rows = 4,
21
+ cols,
22
+ maxLength,
23
+ minLength,
24
+ size = 'md',
25
+ variant,
26
+ invalid = false,
27
+ valid = false,
28
+ autoFocus = false,
29
+ ariaLabel,
30
+ ariaDescribedBy,
31
+ }) => {
32
+ const { generateTextareaClass } = useTextarea({
33
+ size,
34
+ variant,
35
+ disabled,
36
+ invalid,
37
+ valid,
38
+ });
39
+
40
+ const textareaClass = generateTextareaClass({
41
+ className,
42
+ size,
43
+ variant,
44
+ disabled,
45
+ invalid,
46
+ valid,
47
+ });
48
+
49
+ return (
50
+ <textarea
51
+ className={textareaClass}
52
+ value={value}
53
+ onChange={onChange}
54
+ onBlur={onBlur}
55
+ onFocus={onFocus}
56
+ placeholder={placeholder}
57
+ disabled={disabled}
58
+ required={required}
59
+ readOnly={readOnly}
60
+ id={id}
61
+ name={name}
62
+ rows={rows}
63
+ cols={cols}
64
+ maxLength={maxLength}
65
+ minLength={minLength}
66
+ autoFocus={autoFocus}
67
+ aria-label={ariaLabel}
68
+ aria-describedby={ariaDescribedBy}
69
+ aria-invalid={invalid}
70
+ />
71
+ );
72
+ };
73
+
74
+ export type { TextareaProps };
75
+
76
+ Textarea.displayName = 'Textarea';
77
+
78
+ export default Textarea;
@@ -0,0 +1,7 @@
1
+ export { default as Form } from './Form';
2
+ export { default as FormGroup } from './FormGroup';
3
+ export { default as Input } from './Input';
4
+ export { default as Select } from './Select';
5
+ export { default as Checkbox } from './Checkbox';
6
+ export { default as Radio } from './Radio';
7
+ export { default as Textarea } from './Textarea';
@@ -0,0 +1,295 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { HERO } from '../../lib/constants/components';
3
+ import { Button } from '../Button/Button';
4
+ import { Hero } from './Hero';
5
+
6
+ // Extract class names without the leading dots
7
+ const HERO_CLASS = HERO.SELECTORS.HERO.replace('.', '');
8
+ const CONTAINER_CLASS = HERO.SELECTORS.CONTAINER.replace('.', '');
9
+ const GRID_CLASS = HERO.SELECTORS.GRID.replace('.', '');
10
+ const CONTENT_CLASS = HERO.SELECTORS.CONTENT.replace('.', '');
11
+ const SUBTITLE_CLASS = HERO.SELECTORS.SUBTITLE.replace('.', '');
12
+ const TITLE_CLASS = HERO.SELECTORS.TITLE.replace('.', '');
13
+ const TEXT_CLASS = HERO.SELECTORS.TEXT.replace('.', '');
14
+ const ACTIONS_CLASS = HERO.SELECTORS.ACTIONS.replace('.', '');
15
+ const IMAGE_CLASS = HERO.SELECTORS.IMAGE.replace('.', '');
16
+ const BG_CLASS = HERO.SELECTORS.BG.replace('.', '');
17
+ const BG_IMAGE_CLASS = HERO.SELECTORS.BG_IMAGE.replace('.', '');
18
+ const OVERLAY_CLASS = HERO.SELECTORS.OVERLAY.replace('.', '');
19
+ const IMAGE_WRAPPER_CLASS = HERO.SELECTORS.IMAGE_WRAPPER.replace('.', '');
20
+ const CENTER_CLASS = HERO.CLASSES.CENTER;
21
+ const RIGHT_CLASS = HERO.CLASSES.RIGHT;
22
+ const LEFT_CLASS = HERO.CLASSES.LEFT;
23
+ const FULL_VH_CLASS = HERO.CLASSES.FULL_VH;
24
+
25
+ const meta = {
26
+ title: 'Components/Hero',
27
+ component: Hero,
28
+ parameters: {
29
+ layout: 'padded',
30
+ },
31
+ argTypes: {
32
+ title: {
33
+ control: 'text',
34
+ description: 'Hero title',
35
+ },
36
+ subtitle: {
37
+ control: 'text',
38
+ description: 'Hero subtitle',
39
+ },
40
+ text: {
41
+ control: 'text',
42
+ description: 'Hero text content',
43
+ },
44
+ imageSrc: {
45
+ control: 'text',
46
+ description: 'Image source URL',
47
+ },
48
+ imageAlt: {
49
+ control: 'text',
50
+ description: 'Image alt text',
51
+ },
52
+ alignment: {
53
+ control: { type: 'select', options: ['left', 'center', 'right'] },
54
+ description: 'Content alignment',
55
+ },
56
+ backgroundImageSrc: {
57
+ control: 'text',
58
+ description: 'Background image source URL',
59
+ },
60
+ showOverlay: {
61
+ control: 'boolean',
62
+ description: 'Show background overlay',
63
+ },
64
+ fullViewportHeight: {
65
+ control: 'boolean',
66
+ description: 'Make hero full viewport height',
67
+ },
68
+ imageColSize: {
69
+ control: { type: 'range', min: 1, max: 12, step: 1 },
70
+ description: 'Image column size (1-12)',
71
+ },
72
+ contentColSize: {
73
+ control: { type: 'range', min: 1, max: 12, step: 1 },
74
+ description: 'Content column size (1-12)',
75
+ },
76
+ contentWidth: {
77
+ control: 'text',
78
+ description: 'Custom width for the hero content (e.g., "800px", "50%")',
79
+ table: {
80
+ defaultValue: { summary: '536px' },
81
+ },
82
+ },
83
+ parallax: {
84
+ control: 'boolean',
85
+ description: 'Enable parallax effect on background image',
86
+ },
87
+ parallaxIntensity: {
88
+ control: { type: 'range', min: 0, max: 1, step: 0.1 },
89
+ description: 'Parallax effect intensity (0-1)',
90
+ },
91
+ videoBackground: {
92
+ control: 'text',
93
+ description: 'Video background URL',
94
+ },
95
+ videoOptions: {
96
+ control: 'object',
97
+ description: 'Video background options',
98
+ },
99
+ },
100
+ } satisfies Meta<typeof Hero>;
101
+
102
+ export default meta;
103
+ type Story = StoryObj<typeof meta>;
104
+
105
+ // Helper for button actions
106
+ const primaryActionButtons = (
107
+ <>
108
+ <Button label="Get Started" variant="primary" />
109
+ <Button label="Learn More" variant="outline-secondary" />
110
+ </>
111
+ );
112
+
113
+ const showcaseActionButtons = (
114
+ <>
115
+ <Button label="Explore Components" variant="primary" />
116
+ <Button label="View Documentation" variant="outline-secondary" />
117
+ </>
118
+ );
119
+
120
+ const demoText =
121
+ 'Build modern, responsive interfaces with a clean, consistent design language. Our component library helps you create beautiful user experiences with minimal effort.';
122
+
123
+ const showcaseText =
124
+ 'Atomix provides a complete design system with powerful, flexible components that follow best practices for accessibility, performance, and user experience.';
125
+
126
+ /**
127
+ * Default Hero component with right-aligned content and image
128
+ */
129
+ export const Default: Story = {
130
+ args: {
131
+ title: 'Modern UI Components for Developers',
132
+ subtitle: 'Atomix Design System',
133
+ text: demoText,
134
+ imageSrc: 'https://picsum.photos/id/0/712/500',
135
+ imageAlt: 'Developer working with code',
136
+ alignment: 'right',
137
+ actions: primaryActionButtons,
138
+ },
139
+ };
140
+
141
+ /**
142
+ * Hero with left-aligned content and image on right
143
+ */
144
+ export const LeftAligned: Story = {
145
+ args: {
146
+ ...Default.args,
147
+ title: 'Crafted for Developer Experience',
148
+ alignment: 'left',
149
+ imageSrc: 'https://picsum.photos/id/3/712/500',
150
+ },
151
+ };
152
+
153
+ /**
154
+ * Hero with center-aligned content and image below
155
+ */
156
+ export const CenterAligned: Story = {
157
+ args: {
158
+ ...Default.args,
159
+ title: 'Build Faster with Atomix',
160
+ text: 'Our components follow best practices for accessibility, performance, and responsive design. Start building beautiful interfaces in minutes.',
161
+ alignment: 'center',
162
+ imageSrc: 'https://picsum.photos/id/1/1024/300',
163
+ },
164
+ };
165
+
166
+ /**
167
+ * Hero with background image
168
+ */
169
+ export const WithBackgroundImage: Story = {
170
+ args: {
171
+ ...Default.args,
172
+ title: 'Powerful Design System',
173
+ text: showcaseText,
174
+ actions: showcaseActionButtons,
175
+ backgroundImageSrc: 'https://picsum.photos/id/24/1920/1080',
176
+ showOverlay: true,
177
+ },
178
+ };
179
+
180
+ /**
181
+ * Hero with background image and no foreground image
182
+ */
183
+ export const BackgroundImageOnly: Story = {
184
+ args: {
185
+ ...Default.args,
186
+ title: 'Beautiful & Accessible Components',
187
+ text: 'Atomix is built with accessibility in mind, ensuring your applications work for everyone. Our components are fully responsive and follow WAI-ARIA guidelines.',
188
+ imageSrc: undefined,
189
+ backgroundImageSrc: 'https://picsum.photos/id/1067/1920/1080',
190
+ showOverlay: true,
191
+ alignment: 'center',
192
+ actions: showcaseActionButtons,
193
+ contentWidth: '800px',
194
+ },
195
+ };
196
+
197
+ /**
198
+ * Full viewport height hero
199
+ */
200
+ export const FullViewportHeight: Story = {
201
+ args: {
202
+ ...BackgroundImageOnly.args,
203
+ title: 'Atomix. Build Once. Use Everywhere.',
204
+ text: 'A flexible, scalable design system that works seamlessly across all devices and platforms.',
205
+ fullViewportHeight: true,
206
+ },
207
+ };
208
+
209
+ /**
210
+ * Left-aligned content with background image
211
+ */
212
+ export const LeftAlignedWithBackground: Story = {
213
+ args: {
214
+ ...WithBackgroundImage.args,
215
+ title: 'Customizable & Extensible',
216
+ text: 'Easily customize components to match your brand. Built with a flexible architecture that allows for easy extension and adaptation.',
217
+ alignment: 'left',
218
+ },
219
+ };
220
+
221
+ /**
222
+ * Center-aligned content with background and foreground image
223
+ */
224
+ export const CenterAlignedWithImageBackground: Story = {
225
+ args: {
226
+ ...WithBackgroundImage.args,
227
+ title: 'Based on Modern Standards',
228
+ text: 'Built with the latest technologies like React, TypeScript, and SCSS. Follows BEM, ITCSS, and OOCSS methodologies for clean, maintainable CSS.',
229
+ alignment: 'center',
230
+ imageSrc: 'https://picsum.photos/id/160/1312/280',
231
+ },
232
+ };
233
+
234
+ /**
235
+ * Center-aligned content with custom content width
236
+ */
237
+ export const CustomContentWidth: Story = {
238
+ args: {
239
+ ...CenterAligned.args,
240
+ title: 'Hero with Custom Content Width',
241
+ text: 'This hero component has a custom content width set through the contentWidth prop, which sets the --atomix-hero-content-width CSS variable.',
242
+ contentWidth: '800px',
243
+ },
244
+ };
245
+
246
+ /**
247
+ * Hero with parallax background effect
248
+ */
249
+ export const WithParallaxEffect: Story = {
250
+ args: {
251
+ ...BackgroundImageOnly.args,
252
+ title: 'Parallax Background Effect',
253
+ text: 'This hero features a parallax scrolling effect on the background image, creating depth and visual interest as the user scrolls.',
254
+ backgroundImageSrc: 'https://picsum.photos/id/1015/1920/1080',
255
+ parallax: true,
256
+ parallaxIntensity: 0.5,
257
+ fullViewportHeight: true,
258
+ },
259
+ };
260
+
261
+ /**
262
+ * Hero with video background
263
+ */
264
+ export const WithVideoBackground: Story = {
265
+ args: {
266
+ title: 'Video Background Hero',
267
+ subtitle: 'Dynamic & Engaging',
268
+ text: 'Add motion and visual interest to your hero sections with video backgrounds. Perfect for creating immersive landing pages.',
269
+ alignment: 'center',
270
+ videoBackground: 'https://storage.googleapis.com/coverr-main/mp4/Mt_Baker.mp4',
271
+ videoOptions: {
272
+ autoplay: true,
273
+ loop: true,
274
+ muted: true,
275
+ posterUrl: 'https://picsum.photos/id/1018/1920/1080',
276
+ },
277
+ showOverlay: true,
278
+ actions: showcaseActionButtons,
279
+ contentWidth: '800px',
280
+ },
281
+ };
282
+
283
+ /**
284
+ * Hero with video background and foreground image
285
+ */
286
+ export const VideoBackgroundWithImage: Story = {
287
+ args: {
288
+ ...WithVideoBackground.args,
289
+ title: 'Complete Media Support',
290
+ text: 'Combine video backgrounds with foreground images for rich, layered visual presentations.',
291
+ alignment: 'left',
292
+ imageSrc: 'https://picsum.photos/id/180/712/500',
293
+ imageAlt: 'Product showcase',
294
+ },
295
+ };