@shohojdhara/atomix 0.1.30 → 0.2.2

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 (481) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/LICENSE +0 -0
  3. package/README.md +128 -43
  4. package/dist/atomix.css +15025 -0
  5. package/dist/atomix.min.css +15 -0
  6. package/dist/index.d.ts +6459 -1748
  7. package/dist/index.esm.js +17559 -8364
  8. package/dist/index.esm.js.map +1 -1
  9. package/dist/index.js +17603 -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 +14677 -0
  14. package/dist/themes/boomdevs.min.css +405 -0
  15. package/dist/themes/esrar.css +16870 -0
  16. package/dist/themes/esrar.min.css +189 -0
  17. package/dist/themes/mashroom.css +29578 -0
  18. package/dist/themes/mashroom.min.css +403 -0
  19. package/dist/themes/shaj-default.css +15702 -0
  20. package/dist/themes/shaj-default.min.css +500 -0
  21. package/dist/themes/yabai.css +15207 -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/Footer/Footer.stories.tsx +388 -0
  102. package/src/components/Footer/Footer.tsx +197 -0
  103. package/src/components/Footer/FooterLink.tsx +72 -0
  104. package/src/components/Footer/FooterSection.tsx +87 -0
  105. package/src/components/Footer/FooterSocialLink.tsx +117 -0
  106. package/src/components/Footer/README.md +261 -0
  107. package/src/components/Footer/index.ts +13 -0
  108. package/src/components/Form/Checkbox.stories.tsx +76 -0
  109. package/src/components/Form/Checkbox.tsx +69 -0
  110. package/src/components/Form/Form.stories.tsx +497 -0
  111. package/src/components/Form/Form.tsx +46 -0
  112. package/src/components/Form/FormGroup.stories.tsx +162 -0
  113. package/src/components/Form/FormGroup.tsx +53 -0
  114. package/src/components/Form/Input.stories.tsx +106 -0
  115. package/src/components/Form/Input.tsx +87 -0
  116. package/src/components/Form/Radio.stories.tsx +94 -0
  117. package/src/components/Form/Radio.tsx +65 -0
  118. package/src/components/Form/Select.stories.tsx +151 -0
  119. package/src/components/Form/Select.tsx +191 -0
  120. package/src/components/Form/Textarea.stories.tsx +123 -0
  121. package/src/components/Form/Textarea.tsx +78 -0
  122. package/src/components/Form/index.ts +7 -0
  123. package/src/components/Hero/Hero.stories.tsx +295 -0
  124. package/src/components/Hero/Hero.tsx +175 -0
  125. package/src/components/Hero/index.ts +6 -0
  126. package/src/components/Icon/Icon.tsx +87 -0
  127. package/src/components/Icon/index.ts +2 -0
  128. package/src/components/List/List.stories.tsx +122 -0
  129. package/src/components/List/List.tsx +35 -0
  130. package/src/components/List/ListGroup.tsx +35 -0
  131. package/src/components/List/index.ts +2 -0
  132. package/src/components/Messages/Messages.stories.tsx +160 -0
  133. package/src/components/Messages/Messages.tsx +172 -0
  134. package/src/components/Messages/index.ts +3 -0
  135. package/src/components/Modal/Modal.stories.tsx +284 -0
  136. package/src/components/Modal/Modal.tsx +198 -0
  137. package/src/components/Modal/README.md +169 -0
  138. package/src/components/Modal/index.ts +1 -0
  139. package/src/components/Navigation/Menu/MegaMenu.tsx +109 -0
  140. package/src/components/Navigation/Menu/Menu.stories.tsx +339 -0
  141. package/src/components/Navigation/Menu/Menu.tsx +111 -0
  142. package/src/components/Navigation/Nav/Nav.stories.tsx +456 -0
  143. package/src/components/Navigation/Nav/Nav.tsx +51 -0
  144. package/src/components/Navigation/Nav/NavDropdown.tsx +105 -0
  145. package/src/components/Navigation/Nav/NavItem.tsx +168 -0
  146. package/src/components/Navigation/Navbar/Navbar.stories.tsx +569 -0
  147. package/src/components/Navigation/Navbar/Navbar.tsx +150 -0
  148. package/src/components/Navigation/README.md +314 -0
  149. package/src/components/Navigation/SideMenu/SideMenu.README.md +494 -0
  150. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +609 -0
  151. package/src/components/Navigation/SideMenu/SideMenu.tsx +101 -0
  152. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +103 -0
  153. package/src/components/Navigation/SideMenu/SideMenuList.tsx +41 -0
  154. package/src/components/Navigation/index.ts +23 -0
  155. package/src/components/Pagination/Pagination.stories.tsx +188 -0
  156. package/src/components/Pagination/Pagination.tsx +162 -0
  157. package/src/components/Pagination/index.ts +1 -0
  158. package/src/components/PhotoViewer/PhotoViewer.stories.tsx +397 -0
  159. package/src/components/PhotoViewer/PhotoViewer.tsx +246 -0
  160. package/src/components/PhotoViewer/PhotoViewerHeader.tsx +184 -0
  161. package/src/components/PhotoViewer/PhotoViewerImage.tsx +173 -0
  162. package/src/components/PhotoViewer/PhotoViewerInfo.tsx +91 -0
  163. package/src/components/PhotoViewer/PhotoViewerNavigation.tsx +85 -0
  164. package/src/components/PhotoViewer/PhotoViewerThumbnails.tsx +63 -0
  165. package/src/components/PhotoViewer/README.md +358 -0
  166. package/src/components/PhotoViewer/examples/ImageGallery.tsx +187 -0
  167. package/src/components/PhotoViewer/examples/SimpleGallery.tsx +73 -0
  168. package/src/components/PhotoViewer/examples/index.ts +2 -0
  169. package/src/components/PhotoViewer/index.ts +14 -0
  170. package/src/components/Popover/Popover.stories.tsx +143 -0
  171. package/src/components/Popover/Popover.tsx +137 -0
  172. package/src/components/Popover/index.ts +5 -0
  173. package/src/components/Popover/readme.md +120 -0
  174. package/src/components/ProductReview/ProductReview.stories.tsx +88 -0
  175. package/src/components/ProductReview/ProductReview.tsx +169 -0
  176. package/src/components/ProductReview/index.ts +3 -0
  177. package/src/components/Progress/Progress.stories.tsx +75 -0
  178. package/src/components/Progress/Progress.tsx +45 -0
  179. package/src/components/Progress/index.ts +1 -0
  180. package/src/components/Rating/Rating.stories.tsx +109 -0
  181. package/src/components/Rating/Rating.tsx +286 -0
  182. package/src/components/Rating/index.ts +6 -0
  183. package/src/components/River/River.stories.tsx +230 -0
  184. package/src/components/River/River.tsx +134 -0
  185. package/src/components/River/index.ts +2 -0
  186. package/src/components/SectionIntro/SectionIntro.stories.tsx +143 -0
  187. package/src/components/SectionIntro/SectionIntro.tsx +182 -0
  188. package/src/components/SectionIntro/index.ts +3 -0
  189. package/src/components/Slider/Slider.stories.tsx +825 -0
  190. package/src/components/Slider/Slider.tsx +227 -0
  191. package/src/components/Slider/index.ts +24 -0
  192. package/src/components/Spinner/Spinner.stories.tsx +65 -0
  193. package/src/components/Spinner/Spinner.tsx +36 -0
  194. package/src/components/Spinner/index.ts +2 -0
  195. package/src/components/Steps/Steps.stories.tsx +158 -0
  196. package/src/components/Steps/Steps.tsx +115 -0
  197. package/src/components/Steps/index.ts +3 -0
  198. package/src/components/Tab/Tab.stories.tsx +129 -0
  199. package/src/components/Tab/Tab.tsx +111 -0
  200. package/src/components/Tab/index.ts +2 -0
  201. package/src/components/Testimonial/Testimonial.stories.tsx +180 -0
  202. package/src/components/Testimonial/Testimonial.tsx +138 -0
  203. package/src/components/Testimonial/index.ts +3 -0
  204. package/src/components/Todo/Todo.stories.tsx +103 -0
  205. package/src/components/Todo/Todo.tsx +158 -0
  206. package/src/components/Todo/index.ts +1 -0
  207. package/src/components/Toggle/Toggle.stories.tsx +49 -0
  208. package/src/components/Toggle/Toggle.tsx +84 -0
  209. package/src/components/Toggle/index.ts +2 -0
  210. package/src/components/Tooltip/Tooltip.stories.tsx +115 -0
  211. package/src/components/Tooltip/Tooltip.tsx +150 -0
  212. package/src/components/Tooltip/index.ts +3 -0
  213. package/src/components/Upload/Upload.stories.tsx +220 -0
  214. package/src/components/Upload/Upload.tsx +354 -0
  215. package/src/components/Upload/index.ts +3 -0
  216. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +484 -0
  217. package/src/components/VideoPlayer/VideoPlayer.tsx +574 -0
  218. package/src/components/VideoPlayer/index.ts +7 -0
  219. package/src/components/index.ts +124 -0
  220. package/src/layouts/Grid/Container.tsx +58 -0
  221. package/src/layouts/Grid/Grid.stories.tsx +928 -0
  222. package/src/layouts/Grid/Grid.tsx +68 -0
  223. package/src/layouts/Grid/GridCol.tsx +161 -0
  224. package/src/layouts/Grid/README.md +108 -0
  225. package/src/layouts/Grid/Row.tsx +70 -0
  226. package/src/layouts/Grid/index.ts +8 -0
  227. package/src/layouts/MasonryGrid/MasonryGrid.stories.tsx +387 -0
  228. package/src/layouts/MasonryGrid/MasonryGrid.tsx +408 -0
  229. package/src/layouts/MasonryGrid/MasonryGridItem.tsx +44 -0
  230. package/src/layouts/MasonryGrid/README.md +117 -0
  231. package/src/layouts/MasonryGrid/index.ts +4 -0
  232. package/src/layouts/index.ts +7 -0
  233. package/src/lib/README.md +89 -0
  234. package/src/lib/composables/index.ts +63 -0
  235. package/src/lib/composables/useAccordion.ts +129 -0
  236. package/src/lib/composables/useAmbientMode.ts +90 -0
  237. package/src/lib/composables/useBadge.ts +42 -0
  238. package/src/lib/composables/useBarChart.ts +365 -0
  239. package/src/lib/composables/useBlock.ts +56 -0
  240. package/src/lib/composables/useBreadcrumb.ts +81 -0
  241. package/src/lib/composables/useButton.ts +59 -0
  242. package/src/lib/composables/useCallout.ts +55 -0
  243. package/src/lib/composables/useCard.ts +155 -0
  244. package/src/lib/composables/useChart.ts +1082 -0
  245. package/src/lib/composables/useChartAnalytics.ts +505 -0
  246. package/src/lib/composables/useChartData.ts +38 -0
  247. package/src/lib/composables/useChartExport.ts +392 -0
  248. package/src/lib/composables/useChartInteraction.ts +34 -0
  249. package/src/lib/composables/useChartInteractions.ts +123 -0
  250. package/src/lib/composables/useChartPerformance.ts +323 -0
  251. package/src/lib/composables/useChartScale.ts +48 -0
  252. package/src/lib/composables/useChartToolbar.ts +532 -0
  253. package/src/lib/composables/useCheckbox.ts +70 -0
  254. package/src/lib/composables/useDataTable.ts +208 -0
  255. package/src/lib/composables/useDatePicker.ts +564 -0
  256. package/src/lib/composables/useDropdown.ts +272 -0
  257. package/src/lib/composables/useEdgePanel.ts +261 -0
  258. package/src/lib/composables/useFooter.ts +85 -0
  259. package/src/lib/composables/useForm.ts +62 -0
  260. package/src/lib/composables/useFormGroup.ts +51 -0
  261. package/src/lib/composables/useHero.ts +250 -0
  262. package/src/lib/composables/useInput.ts +58 -0
  263. package/src/lib/composables/useLineChart.ts +319 -0
  264. package/src/lib/composables/useMessages.ts +77 -0
  265. package/src/lib/composables/useModal.ts +110 -0
  266. package/src/lib/composables/useNavbar.ts +288 -0
  267. package/src/lib/composables/usePagination.ts +101 -0
  268. package/src/lib/composables/usePhotoViewer.ts +937 -0
  269. package/src/lib/composables/usePieChart.ts +362 -0
  270. package/src/lib/composables/usePopover.ts +354 -0
  271. package/src/lib/composables/useProgress.ts +74 -0
  272. package/src/lib/composables/useRadio.ts +47 -0
  273. package/src/lib/composables/useRating.ts +174 -0
  274. package/src/lib/composables/useRiver.ts +205 -0
  275. package/src/lib/composables/useSelect.ts +52 -0
  276. package/src/lib/composables/useSideMenu.ts +197 -0
  277. package/src/lib/composables/useSlider.ts +526 -0
  278. package/src/lib/composables/useSpinner.ts +42 -0
  279. package/src/lib/composables/useTextarea.ts +55 -0
  280. package/src/lib/composables/useTodo.ts +141 -0
  281. package/src/lib/composables/useVideoPlayer.ts +398 -0
  282. package/src/lib/constants/components.ts +1518 -0
  283. package/src/lib/constants/index.ts +4 -0
  284. package/src/lib/index.ts +11 -0
  285. package/src/lib/types/components.ts +5020 -0
  286. package/src/lib/types/index.ts +2 -0
  287. package/src/lib/utils/dom.ts +41 -0
  288. package/src/lib/utils/icons.ts +74 -0
  289. package/src/lib/utils/index.ts +55 -0
  290. package/src/lib/utils/useForkRef.test.tsx +64 -0
  291. package/src/lib/utils/useForkRef.ts +36 -0
  292. package/src/lib/utils.test.ts +14 -0
  293. package/src/styles/01-settings/_index.scss +3 -0
  294. package/src/styles/01-settings/_settings.accordion.scss +22 -19
  295. package/src/styles/01-settings/_settings.animations.scss +5 -5
  296. package/src/styles/01-settings/_settings.avatar-group.scss +7 -4
  297. package/src/styles/01-settings/_settings.avatar.scss +19 -20
  298. package/src/styles/01-settings/_settings.background.scss +9 -0
  299. package/src/styles/01-settings/_settings.badge.scss +15 -9
  300. package/src/styles/01-settings/_settings.block.scss +11 -0
  301. package/src/styles/01-settings/_settings.border-radius.scss +12 -9
  302. package/src/styles/01-settings/_settings.border.scss +4 -1
  303. package/src/styles/01-settings/_settings.box-shadow.scss +1 -1
  304. package/src/styles/01-settings/_settings.breadcrumb.scss +16 -9
  305. package/src/styles/01-settings/_settings.breakpoints.scss +0 -0
  306. package/src/styles/01-settings/_settings.btn-group.scss +4 -1
  307. package/src/styles/01-settings/_settings.button.scss +19 -21
  308. package/src/styles/01-settings/_settings.callout.scss +42 -24
  309. package/src/styles/01-settings/_settings.card.scss +13 -11
  310. package/src/styles/01-settings/_settings.chart.scss +199 -0
  311. package/src/styles/01-settings/_settings.checkbox-group.scss +5 -2
  312. package/src/styles/01-settings/_settings.checkbox.scss +10 -4
  313. package/src/styles/01-settings/_settings.color-mode.scss +0 -0
  314. package/src/styles/01-settings/_settings.colors.scss +20 -0
  315. package/src/styles/01-settings/_settings.config.scss +1 -1
  316. package/src/styles/01-settings/_settings.countdown.scss +6 -4
  317. package/src/styles/01-settings/_settings.data-table.scss +0 -0
  318. package/src/styles/01-settings/_settings.datepicker.scss +0 -0
  319. package/src/styles/01-settings/_settings.dropdown.scss +9 -7
  320. package/src/styles/01-settings/_settings.edge-panel.scss +3 -2
  321. package/src/styles/01-settings/_settings.fonts.scss +1 -1
  322. package/src/styles/01-settings/_settings.footer.scss +125 -0
  323. package/src/styles/01-settings/_settings.form-group.scss +3 -1
  324. package/src/styles/01-settings/_settings.form.scss +4 -2
  325. package/src/styles/01-settings/_settings.grid.scss +3 -3
  326. package/src/styles/01-settings/_settings.hero.scss +10 -8
  327. package/src/styles/01-settings/_settings.input.scss +9 -7
  328. package/src/styles/01-settings/_settings.link.scss +0 -0
  329. package/src/styles/01-settings/_settings.list-group.scss +4 -2
  330. package/src/styles/01-settings/_settings.list.scss +4 -2
  331. package/src/styles/01-settings/_settings.maps.scss +43 -8
  332. package/src/styles/01-settings/_settings.masonry-grid.scss +0 -0
  333. package/src/styles/01-settings/_settings.menu.scss +10 -8
  334. package/src/styles/01-settings/_settings.messages.scss +19 -17
  335. package/src/styles/01-settings/_settings.modal.scss +7 -5
  336. package/src/styles/01-settings/_settings.nav.scss +6 -4
  337. package/src/styles/01-settings/_settings.navbar.scss +8 -5
  338. package/src/styles/01-settings/_settings.pagination.scss +5 -3
  339. package/src/styles/01-settings/_settings.photoviewer.scss +89 -23
  340. package/src/styles/01-settings/_settings.popover.scss +6 -4
  341. package/src/styles/01-settings/_settings.position.scss +0 -0
  342. package/src/styles/01-settings/_settings.progress.scss +0 -0
  343. package/src/styles/01-settings/_settings.rating.scss +5 -3
  344. package/src/styles/01-settings/_settings.river.scss +8 -6
  345. package/src/styles/01-settings/_settings.sectionintro.scss +8 -6
  346. package/src/styles/01-settings/_settings.select.scss +7 -5
  347. package/src/styles/01-settings/_settings.side-menu.scss +15 -13
  348. package/src/styles/01-settings/_settings.skeleton.scss +0 -0
  349. package/src/styles/01-settings/_settings.slider.scss +59 -0
  350. package/src/styles/01-settings/_settings.spacing.scss +15 -3
  351. package/src/styles/01-settings/_settings.spinner.scss +0 -0
  352. package/src/styles/01-settings/_settings.steps.scss +8 -6
  353. package/src/styles/01-settings/_settings.tabs.scss +11 -9
  354. package/src/styles/01-settings/_settings.testimonials.scss +6 -4
  355. package/src/styles/01-settings/_settings.todo.scss +0 -0
  356. package/src/styles/01-settings/_settings.toggle.scss +4 -2
  357. package/src/styles/01-settings/_settings.tooltip.scss +5 -3
  358. package/src/styles/01-settings/_settings.typography.scss +2 -0
  359. package/src/styles/01-settings/_settings.upload.scss +22 -20
  360. package/src/styles/01-settings/_settings.video-player.scss +64 -0
  361. package/src/styles/01-settings/_settings.z-layers.scss +0 -0
  362. package/src/styles/02-tools/_index.scss +1 -0
  363. package/src/styles/02-tools/_tools.animations.scss +82 -0
  364. package/src/styles/02-tools/_tools.background.scss +85 -0
  365. package/src/styles/02-tools/_tools.border-radius.scss +0 -0
  366. package/src/styles/02-tools/_tools.breakpoints.scss +0 -0
  367. package/src/styles/02-tools/_tools.button.scss +5 -0
  368. package/src/styles/02-tools/_tools.clearfix.scss +0 -0
  369. package/src/styles/02-tools/_tools.color-functions.scss +0 -0
  370. package/src/styles/02-tools/_tools.color-mode.scss +1 -1
  371. package/src/styles/02-tools/_tools.component.scss +479 -0
  372. package/src/styles/02-tools/_tools.event.scss +0 -0
  373. package/src/styles/02-tools/_tools.grid.scss +0 -0
  374. package/src/styles/02-tools/_tools.hidden-visually.scss +0 -0
  375. package/src/styles/02-tools/_tools.hidden.scss +0 -0
  376. package/src/styles/02-tools/_tools.map-loop.scss +0 -0
  377. package/src/styles/02-tools/_tools.media-queries.scss +0 -0
  378. package/src/styles/02-tools/_tools.object-fit.scss +0 -0
  379. package/src/styles/02-tools/_tools.placeholder.scss +0 -0
  380. package/src/styles/02-tools/_tools.rem.scss +19 -2
  381. package/src/styles/02-tools/_tools.size.scss +0 -0
  382. package/src/styles/02-tools/_tools.spacing.scss +0 -0
  383. package/src/styles/02-tools/_tools.to-rgb.scss +0 -0
  384. package/src/styles/02-tools/_tools.transition.scss +0 -0
  385. package/src/styles/02-tools/_tools.utilities.scss +0 -0
  386. package/src/styles/02-tools/_tools.utility-api.scss +55 -28
  387. package/src/styles/03-generic/_generic.fonts.scss +0 -0
  388. package/src/styles/03-generic/_generic.reset.scss +0 -0
  389. package/src/styles/03-generic/_generic.root.scss +19 -3
  390. package/src/styles/03-generic/_generic.selection.scss +0 -0
  391. package/src/styles/03-generic/_index.scss +0 -0
  392. package/src/styles/04-elements/_elements.all.scss +0 -0
  393. package/src/styles/04-elements/_elements.body.scss +24 -0
  394. package/src/styles/04-elements/_elements.heading.scss +0 -0
  395. package/src/styles/04-elements/_elements.html.scss +0 -0
  396. package/src/styles/04-elements/_elements.links.scss +0 -0
  397. package/src/styles/04-elements/_index.scss +0 -0
  398. package/src/styles/05-objects/_index.scss +1 -0
  399. package/src/styles/05-objects/_objects.block.scss +122 -0
  400. package/src/styles/05-objects/_objects.container.scss +14 -10
  401. package/src/styles/05-objects/_objects.grid.scss +0 -0
  402. package/src/styles/05-objects/_objects.masonry-grid.scss +0 -0
  403. package/src/styles/06-components/_components.accordion.scss +10 -4
  404. package/src/styles/06-components/_components.avatar-group.scss +2 -1
  405. package/src/styles/06-components/_components.avatar.scss +2 -1
  406. package/src/styles/06-components/_components.badge.scss +11 -10
  407. package/src/styles/06-components/_components.breadcrumb.scss +2 -1
  408. package/src/styles/06-components/_components.btn-group.scss +0 -0
  409. package/src/styles/06-components/_components.button.scss +4 -3
  410. package/src/styles/06-components/_components.callout.scss +5 -3
  411. package/src/styles/06-components/_components.card.scss +4 -3
  412. package/src/styles/06-components/_components.chart.scss +2103 -0
  413. package/src/styles/06-components/_components.checkbox-group.scss +0 -0
  414. package/src/styles/06-components/_components.checkbox.scss +2 -1
  415. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -2
  416. package/src/styles/06-components/_components.countdown.scss +2 -1
  417. package/src/styles/06-components/_components.data-table.scss +7 -6
  418. package/src/styles/06-components/_components.datepicker.scss +2 -1
  419. package/src/styles/06-components/_components.dropdown.scss +4 -3
  420. package/src/styles/06-components/_components.edge-panel.scss +4 -3
  421. package/src/styles/06-components/_components.footer.scss +825 -0
  422. package/src/styles/06-components/_components.form-group.scss +1 -0
  423. package/src/styles/06-components/_components.form.scss +0 -0
  424. package/src/styles/06-components/_components.hero.scss +4 -2
  425. package/src/styles/06-components/_components.icon.scss +2 -2
  426. package/src/styles/06-components/_components.image-gallery.scss +1 -0
  427. package/src/styles/06-components/_components.input.scss +2 -1
  428. package/src/styles/06-components/_components.list-group.scss +3 -2
  429. package/src/styles/06-components/_components.list.scss +2 -1
  430. package/src/styles/06-components/_components.menu.scss +5 -4
  431. package/src/styles/06-components/_components.messages.scss +8 -7
  432. package/src/styles/06-components/_components.modal.scss +6 -2
  433. package/src/styles/06-components/_components.nav.scss +6 -5
  434. package/src/styles/06-components/_components.navbar.scss +4 -3
  435. package/src/styles/06-components/_components.pagination.scss +2 -1
  436. package/src/styles/06-components/_components.photoviewer.scss +604 -545
  437. package/src/styles/06-components/_components.popover.scss +3 -2
  438. package/src/styles/06-components/_components.product-review.scss +3 -2
  439. package/src/styles/06-components/_components.progress.scss +3 -2
  440. package/src/styles/06-components/_components.rating.scss +0 -0
  441. package/src/styles/06-components/_components.river.scss +3 -2
  442. package/src/styles/06-components/_components.sectionintro.scss +2 -1
  443. package/src/styles/06-components/_components.select.scss +5 -4
  444. package/src/styles/06-components/_components.side-menu.scss +8 -7
  445. package/src/styles/06-components/_components.skeleton.scss +3 -2
  446. package/src/styles/06-components/_components.slider.scss +274 -0
  447. package/src/styles/06-components/_components.spinner.scss +1 -0
  448. package/src/styles/06-components/_components.steps.scss +4 -2
  449. package/src/styles/06-components/_components.tabs.scss +4 -3
  450. package/src/styles/06-components/_components.testimonials.scss +2 -1
  451. package/src/styles/06-components/_components.todo.scss +3 -2
  452. package/src/styles/06-components/_components.toggle.scss +5 -4
  453. package/src/styles/06-components/_components.tooltip.scss +7 -11
  454. package/src/styles/06-components/_components.upload.scss +4 -3
  455. package/src/styles/06-components/_components.video-player.scss +624 -0
  456. package/src/styles/06-components/_index.scss +4 -0
  457. package/src/styles/06-components/old.chart.styles.scss +2819 -0
  458. package/src/styles/99-utilities/_index.scss +0 -0
  459. package/src/styles/99-utilities/_utilities.background.scss +0 -0
  460. package/src/styles/99-utilities/_utilities.border.scss +0 -0
  461. package/src/styles/99-utilities/_utilities.clearfix.scss +0 -0
  462. package/src/styles/99-utilities/_utilities.display.scss +0 -0
  463. package/src/styles/99-utilities/_utilities.flex.scss +0 -0
  464. package/src/styles/99-utilities/_utilities.link.scss +0 -0
  465. package/src/styles/99-utilities/_utilities.object-fit.scss +0 -0
  466. package/src/styles/99-utilities/_utilities.opacity.scss +0 -0
  467. package/src/styles/99-utilities/_utilities.overflow.scss +0 -0
  468. package/src/styles/99-utilities/_utilities.position.scss +0 -0
  469. package/src/styles/99-utilities/_utilities.scss +2 -1
  470. package/src/styles/99-utilities/_utilities.shadow.scss +0 -0
  471. package/src/styles/99-utilities/_utilities.sizes.scss +0 -0
  472. package/src/styles/99-utilities/_utilities.spacing.scss +0 -0
  473. package/src/styles/99-utilities/_utilities.text.scss +5 -0
  474. package/src/styles/99-utilities/_utilities.visibility.scss +0 -0
  475. package/src/styles/99-utilities/_utilities.visually-hidden.scss +0 -0
  476. package/src/styles/99-utilities/_utilities.z-index.scss +0 -0
  477. package/src/styles/css-modules.d.ts +0 -0
  478. package/src/styles/index.scss +0 -0
  479. package/dist/index.css +0 -15
  480. package/dist/index.esm.css +0 -15
  481. package/dist/index.min.css +0 -15
@@ -0,0 +1,167 @@
1
+ import React from 'react';
2
+
3
+ export type DatePickerViewMode = 'days' | 'months' | 'years';
4
+
5
+ export type DatePickerPlacement =
6
+ | 'top-start'
7
+ | 'top-end'
8
+ | 'bottom-start'
9
+ | 'bottom-end'
10
+ | 'left-start'
11
+ | 'left-end'
12
+ | 'right-start'
13
+ | 'right-end';
14
+
15
+ export type DatePickerSize = 'sm' | 'md' | 'lg';
16
+
17
+ export type DatePickerSelectionMode = 'single' | 'range';
18
+
19
+ export interface DateRange {
20
+ startDate: Date | null;
21
+ endDate: Date | null;
22
+ }
23
+
24
+ export interface DatePickerProps {
25
+ /**
26
+ * The currently selected date value
27
+ */
28
+ value?: Date | null;
29
+
30
+ /**
31
+ * Callback function when date is changed
32
+ */
33
+ onChange?: (date: Date | null) => void;
34
+
35
+ /**
36
+ * Selection mode - single date or date range
37
+ * @default "single"
38
+ */
39
+ selectionMode?: DatePickerSelectionMode;
40
+
41
+ /**
42
+ * The start date of the range (only used when selectionMode is "range")
43
+ */
44
+ startDate?: Date | null;
45
+
46
+ /**
47
+ * The end date of the range (only used when selectionMode is "range")
48
+ */
49
+ endDate?: Date | null;
50
+
51
+ /**
52
+ * Callback function when date range is changed
53
+ */
54
+ onRangeChange?: (range: DateRange) => void;
55
+
56
+ /**
57
+ * Format for the date display (follows Intl.DateTimeFormat patterns)
58
+ * @default "MM/dd/yyyy"
59
+ */
60
+ format?: string;
61
+
62
+ /**
63
+ * Minimum selectable date
64
+ */
65
+ minDate?: Date;
66
+
67
+ /**
68
+ * Maximum selectable date
69
+ */
70
+ maxDate?: Date;
71
+
72
+ /**
73
+ * Placeholder text for the input
74
+ * @default "Select date..."
75
+ */
76
+ placeholder?: string;
77
+
78
+ /**
79
+ * Whether the datepicker is disabled
80
+ * @default false
81
+ */
82
+ disabled?: boolean;
83
+
84
+ /**
85
+ * Whether the datepicker is read-only
86
+ * @default false
87
+ */
88
+ readOnly?: boolean;
89
+
90
+ /**
91
+ * Whether to show a clear button
92
+ * @default true
93
+ */
94
+ clearable?: boolean;
95
+
96
+ /**
97
+ * Whether to show the "Today" button
98
+ * @default true
99
+ */
100
+ showTodayButton?: boolean;
101
+
102
+ /**
103
+ * Whether to show week numbers
104
+ * @default false
105
+ */
106
+ showWeekNumbers?: boolean;
107
+
108
+ /**
109
+ * Whether to display the datepicker inline (always visible)
110
+ * @default false
111
+ */
112
+ inline?: boolean;
113
+
114
+ /**
115
+ * ID for the input element
116
+ */
117
+ id?: string;
118
+
119
+ /**
120
+ * Name for the input element
121
+ */
122
+ name?: string;
123
+
124
+ /**
125
+ * Additional class name for the datepicker component
126
+ */
127
+ className?: string;
128
+
129
+ /**
130
+ * Placement of the dropdown calendar
131
+ * @default "bottom-start"
132
+ */
133
+ placement?: DatePickerPlacement;
134
+
135
+ /**
136
+ * Additional class name for the input element
137
+ */
138
+ inputClassName?: string;
139
+
140
+ /**
141
+ * Size of the input field
142
+ * @default "md"
143
+ */
144
+ size?: DatePickerSize;
145
+ }
146
+
147
+ export interface DatePickerRef {
148
+ /**
149
+ * Open the datepicker
150
+ */
151
+ open: () => void;
152
+
153
+ /**
154
+ * Close the datepicker
155
+ */
156
+ close: () => void;
157
+
158
+ /**
159
+ * Clear the selected date
160
+ */
161
+ clear: () => void;
162
+
163
+ /**
164
+ * Set focus on the input element
165
+ */
166
+ focus: () => void;
167
+ }
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Get the name of a month by its index (0-11)
3
+ */
4
+ export function getMonthName(month: number): string {
5
+ const date = new Date();
6
+ date.setMonth(month);
7
+
8
+ return date.toLocaleString('default', { month: 'long' });
9
+ }
10
+
11
+ /**
12
+ * Get the number of days in a month
13
+ */
14
+ export function getDaysInMonth(year: number, month: number): number {
15
+ return new Date(year, month + 1, 0).getDate();
16
+ }
17
+
18
+ /**
19
+ * Get the day of the week of the first day of a month (0-6, where 0 is Sunday)
20
+ */
21
+ export function getFirstDayOfMonth(year: number, month: number): number {
22
+ return new Date(year, month, 1).getDay();
23
+ }
24
+
25
+ /**
26
+ * Format a date according to the specified format
27
+ */
28
+ export function formatDate(date: Date, format: string): string {
29
+ if (!date) return '';
30
+
31
+ const day = date.getDate();
32
+ const month = date.getMonth() + 1;
33
+ const year = date.getFullYear();
34
+
35
+ // Simple formatting for the most common patterns
36
+ return format
37
+ .replace('yyyy', year.toString())
38
+ .replace('MM', month.toString().padStart(2, '0'))
39
+ .replace('M', month.toString())
40
+ .replace('dd', day.toString().padStart(2, '0'))
41
+ .replace('d', day.toString());
42
+ }
43
+
44
+ /**
45
+ * Format a date range for display
46
+ */
47
+ export function formatDateRange(
48
+ startDate: Date | null,
49
+ endDate: Date | null,
50
+ format: string
51
+ ): string {
52
+ if (!startDate) return '';
53
+
54
+ if (!endDate) {
55
+ return `${formatDate(startDate, format)} - Select end date`;
56
+ }
57
+
58
+ return `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`;
59
+ }
60
+
61
+ /**
62
+ * Parse a date string according to the specified format
63
+ */
64
+ export function parseDate(dateStr: string, format: string): Date | null {
65
+ if (!dateStr) return null;
66
+
67
+ // Simple parsing for common formats
68
+ const normalized = format.toLowerCase();
69
+
70
+ if (normalized === 'mm/dd/yyyy') {
71
+ const parts = dateStr.split('/');
72
+ if (parts.length !== 3) return null;
73
+
74
+ const monthStr = parts[0];
75
+ const dayStr = parts[1];
76
+ const yearStr = parts[2];
77
+
78
+ if (!monthStr || !dayStr || !yearStr) return null;
79
+
80
+ const month = parseInt(monthStr, 10) - 1;
81
+ const day = parseInt(dayStr, 10);
82
+ const year = parseInt(yearStr, 10);
83
+
84
+ if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
85
+
86
+ return new Date(year, month, day);
87
+ }
88
+
89
+ if (normalized === 'dd/mm/yyyy') {
90
+ const parts = dateStr.split('/');
91
+ if (parts.length !== 3) return null;
92
+
93
+ const dayStr = parts[0];
94
+ const monthStr = parts[1];
95
+ const yearStr = parts[2];
96
+
97
+ if (!dayStr || !monthStr || !yearStr) return null;
98
+
99
+ const day = parseInt(dayStr, 10);
100
+ const month = parseInt(monthStr, 10) - 1;
101
+ const year = parseInt(yearStr, 10);
102
+
103
+ if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
104
+
105
+ return new Date(year, month, day);
106
+ }
107
+
108
+ if (normalized === 'yyyy-mm-dd') {
109
+ const parts = dateStr.split('-');
110
+ if (parts.length !== 3) return null;
111
+
112
+ const yearStr = parts[0];
113
+ const monthStr = parts[1];
114
+ const dayStr = parts[2];
115
+
116
+ if (!yearStr || !monthStr || !dayStr) return null;
117
+
118
+ const year = parseInt(yearStr, 10);
119
+ const month = parseInt(monthStr, 10) - 1;
120
+ const day = parseInt(dayStr, 10);
121
+
122
+ if (isNaN(month) || isNaN(day) || isNaN(year)) return null;
123
+
124
+ return new Date(year, month, day);
125
+ }
126
+
127
+ // Fallback to native parsing
128
+ const parsedDate = new Date(dateStr);
129
+ return isNaN(parsedDate.getTime()) ? null : parsedDate;
130
+ }
131
+
132
+ /**
133
+ * Try to parse a date range string (e.g. "01/01/2023 - 01/15/2023")
134
+ */
135
+ export function parseDateRange(
136
+ rangeStr: string,
137
+ format: string
138
+ ): { startDate: Date | null; endDate: Date | null } {
139
+ if (!rangeStr) return { startDate: null, endDate: null };
140
+
141
+ const parts = rangeStr.split('-');
142
+ if (parts.length !== 2) return { startDate: null, endDate: null };
143
+
144
+ const startDateStr = parts[0]?.trim();
145
+ const endDateStr = parts[1]?.trim();
146
+
147
+ if (!startDateStr || !endDateStr) {
148
+ return { startDate: null, endDate: null };
149
+ }
150
+
151
+ const startDate = parseDate(startDateStr, format);
152
+ const endDate = parseDate(endDateStr, format);
153
+
154
+ return { startDate, endDate };
155
+ }
156
+
157
+ /**
158
+ * Check if a date is within a min and max range
159
+ */
160
+ export function isDateInRange(date: Date, minDate?: Date, maxDate?: Date): boolean {
161
+ if (!date) return false;
162
+
163
+ if (minDate && date < minDate) return false;
164
+ if (maxDate && date > maxDate) return false;
165
+
166
+ return true;
167
+ }
168
+
169
+ /**
170
+ * Check if a date is between startDate and endDate (inclusive)
171
+ */
172
+ export function isDateInSelectedRange(
173
+ date: Date,
174
+ startDate: Date | null,
175
+ endDate: Date | null
176
+ ): boolean {
177
+ if (!date || !startDate || !endDate) return false;
178
+
179
+ // Handle case where end date is before start date
180
+ if (endDate < startDate) {
181
+ return date >= endDate && date <= startDate;
182
+ }
183
+
184
+ return date >= startDate && date <= endDate;
185
+ }
@@ -0,0 +1,358 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import React, { useState } from 'react';
3
+ import { ThemeColor } from '../../lib/types/components';
4
+ import { Icon } from '../Icon';
5
+ import { Dropdown, DropdownDivider, DropdownHeader, DropdownItem } from './index';
6
+
7
+ const meta: Meta<typeof Dropdown> = {
8
+ title: 'Components/Dropdown',
9
+ component: Dropdown,
10
+ parameters: {
11
+ layout: 'centered',
12
+ docs: {
13
+ description: {
14
+ component:
15
+ 'Dropdown component with a toggleable menu. The dropdown menu appears on click or hover, depending on the trigger prop.',
16
+ },
17
+ },
18
+ },
19
+ argTypes: {
20
+ placement: {
21
+ control: 'select',
22
+ options: [
23
+ 'bottom-start',
24
+ 'bottom-end',
25
+ 'top-start',
26
+ 'top-end',
27
+ 'left-start',
28
+ 'left-end',
29
+ 'right-start',
30
+ 'right-end',
31
+ ],
32
+ description: 'The placement of the dropdown menu relative to the trigger element',
33
+ },
34
+ trigger: {
35
+ control: 'radio',
36
+ options: ['click', 'hover'],
37
+ description: 'How the dropdown is triggered - by click or hover',
38
+ },
39
+ variant: {
40
+ control: 'select',
41
+ options: [
42
+ 'primary',
43
+ 'secondary',
44
+ 'tertiary',
45
+ 'success',
46
+ 'info',
47
+ 'warning',
48
+ 'error',
49
+ 'light',
50
+ 'dark',
51
+ ],
52
+ description: 'The color variant of the dropdown',
53
+ },
54
+ minWidth: {
55
+ control: 'text',
56
+ description: 'Minimum width of the dropdown menu',
57
+ },
58
+ maxHeight: {
59
+ control: 'text',
60
+ description: 'Maximum height of the dropdown menu',
61
+ },
62
+ closeOnClickOutside: {
63
+ control: 'boolean',
64
+ description: 'Whether to close the dropdown when clicking outside',
65
+ },
66
+ closeOnEscape: {
67
+ control: 'boolean',
68
+ description: 'Whether to close the dropdown when pressing the Escape key',
69
+ },
70
+ },
71
+ };
72
+
73
+ export default meta;
74
+ type Story = StoryObj<typeof Dropdown>;
75
+
76
+ /**
77
+ * Interactive dropdown component that can be used in Storybook
78
+ */
79
+ const InteractiveDropdown = (args: React.ComponentProps<typeof Dropdown>) => {
80
+ const [isOpen, setIsOpen] = useState(false);
81
+
82
+ return (
83
+ <div
84
+ className="u-p-4"
85
+ style={{ minHeight: '300px', display: 'flex', alignItems: 'flex-start' }}
86
+ >
87
+ <Dropdown {...args} isOpen={isOpen} onOpenChange={setIsOpen} />
88
+ </div>
89
+ );
90
+ };
91
+
92
+ /**
93
+ * Basic dropdown example with default settings
94
+ */
95
+ export const Default: Story = {
96
+ args: {
97
+ trigger: 'click',
98
+ placement: 'bottom-start',
99
+ children: (
100
+ <button className="c-btn c-btn--primary">
101
+ Dropdown <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
102
+ </button>
103
+ ),
104
+ menu: (
105
+ <>
106
+ <DropdownItem>Menu item 1</DropdownItem>
107
+ <DropdownItem>Menu item 2</DropdownItem>
108
+ <DropdownItem>Menu item 3</DropdownItem>
109
+ </>
110
+ ),
111
+ },
112
+ render: args => <InteractiveDropdown {...args} />,
113
+ };
114
+
115
+ /**
116
+ * Dropdown that opens on click
117
+ */
118
+ export const ClickTrigger: Story = {
119
+ args: {
120
+ ...Default.args,
121
+ trigger: 'click',
122
+ },
123
+ render: args => <InteractiveDropdown {...args} />,
124
+ };
125
+
126
+ /**
127
+ * Dropdown that opens on hover
128
+ */
129
+ export const HoverTrigger: Story = {
130
+ args: {
131
+ ...Default.args,
132
+ trigger: 'hover',
133
+ },
134
+ render: args => <InteractiveDropdown {...args} />,
135
+ };
136
+
137
+ /**
138
+ * Dropdown menu items with icons
139
+ */
140
+ export const WithIcons: Story = {
141
+ args: {
142
+ ...Default.args,
143
+ menu: (
144
+ <>
145
+ <DropdownItem icon={<Icon name="House" size="sm" />}>Home</DropdownItem>
146
+ <DropdownItem icon={<Icon name="User" size="sm" />}>Profile</DropdownItem>
147
+ <DropdownItem icon={<Icon name="Gear" size="sm" />}>Settings</DropdownItem>
148
+ <DropdownItem icon={<Icon name="SignOut" size="sm" />}>Logout</DropdownItem>
149
+ </>
150
+ ),
151
+ },
152
+ render: args => <InteractiveDropdown {...args} />,
153
+ };
154
+
155
+ /**
156
+ * Dropdown menu items as links
157
+ */
158
+ export const WithLinks: Story = {
159
+ args: {
160
+ ...Default.args,
161
+ menu: (
162
+ <>
163
+ <DropdownItem href="#home">Home</DropdownItem>
164
+ <DropdownItem href="#about">About</DropdownItem>
165
+ <DropdownItem href="#services">Services</DropdownItem>
166
+ <DropdownItem href="#contact">Contact</DropdownItem>
167
+ </>
168
+ ),
169
+ },
170
+ render: args => <InteractiveDropdown {...args} />,
171
+ };
172
+
173
+ /**
174
+ * Dropdown with section headers and dividers
175
+ */
176
+ export const WithHeader: Story = {
177
+ args: {
178
+ ...Default.args,
179
+ menu: (
180
+ <>
181
+ <DropdownHeader>Account Options</DropdownHeader>
182
+ <DropdownItem>Profile</DropdownItem>
183
+ <DropdownItem>Settings</DropdownItem>
184
+ <DropdownDivider />
185
+ <DropdownHeader>Help & Support</DropdownHeader>
186
+ <DropdownItem>Documentation</DropdownItem>
187
+ <DropdownItem>Contact Support</DropdownItem>
188
+ </>
189
+ ),
190
+ },
191
+ render: args => <InteractiveDropdown {...args} />,
192
+ };
193
+
194
+ /**
195
+ * Dropdown with an active menu item
196
+ */
197
+ export const ActiveItem: Story = {
198
+ args: {
199
+ ...Default.args,
200
+ menu: (
201
+ <>
202
+ <DropdownItem active>Active Item</DropdownItem>
203
+ <DropdownItem>Regular Item</DropdownItem>
204
+ <DropdownItem>Regular Item</DropdownItem>
205
+ </>
206
+ ),
207
+ },
208
+ render: args => <InteractiveDropdown {...args} />,
209
+ };
210
+
211
+ /**
212
+ * Dropdown with a disabled menu item
213
+ */
214
+ export const DisabledItem: Story = {
215
+ args: {
216
+ ...Default.args,
217
+ menu: (
218
+ <>
219
+ <DropdownItem>Regular Item</DropdownItem>
220
+ <DropdownItem disabled>Disabled Item</DropdownItem>
221
+ <DropdownItem>Regular Item</DropdownItem>
222
+ </>
223
+ ),
224
+ },
225
+ render: args => <InteractiveDropdown {...args} />,
226
+ };
227
+
228
+ /**
229
+ * Shows all possible dropdown placement options
230
+ */
231
+ export const AllPlacements: Story = {
232
+ parameters: {
233
+ docs: {
234
+ description: {
235
+ story:
236
+ 'The Dropdown component supports various placement options to position the menu relative to the trigger element.',
237
+ },
238
+ },
239
+ },
240
+ render: () => {
241
+ // All possible placement options with properly typed icon names
242
+ const placements = [
243
+ { value: 'bottom-start', label: 'Bottom Start', icon: 'CaretDown' as const },
244
+ { value: 'bottom-end', label: 'Bottom End', icon: 'CaretDown' as const },
245
+ { value: 'top-start', label: 'Top Start', icon: 'CaretUp' as const },
246
+ { value: 'top-end', label: 'Top End', icon: 'CaretUp' as const },
247
+ { value: 'left-start', label: 'Left Start', icon: 'CaretLeft' as const },
248
+ { value: 'left-end', label: 'Left End', icon: 'CaretLeft' as const },
249
+ { value: 'right-start', label: 'Right Start', icon: 'CaretRight' as const },
250
+ { value: 'right-end', label: 'Right End', icon: 'CaretRight' as const },
251
+ ];
252
+
253
+ // Create a grid layout with plenty of space for dropdowns to display correctly
254
+ return (
255
+ <div className="u-p-5" style={{ height: '650px' }}>
256
+ <div
257
+ className="u-d-grid"
258
+ style={{
259
+ gridTemplateColumns: 'repeat(4, 1fr)',
260
+ gridTemplateRows: 'repeat(2, 1fr)',
261
+ gap: '1.5rem',
262
+ height: '100%',
263
+ }}
264
+ >
265
+ {placements.map(placement => (
266
+ <div
267
+ key={placement.value}
268
+ className="u-d-flex u-align-items-center u-justify-content-center"
269
+ >
270
+ <Dropdown
271
+ trigger="click"
272
+ placement={placement.value as any}
273
+ defaultOpen={true}
274
+ closeOnClickOutside={false}
275
+ closeOnEscape={false}
276
+ children={
277
+ <button className="c-btn c-btn--primary">
278
+ {placement.label}{' '}
279
+ <Icon name={placement.icon} className="c-dropdown__toggle-icon" size="sm" />
280
+ </button>
281
+ }
282
+ menu={
283
+ <>
284
+ <DropdownItem>Menu item 1</DropdownItem>
285
+ <DropdownItem>Menu item 2</DropdownItem>
286
+ <DropdownItem>Menu item 3</DropdownItem>
287
+ </>
288
+ }
289
+ />
290
+ </div>
291
+ ))}
292
+ </div>
293
+ </div>
294
+ );
295
+ },
296
+ };
297
+
298
+ /**
299
+ * Dropdown with all color variants
300
+ */
301
+ export const AllVariants: Story = {
302
+ parameters: {
303
+ docs: {
304
+ description: {
305
+ story:
306
+ 'The Dropdown component supports various color variants to match your design system.',
307
+ },
308
+ },
309
+ },
310
+ render: () => {
311
+ const [openDropdown, setOpenDropdown] = useState<string | null>(null);
312
+
313
+ const handleOpenChange = (variant: string, isOpen: boolean) => {
314
+ if (isOpen) {
315
+ setOpenDropdown(variant);
316
+ } else if (openDropdown === variant) {
317
+ setOpenDropdown(null);
318
+ }
319
+ };
320
+
321
+ return (
322
+ <div className="u-p-4" style={{ minHeight: '300px' }}>
323
+ <div className="u-d-flex u-flex-wrap u-gap-3">
324
+ {[
325
+ 'primary',
326
+ 'secondary',
327
+ 'tertiary',
328
+ 'success',
329
+ 'info',
330
+ 'warning',
331
+ 'error',
332
+ 'light',
333
+ 'dark',
334
+ ].map(color => (
335
+ <Dropdown
336
+ key={color}
337
+ variant={color as ThemeColor}
338
+ trigger="click"
339
+ isOpen={openDropdown === color}
340
+ onOpenChange={isOpen => handleOpenChange(color, isOpen)}
341
+ children={
342
+ <button className={`c-btn c-btn--${color}`}>
343
+ {color} <Icon name="CaretDown" className="c-dropdown__toggle-icon" size="sm" />
344
+ </button>
345
+ }
346
+ menu={
347
+ <>
348
+ <DropdownItem>Menu item 1</DropdownItem>
349
+ <DropdownItem>Menu item 2</DropdownItem>
350
+ </>
351
+ }
352
+ />
353
+ ))}
354
+ </div>
355
+ </div>
356
+ );
357
+ },
358
+ };