@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,4750 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ /**
4
+ * Common component size options
5
+ */
6
+ export type Size = 'sm' | 'md' | 'lg';
7
+
8
+ // ============================================================================
9
+ // THEME SYSTEM TYPES
10
+ // ============================================================================
11
+
12
+ /**
13
+ * Available theme variants in the Shaj theme system
14
+ */
15
+ export type ThemeName =
16
+ | 'shaj-default'
17
+ | 'shaj-ocean'
18
+ | 'shaj-sunset'
19
+ | 'shaj-forest'
20
+ | 'shaj-midnight'
21
+ | 'shaj-pastel';
22
+
23
+ // ============================================================================
24
+ // END THEME SYSTEM TYPES
25
+ // ============================================================================
26
+
27
+ /**
28
+ * Theme color variants
29
+ */
30
+ export type ThemeColor =
31
+ | 'primary'
32
+ | 'secondary'
33
+ | 'tertiary'
34
+ | 'invert'
35
+ | 'brand'
36
+ | 'error'
37
+ | 'success'
38
+ | 'warning'
39
+ | 'info'
40
+ | 'light'
41
+ | 'dark';
42
+
43
+ /**
44
+ * Component variant including theme colors and outline variants
45
+ */
46
+ export type Variant = ThemeColor | `outline-${ThemeColor}` | 'link';
47
+
48
+ /**
49
+ * Base component properties interface
50
+ */
51
+ export interface BaseComponentProps {
52
+ /**
53
+ * Additional CSS class names
54
+ */
55
+ className?: string;
56
+
57
+ /**
58
+ * Component disabled state
59
+ */
60
+ disabled?: boolean;
61
+ }
62
+
63
+ /**
64
+ * CSS class state modifiers
65
+ */
66
+ export type StateModifier =
67
+ | 'is-open'
68
+ | 'is-closed'
69
+ | 'is-active'
70
+ | 'is-disabled'
71
+ | 'is-loading'
72
+ | 'is-selected'
73
+ | 'is-animating'
74
+ | 'is-hovered';
75
+
76
+ /**
77
+ * Icon position options
78
+ */
79
+ export type IconPosition = 'left' | 'right';
80
+
81
+ export type listvariant = 'dash' | 'number' | 'text';
82
+ /**;
83
+ * List component properties
84
+ */
85
+ export interface ListProps extends BaseComponentProps {
86
+ children?: ReactNode;
87
+ /**
88
+ * List items
89
+ */
90
+ items?: ReactNode[];
91
+
92
+ /**
93
+ * List variant
94
+ */
95
+ variant?: listvariant;
96
+
97
+ /**
98
+ * List size
99
+ */
100
+ size?: Size;
101
+
102
+ /**
103
+ * Whether the list is ordered
104
+ */
105
+ ordered?: boolean;
106
+
107
+ /**
108
+ * Whether to display list items inline
109
+ */
110
+ inline?: boolean;
111
+ }
112
+
113
+ /**
114
+ * List group component properties
115
+ */
116
+ export interface ListGroupProps extends BaseComponentProps {
117
+ /**
118
+ * List group children
119
+ */
120
+ children?: ReactNode;
121
+
122
+ /**
123
+ * List group variant
124
+ */
125
+ variant?: Variant;
126
+
127
+ /**
128
+ * List group size
129
+ */
130
+ size?: Size;
131
+ }
132
+
133
+ /**
134
+ * Button component properties
135
+ */
136
+ export interface ButtonProps extends BaseComponentProps {
137
+ /**
138
+ * Button contents
139
+ */
140
+ label: string;
141
+
142
+ /**
143
+ * Optional click handler
144
+ */
145
+ onClick?: () => void;
146
+
147
+ /**
148
+ * Button variant
149
+ */
150
+ variant?: Variant;
151
+
152
+ /**
153
+ * Button size
154
+ */
155
+ size?: Size;
156
+
157
+ /**
158
+ * Optional icon
159
+ */
160
+ icon?: ReactNode;
161
+
162
+ /**
163
+ * Icon only button
164
+ */
165
+ iconOnly?: boolean;
166
+
167
+ /**
168
+ * Make button fully rounded (pill shape)
169
+ */
170
+ rounded?: boolean;
171
+ }
172
+
173
+ /**
174
+ * Badge component properties
175
+ */
176
+ export interface BadgeProps extends BaseComponentProps {
177
+ /**
178
+ * Badge text content
179
+ */
180
+ label: string;
181
+
182
+ /**
183
+ * Badge color variant
184
+ */
185
+ variant?: ThemeColor;
186
+
187
+ /**
188
+ * Badge size
189
+ */
190
+ size?: Size;
191
+
192
+ /**
193
+ * Optional icon
194
+ */
195
+ icon?: ReactNode;
196
+ }
197
+
198
+ /**
199
+ * Callout component properties
200
+ */
201
+ export interface CalloutProps extends BaseComponentProps {
202
+ /**
203
+ * Callout title
204
+ */
205
+ title?: ReactNode;
206
+
207
+ /**
208
+ * Callout content
209
+ */
210
+ children?: ReactNode;
211
+
212
+ /**
213
+ * Optional icon
214
+ */
215
+ icon?: ReactNode;
216
+
217
+ /**
218
+ * Callout variant
219
+ */
220
+ variant?: ThemeColor;
221
+
222
+ /**
223
+ * Optional close handler
224
+ */
225
+ onClose?: () => void;
226
+
227
+ /**
228
+ * Optional action buttons
229
+ */
230
+ actions?: ReactNode;
231
+
232
+ /**
233
+ * Display in one line mode
234
+ */
235
+ oneLine?: boolean;
236
+
237
+ /**
238
+ * Display as toast notification
239
+ */
240
+ toast?: boolean;
241
+ }
242
+
243
+ /**
244
+ * Accordion component properties
245
+ */
246
+ export interface AccordionProps extends BaseComponentProps {
247
+ /**
248
+ * Title of the accordion
249
+ */
250
+ title: string;
251
+
252
+ /**
253
+ * Content to be shown when accordion is expanded
254
+ */
255
+ children: ReactNode;
256
+
257
+ /**
258
+ * Whether the accordion is initially open
259
+ */
260
+ defaultOpen?: boolean;
261
+
262
+ /**
263
+ * Position of the icon (right or left)
264
+ */
265
+ iconPosition?: IconPosition;
266
+
267
+ /**
268
+ * Custom icon for the accordion
269
+ */
270
+ icon?: ReactNode;
271
+ }
272
+
273
+ /**
274
+ * Accordion state
275
+ */
276
+ export interface AccordionState {
277
+ /**
278
+ * Whether the accordion is open
279
+ */
280
+ isOpen: boolean;
281
+
282
+ /**
283
+ * Current panel height CSS value
284
+ */
285
+ panelHeight: string;
286
+ }
287
+
288
+ /**
289
+ * Common element ref types
290
+ */
291
+ export interface ElementRefs {
292
+ panelRef?: React.RefObject<HTMLDivElement | null>;
293
+ contentRef?: React.RefObject<HTMLDivElement | null>;
294
+ buttonRef?: React.RefObject<HTMLButtonElement | null>;
295
+ }
296
+
297
+ /**
298
+ * Hero alignment options
299
+ */
300
+ export type HeroAlignment = 'left' | 'center' | 'right';
301
+
302
+ /**
303
+ * Hero component properties
304
+ */
305
+ export interface HeroProps extends BaseComponentProps {
306
+ /**
307
+ * Hero title
308
+ */
309
+ title: string;
310
+
311
+ /**
312
+ * Hero subtitle
313
+ */
314
+ subtitle?: string;
315
+
316
+ /**
317
+ * Hero text content
318
+ */
319
+ text?: string;
320
+
321
+ /**
322
+ * Image source for the hero
323
+ */
324
+ imageSrc?: string;
325
+
326
+ /**
327
+ * Image alt text
328
+ */
329
+ imageAlt?: string;
330
+
331
+ /**
332
+ * Content alignment
333
+ */
334
+ alignment?: HeroAlignment;
335
+
336
+ /**
337
+ * Background image source
338
+ */
339
+ backgroundImageSrc?: string;
340
+
341
+ /**
342
+ * Whether to show the background overlay
343
+ */
344
+ showOverlay?: boolean;
345
+
346
+ /**
347
+ * Whether the hero should take full viewport height
348
+ */
349
+ fullViewportHeight?: boolean;
350
+
351
+ /**
352
+ * Actions to display in the hero
353
+ */
354
+ actions?: ReactNode;
355
+
356
+ /**
357
+ * Custom grid column size for image (default is 7)
358
+ */
359
+ imageColSize?: number;
360
+
361
+ /**
362
+ * Custom grid column size for content (default is 5)
363
+ */
364
+ contentColSize?: number;
365
+
366
+ /**
367
+ * Custom width for the hero content (overrides the default CSS variable)
368
+ */
369
+ contentWidth?: string;
370
+
371
+ /**
372
+ * Enable parallax effect on background image
373
+ */
374
+ parallax?: boolean;
375
+
376
+ /**
377
+ * Parallax effect intensity (0-1)
378
+ */
379
+ parallaxIntensity?: number;
380
+
381
+ /**
382
+ * Video background URL
383
+ */
384
+ videoBackground?: string;
385
+
386
+ /**
387
+ * Video background options
388
+ */
389
+ videoOptions?: {
390
+ /**
391
+ * Whether the video should autoplay
392
+ */
393
+ autoplay?: boolean;
394
+
395
+ /**
396
+ * Whether the video should loop
397
+ */
398
+ loop?: boolean;
399
+
400
+ /**
401
+ * Whether the video should be muted
402
+ */
403
+ muted?: boolean;
404
+
405
+ /**
406
+ * Poster image URL for the video
407
+ */
408
+ posterUrl?: string;
409
+ };
410
+ }
411
+
412
+ /**
413
+ * Spinner component properties
414
+ */
415
+ export interface SpinnerProps extends BaseComponentProps {
416
+ /**
417
+ * Spinner color variant
418
+ */
419
+ variant?: ThemeColor;
420
+
421
+ /**
422
+ * Spinner size
423
+ */
424
+ size?: Size;
425
+
426
+ /**
427
+ * Whether the spinner should be displayed fullscreen
428
+ */
429
+ fullscreen?: boolean;
430
+ }
431
+
432
+ /**
433
+ * Navbar position options
434
+ */
435
+ export type NavbarPosition = 'static' | 'fixed' | 'fixed-bottom';
436
+
437
+ /**
438
+ * Nav item alignment options
439
+ */
440
+ export type NavAlignment = 'start' | 'center' | 'end';
441
+
442
+ /**
443
+ * Nav variant options
444
+ */
445
+ export type NavVariant = 'default' | 'float-top-center' | 'float-bottom-center';
446
+
447
+ /**
448
+ * Navbar component properties
449
+ */
450
+ export interface NavbarProps extends BaseComponentProps {
451
+ /**
452
+ * Brand/logo component or text
453
+ */
454
+ brand?: ReactNode;
455
+
456
+ /**
457
+ * Navbar navigation items
458
+ */
459
+ children?: ReactNode;
460
+
461
+ /**
462
+ * Optional variant/color scheme
463
+ */
464
+ variant?: ThemeColor;
465
+
466
+ /**
467
+ * Navbar position
468
+ */
469
+ position?: NavbarPosition;
470
+
471
+ /**
472
+ * Container max width (default is from settings)
473
+ */
474
+ containerWidth?: string;
475
+
476
+ /**
477
+ * Whether to collapse navbar on mobile
478
+ */
479
+ collapsible?: boolean;
480
+
481
+ /**
482
+ * Whether navbar is expanded (for controlled component)
483
+ */
484
+ expanded?: boolean;
485
+
486
+ /**
487
+ * Callback when expansion state changes
488
+ */
489
+ onToggle?: (expanded: boolean) => void;
490
+
491
+ /**
492
+ * Whether to show backdrop when expanded on mobile
493
+ */
494
+ backdrop?: boolean;
495
+
496
+ /**
497
+ * Whether to close navbar when clicking outside
498
+ */
499
+ closeOnOutsideClick?: boolean;
500
+
501
+ /**
502
+ * Whether to close navbar on escape key press
503
+ */
504
+ closeOnEscape?: boolean;
505
+
506
+ /**
507
+ * Custom aria-label for the navigation
508
+ */
509
+ ariaLabel?: string;
510
+
511
+ /**
512
+ * ID for the navbar (used for accessibility)
513
+ */
514
+ id?: string;
515
+ }
516
+
517
+ /**
518
+ * Nav component properties
519
+ */
520
+ export interface NavProps extends BaseComponentProps {
521
+ /**
522
+ * Navigation items
523
+ */
524
+ children: ReactNode;
525
+
526
+ /**
527
+ * Alignment of nav items
528
+ */
529
+ alignment?: NavAlignment;
530
+
531
+ /**
532
+ * Nav variant (including float variants)
533
+ */
534
+ variant?: NavVariant;
535
+ }
536
+
537
+ /**
538
+ * Nav item properties
539
+ */
540
+ export interface NavItemProps extends BaseComponentProps {
541
+ /**
542
+ * Item content
543
+ */
544
+ children: ReactNode;
545
+
546
+ /**
547
+ * Whether this item has a dropdown
548
+ */
549
+ dropdown?: boolean;
550
+
551
+ /**
552
+ * Whether this item has a mega menu
553
+ */
554
+ megaMenu?: boolean;
555
+
556
+ /**
557
+ * Whether this item is active
558
+ */
559
+ active?: boolean;
560
+
561
+ /**
562
+ * Optional href for link items
563
+ */
564
+ href?: string;
565
+
566
+ /**
567
+ * Optional click handler
568
+ */
569
+ onClick?: () => void;
570
+
571
+ /**
572
+ * Whether dropdown/mega menu is expanded
573
+ */
574
+ 'aria-expanded'?: boolean;
575
+
576
+ /**
577
+ * Optional custom link component
578
+ */
579
+ LinkComponent?: React.ElementType;
580
+ }
581
+
582
+ /**
583
+ * Nav dropdown properties
584
+ */
585
+ export interface NavDropdownProps extends BaseComponentProps {
586
+ /**
587
+ * Dropdown title/trigger content
588
+ */
589
+ title: ReactNode;
590
+
591
+ /**
592
+ * Dropdown menu items
593
+ */
594
+ children: ReactNode;
595
+
596
+ /**
597
+ * Dropdown alignment
598
+ */
599
+ alignment?: 'start' | 'center' | 'end';
600
+
601
+ /**
602
+ * Whether it's a mega menu (full width)
603
+ */
604
+ megaMenu?: boolean;
605
+ }
606
+
607
+ /**
608
+ * Menu component properties
609
+ */
610
+ export interface MenuProps extends BaseComponentProps {
611
+ /**
612
+ * Menu content
613
+ */
614
+ children: ReactNode;
615
+ }
616
+
617
+ /**
618
+ * Menu item properties
619
+ */
620
+ export interface MenuItemProps extends BaseComponentProps {
621
+ /**
622
+ * Item content
623
+ */
624
+ children: ReactNode;
625
+
626
+ /**
627
+ * Item href
628
+ */
629
+ href?: string;
630
+
631
+ /**
632
+ * Item icon
633
+ */
634
+ icon?: ReactNode;
635
+
636
+ /**
637
+ * Whether item is active
638
+ */
639
+ active?: boolean;
640
+
641
+ /**
642
+ * Item click handler
643
+ */
644
+ onClick?: () => void;
645
+ }
646
+
647
+ /**
648
+ * MegaMenu component properties
649
+ */
650
+ export interface MegaMenuProps extends BaseComponentProps {
651
+ /**
652
+ * MegaMenu content
653
+ */
654
+ children: ReactNode;
655
+ }
656
+
657
+ /**
658
+ * MegaMenu column properties
659
+ */
660
+ export interface MegaMenuColumnProps extends BaseComponentProps {
661
+ /**
662
+ * Column title
663
+ */
664
+ title?: ReactNode;
665
+
666
+ /**
667
+ * Column icon
668
+ */
669
+ icon?: ReactNode;
670
+
671
+ /**
672
+ * Column content
673
+ */
674
+ children: ReactNode;
675
+
676
+ /**
677
+ * Column width (auto by default)
678
+ */
679
+ width?: 'auto' | number;
680
+ }
681
+
682
+ /**
683
+ * MegaMenu link properties
684
+ */
685
+ export interface MegaMenuLinkProps extends BaseComponentProps {
686
+ /**
687
+ * Link href
688
+ */
689
+ href: string;
690
+
691
+ /**
692
+ * Link content
693
+ */
694
+ children: ReactNode;
695
+
696
+ /**
697
+ * Link click handler
698
+ */
699
+ onClick?: () => void;
700
+ }
701
+
702
+ /**
703
+ * SideMenu component properties
704
+ */
705
+ export interface SideMenuProps extends BaseComponentProps {
706
+ /**
707
+ * Menu title displayed at the top
708
+ */
709
+ title?: ReactNode;
710
+
711
+ /**
712
+ * Menu content (typically SideMenuList components)
713
+ */
714
+ children: ReactNode;
715
+
716
+ /**
717
+ * Whether the menu is open (for controlled component)
718
+ */
719
+ isOpen?: boolean;
720
+
721
+ /**
722
+ * Callback when menu open state changes
723
+ */
724
+ onToggle?: (isOpen: boolean) => void;
725
+
726
+ /**
727
+ * Whether the menu is collapsible on mobile
728
+ */
729
+ collapsible?: boolean;
730
+
731
+ /**
732
+ * Custom toggle icon
733
+ */
734
+ toggleIcon?: ReactNode;
735
+
736
+ /**
737
+ * ID for the menu (used for accessibility)
738
+ */
739
+ id?: string;
740
+ }
741
+
742
+ /**
743
+ * SideMenuList component properties
744
+ */
745
+ export interface SideMenuListProps extends BaseComponentProps {
746
+ /**
747
+ * List items (typically SideMenuItem components)
748
+ */
749
+ children: ReactNode;
750
+ }
751
+
752
+ /**
753
+ * SideMenuItem component properties
754
+ */
755
+ export interface SideMenuItemProps extends BaseComponentProps {
756
+ /**
757
+ * Item content
758
+ */
759
+ children: ReactNode;
760
+
761
+ /**
762
+ * Item href (renders as link)
763
+ */
764
+ href?: string;
765
+
766
+ /**
767
+ * Item click handler (renders as button if no href)
768
+ */
769
+ onClick?: (event: React.MouseEvent) => void;
770
+
771
+ /**
772
+ * Whether this item is active/current
773
+ */
774
+ active?: boolean;
775
+
776
+ /**
777
+ * Optional icon for the item
778
+ */
779
+ icon?: ReactNode;
780
+
781
+ /**
782
+ * Link target attribute
783
+ */
784
+ target?: string;
785
+
786
+ /**
787
+ * Link rel attribute
788
+ */
789
+ rel?: string;
790
+
791
+ /**
792
+ * Optional custom link component
793
+ */
794
+ LinkComponent?: React.ElementType;
795
+ }
796
+
797
+ /**
798
+ * EdgePanel position options
799
+ */
800
+ export type EdgePanelPosition = 'start' | 'end' | 'top' | 'bottom';
801
+
802
+ /**
803
+ * EdgePanel animation mode options
804
+ */
805
+ export type EdgePanelMode = 'slide' | 'push' | 'none';
806
+
807
+ /**
808
+ * EdgePanel component properties
809
+ */
810
+ export interface EdgePanelProps extends BaseComponentProps {
811
+ /**
812
+ * Panel title
813
+ */
814
+ title?: ReactNode;
815
+
816
+ /**
817
+ * Panel content
818
+ */
819
+ children: ReactNode;
820
+
821
+ /**
822
+ * Panel position
823
+ */
824
+ position?: EdgePanelPosition;
825
+
826
+ /**
827
+ * Animation mode
828
+ */
829
+ mode?: EdgePanelMode;
830
+
831
+ /**
832
+ * Whether the panel is open
833
+ */
834
+ isOpen?: boolean;
835
+
836
+ /**
837
+ * Open/close callback
838
+ */
839
+ onOpenChange?: (open: boolean) => void;
840
+
841
+ /**
842
+ * Show backdrop
843
+ */
844
+ backdrop?: boolean;
845
+
846
+ /**
847
+ * Close when clicking backdrop
848
+ */
849
+ closeOnBackdropClick?: boolean;
850
+
851
+ /**
852
+ * Close when pressing escape key
853
+ */
854
+ closeOnEscape?: boolean;
855
+ }
856
+
857
+ /**
858
+ * DataTable column definition
859
+ */
860
+ export interface DataTableColumn {
861
+ /**
862
+ * Unique identifier for the column
863
+ */
864
+ key: string;
865
+
866
+ /**
867
+ * Display title for the column
868
+ */
869
+ title: string;
870
+
871
+ /**
872
+ * Whether the column is sortable
873
+ */
874
+ sortable?: boolean;
875
+
876
+ /**
877
+ * Whether the column is filterable
878
+ */
879
+ filterable?: boolean;
880
+
881
+ /**
882
+ * Custom render function for the cell
883
+ */
884
+ render?: (value: any, row: any) => React.ReactNode;
885
+
886
+ /**
887
+ * Width of the column (CSS value)
888
+ */
889
+ width?: string;
890
+ }
891
+
892
+ /**
893
+ * Sort configuration
894
+ */
895
+ export interface SortConfig {
896
+ /**
897
+ * Column key to sort by
898
+ */
899
+ key: string;
900
+
901
+ /**
902
+ * Sort direction
903
+ */
904
+ direction: 'asc' | 'desc';
905
+ }
906
+
907
+ /**
908
+ * DataTable component properties
909
+ */
910
+ export interface DataTableProps extends BaseComponentProps {
911
+ /**
912
+ * Data array to display in the table
913
+ */
914
+ data: any[];
915
+
916
+ /**
917
+ * Column definitions
918
+ */
919
+ columns: DataTableColumn[];
920
+
921
+ /**
922
+ * Whether the table is sortable
923
+ */
924
+ sortable?: boolean;
925
+
926
+ /**
927
+ * Whether the table is filterable
928
+ */
929
+ filterable?: boolean;
930
+
931
+ /**
932
+ * Whether the table is paginated
933
+ */
934
+ paginated?: boolean;
935
+
936
+ /**
937
+ * Number of rows per page
938
+ */
939
+ pageSize?: number;
940
+
941
+ /**
942
+ * Whether to show alternating row colors
943
+ */
944
+ striped?: boolean;
945
+
946
+ /**
947
+ * Whether to show borders around cells
948
+ */
949
+ bordered?: boolean;
950
+
951
+ /**
952
+ * Whether to use compact styling
953
+ */
954
+ dense?: boolean;
955
+
956
+ /**
957
+ * Whether the table is in loading state
958
+ */
959
+ loading?: boolean;
960
+
961
+ /**
962
+ * Message to display when there is no data
963
+ */
964
+ emptyMessage?: string;
965
+
966
+ /**
967
+ * Callback when a row is clicked
968
+ */
969
+ onRowClick?: (row: any) => void;
970
+
971
+ /**
972
+ * Callback when sorting changes
973
+ */
974
+ onSort?: (sortConfig: SortConfig) => void;
975
+ }
976
+
977
+ /**
978
+ * Pagination component properties
979
+ */
980
+ export interface PaginationProps extends BaseComponentProps {
981
+ /**
982
+ * Current active page
983
+ */
984
+ currentPage: number;
985
+
986
+ /**
987
+ * Total number of pages
988
+ */
989
+ totalPages: number;
990
+
991
+ /**
992
+ * Callback function when page changes
993
+ */
994
+ onPageChange: (page: number) => void;
995
+
996
+ /**
997
+ * Number of page links to show before and after current page
998
+ */
999
+ siblingCount?: number;
1000
+
1001
+ /**
1002
+ * Whether to show first/last page buttons
1003
+ */
1004
+ showFirstLastButtons?: boolean;
1005
+
1006
+ /**
1007
+ * Whether to show previous/next page buttons
1008
+ */
1009
+ showPrevNextButtons?: boolean;
1010
+
1011
+ /**
1012
+ * Custom class for the pagination container
1013
+ */
1014
+ className?: string;
1015
+
1016
+ /**
1017
+ * Size variant for the pagination component
1018
+ */
1019
+ size?: Size;
1020
+
1021
+ /**
1022
+ * Accessible label for the navigation element
1023
+ */
1024
+ ariaLabel?: string;
1025
+ }
1026
+
1027
+ /**
1028
+ * Todo item data structure
1029
+ */
1030
+ export interface TodoItem {
1031
+ /**
1032
+ * Unique identifier for the todo
1033
+ */
1034
+ id: string;
1035
+
1036
+ /**
1037
+ * Todo item text
1038
+ */
1039
+ text: string;
1040
+
1041
+ /**
1042
+ * Whether the todo is completed
1043
+ */
1044
+ completed: boolean;
1045
+ }
1046
+
1047
+ /**
1048
+ * Todo component properties
1049
+ */
1050
+ export interface TodoProps extends BaseComponentProps {
1051
+ /**
1052
+ * List of todo items
1053
+ */
1054
+ items: TodoItem[];
1055
+
1056
+ /**
1057
+ * Callback when a todo item is added
1058
+ */
1059
+ onAddTodo?: (text: string) => void;
1060
+
1061
+ /**
1062
+ * Callback when a todo item is toggled
1063
+ */
1064
+ onToggleTodo?: (id: string) => void;
1065
+
1066
+ /**
1067
+ * Callback when a todo item is deleted
1068
+ */
1069
+ onDeleteTodo?: (id: string) => void;
1070
+
1071
+ /**
1072
+ * Title of the todo list
1073
+ */
1074
+ title?: string;
1075
+
1076
+ /**
1077
+ * Size variant for the todo component
1078
+ */
1079
+ size?: Size;
1080
+
1081
+ /**
1082
+ * Placeholder text for the new todo input
1083
+ */
1084
+ placeholder?: string;
1085
+
1086
+ /**
1087
+ * Whether to show the completed todos
1088
+ */
1089
+ showCompleted?: boolean;
1090
+ }
1091
+
1092
+ /**
1093
+ * Form component properties
1094
+ */
1095
+ export interface FormProps extends BaseComponentProps {
1096
+ /**
1097
+ * Form content
1098
+ */
1099
+ children: ReactNode;
1100
+
1101
+ /**
1102
+ * Form submit handler
1103
+ */
1104
+ onSubmit?: (event: React.FormEvent<HTMLFormElement>) => void;
1105
+
1106
+ /**
1107
+ * Form reset handler
1108
+ */
1109
+ onReset?: (event: React.FormEvent<HTMLFormElement>) => void;
1110
+
1111
+ /**
1112
+ * Form ID
1113
+ */
1114
+ id?: string;
1115
+
1116
+ /**
1117
+ * Form method
1118
+ */
1119
+ method?: 'get' | 'post';
1120
+
1121
+ /**
1122
+ * Form encoding type
1123
+ */
1124
+ encType?: string;
1125
+
1126
+ /**
1127
+ * Whether to disable HTML5 validation
1128
+ */
1129
+ noValidate?: boolean;
1130
+
1131
+ /**
1132
+ * Form autocomplete setting
1133
+ */
1134
+ autoComplete?: string;
1135
+ }
1136
+
1137
+ /**
1138
+ * Form Group component properties
1139
+ */
1140
+ export interface FormGroupProps extends BaseComponentProps {
1141
+ /**
1142
+ * Form control content
1143
+ */
1144
+ children: ReactNode;
1145
+
1146
+ /**
1147
+ * Label text
1148
+ */
1149
+ label?: string;
1150
+
1151
+ /**
1152
+ * Helper text displayed below the input
1153
+ */
1154
+ helperText?: ReactNode;
1155
+
1156
+ /**
1157
+ * ID of the form control this label is for
1158
+ */
1159
+ htmlFor?: string;
1160
+
1161
+ /**
1162
+ * Whether the field is required
1163
+ */
1164
+ required?: boolean;
1165
+
1166
+ /**
1167
+ * Whether the field is invalid
1168
+ */
1169
+ invalid?: boolean;
1170
+
1171
+ /**
1172
+ * Whether the field is valid
1173
+ */
1174
+ valid?: boolean;
1175
+
1176
+ /**
1177
+ * Size variant
1178
+ */
1179
+ size?: Size;
1180
+ }
1181
+
1182
+ /**
1183
+ * Input component properties
1184
+ */
1185
+ export interface InputProps extends BaseComponentProps {
1186
+ /**
1187
+ * Input type
1188
+ */
1189
+ type?: string;
1190
+
1191
+ /**
1192
+ * Input value
1193
+ */
1194
+ value?: string | number;
1195
+
1196
+ /**
1197
+ * Change handler
1198
+ */
1199
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
1200
+
1201
+ /**
1202
+ * Blur handler
1203
+ */
1204
+ onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
1205
+
1206
+ /**
1207
+ * Focus handler
1208
+ */
1209
+ onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;
1210
+
1211
+ /**
1212
+ * Placeholder text
1213
+ */
1214
+ placeholder?: string;
1215
+
1216
+ /**
1217
+ * Whether the input is required
1218
+ */
1219
+ required?: boolean;
1220
+
1221
+ /**
1222
+ * Whether the input is read-only
1223
+ */
1224
+ readOnly?: boolean;
1225
+
1226
+ /**
1227
+ * Input ID
1228
+ */
1229
+ id?: string;
1230
+
1231
+ /**
1232
+ * Input name
1233
+ */
1234
+ name?: string;
1235
+
1236
+ /**
1237
+ * Autocomplete attribute
1238
+ */
1239
+ autoComplete?: string;
1240
+
1241
+ /**
1242
+ * Whether the input should receive focus on render
1243
+ */
1244
+ autoFocus?: boolean;
1245
+
1246
+ /**
1247
+ * Size variant
1248
+ */
1249
+ size?: Size;
1250
+
1251
+ /**
1252
+ * Color variant
1253
+ */
1254
+ variant?: ThemeColor;
1255
+
1256
+ /**
1257
+ * Whether the input is invalid
1258
+ */
1259
+ invalid?: boolean;
1260
+
1261
+ /**
1262
+ * Whether the input is valid
1263
+ */
1264
+ valid?: boolean;
1265
+
1266
+ /**
1267
+ * Maximum length
1268
+ */
1269
+ maxLength?: number;
1270
+
1271
+ /**
1272
+ * Minimum length
1273
+ */
1274
+ minLength?: number;
1275
+
1276
+ /**
1277
+ * Input pattern
1278
+ */
1279
+ pattern?: string;
1280
+
1281
+ /**
1282
+ * Minimum value (for number inputs)
1283
+ */
1284
+ min?: number | string;
1285
+
1286
+ /**
1287
+ * Maximum value (for number inputs)
1288
+ */
1289
+ max?: number | string;
1290
+
1291
+ /**
1292
+ * Step value (for number inputs)
1293
+ */
1294
+ step?: number | string;
1295
+
1296
+ /**
1297
+ * Accessible label (if no visible label)
1298
+ */
1299
+ ariaLabel?: string;
1300
+
1301
+ /**
1302
+ * ID of element that describes this input
1303
+ */
1304
+ ariaDescribedBy?: string;
1305
+ }
1306
+
1307
+ /**
1308
+ * Select option
1309
+ */
1310
+ export interface SelectOption {
1311
+ /**
1312
+ * Option value
1313
+ */
1314
+ value: string;
1315
+
1316
+ /**
1317
+ * Option display label
1318
+ */
1319
+ label: string;
1320
+
1321
+ /**
1322
+ * Whether the option is disabled
1323
+ */
1324
+ disabled?: boolean;
1325
+ }
1326
+
1327
+ /**
1328
+ * Select component properties
1329
+ */
1330
+ export interface SelectProps extends BaseComponentProps {
1331
+ /**
1332
+ * Select options
1333
+ */
1334
+ options: SelectOption[];
1335
+
1336
+ /**
1337
+ * Selected value(s)
1338
+ */
1339
+ value?: string | string[];
1340
+
1341
+ /**
1342
+ * Change handler
1343
+ */
1344
+ onChange?: (event: React.ChangeEvent<HTMLSelectElement>) => void;
1345
+
1346
+ /**
1347
+ * Blur handler
1348
+ */
1349
+ onBlur?: (event: React.FocusEvent<HTMLSelectElement>) => void;
1350
+
1351
+ /**
1352
+ * Focus handler
1353
+ */
1354
+ onFocus?: (event: React.FocusEvent<HTMLSelectElement>) => void;
1355
+
1356
+ /**
1357
+ * Placeholder text
1358
+ */
1359
+ placeholder?: string;
1360
+
1361
+ /**
1362
+ * Whether the select is required
1363
+ */
1364
+ required?: boolean;
1365
+
1366
+ /**
1367
+ * Select ID
1368
+ */
1369
+ id?: string;
1370
+
1371
+ /**
1372
+ * Select name
1373
+ */
1374
+ name?: string;
1375
+
1376
+ /**
1377
+ * Size variant
1378
+ */
1379
+ size?: Size;
1380
+
1381
+ /**
1382
+ * Whether the select is invalid
1383
+ */
1384
+ invalid?: boolean;
1385
+
1386
+ /**
1387
+ * Whether the select is valid
1388
+ */
1389
+ valid?: boolean;
1390
+
1391
+ /**
1392
+ * Whether multiple options can be selected
1393
+ */
1394
+ multiple?: boolean;
1395
+
1396
+ /**
1397
+ * Accessible label (if no visible label)
1398
+ */
1399
+ ariaLabel?: string;
1400
+
1401
+ /**
1402
+ * ID of element that describes this select
1403
+ */
1404
+ ariaDescribedBy?: string;
1405
+ }
1406
+
1407
+ /**
1408
+ * Checkbox component properties
1409
+ */
1410
+ export interface CheckboxProps extends BaseComponentProps {
1411
+ /**
1412
+ * Checkbox label
1413
+ */
1414
+ label?: ReactNode;
1415
+
1416
+ /**
1417
+ * Whether the checkbox is checked
1418
+ */
1419
+ checked?: boolean;
1420
+
1421
+ /**
1422
+ * Change handler
1423
+ */
1424
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
1425
+
1426
+ /**
1427
+ * Whether the checkbox is required
1428
+ */
1429
+ required?: boolean;
1430
+
1431
+ /**
1432
+ * Checkbox ID
1433
+ */
1434
+ id?: string;
1435
+
1436
+ /**
1437
+ * Checkbox name
1438
+ */
1439
+ name?: string;
1440
+
1441
+ /**
1442
+ * Checkbox value
1443
+ */
1444
+ value?: string;
1445
+
1446
+ /**
1447
+ * Whether the checkbox is invalid
1448
+ */
1449
+ invalid?: boolean;
1450
+
1451
+ /**
1452
+ * Whether the checkbox is valid
1453
+ */
1454
+ valid?: boolean;
1455
+
1456
+ /**
1457
+ * Whether the checkbox is in indeterminate state
1458
+ */
1459
+ indeterminate?: boolean;
1460
+
1461
+ /**
1462
+ * Accessible label (if no visible label)
1463
+ */
1464
+ ariaLabel?: string;
1465
+
1466
+ /**
1467
+ * ID of element that describes this checkbox
1468
+ */
1469
+ ariaDescribedBy?: string;
1470
+ }
1471
+
1472
+ /**
1473
+ * Radio component properties
1474
+ */
1475
+ export interface RadioProps extends BaseComponentProps {
1476
+ /**
1477
+ * Radio label
1478
+ */
1479
+ label?: ReactNode;
1480
+
1481
+ /**
1482
+ * Whether the radio is checked
1483
+ */
1484
+ checked?: boolean;
1485
+
1486
+ /**
1487
+ * Change handler
1488
+ */
1489
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
1490
+
1491
+ /**
1492
+ * Whether the radio is required
1493
+ */
1494
+ required?: boolean;
1495
+
1496
+ /**
1497
+ * Radio ID
1498
+ */
1499
+ id?: string;
1500
+
1501
+ /**
1502
+ * Radio name
1503
+ */
1504
+ name?: string;
1505
+
1506
+ /**
1507
+ * Radio value
1508
+ */
1509
+ value?: string;
1510
+
1511
+ /**
1512
+ * Whether the radio is invalid
1513
+ */
1514
+ invalid?: boolean;
1515
+
1516
+ /**
1517
+ * Whether the radio is valid
1518
+ */
1519
+ valid?: boolean;
1520
+
1521
+ /**
1522
+ * Accessible label (if no visible label)
1523
+ */
1524
+ ariaLabel?: string;
1525
+
1526
+ /**
1527
+ * ID of element that describes this radio
1528
+ */
1529
+ ariaDescribedBy?: string;
1530
+ }
1531
+
1532
+ /**
1533
+ * Textarea component properties
1534
+ */
1535
+ export interface TextareaProps extends BaseComponentProps {
1536
+ /**
1537
+ * Textarea value
1538
+ */
1539
+ value?: string;
1540
+
1541
+ /**
1542
+ * Change handler
1543
+ */
1544
+ onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
1545
+
1546
+ /**
1547
+ * Blur handler
1548
+ */
1549
+ onBlur?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
1550
+
1551
+ /**
1552
+ * Focus handler
1553
+ */
1554
+ onFocus?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
1555
+
1556
+ /**
1557
+ * Placeholder text
1558
+ */
1559
+ placeholder?: string;
1560
+
1561
+ /**
1562
+ * Whether the textarea is required
1563
+ */
1564
+ required?: boolean;
1565
+
1566
+ /**
1567
+ * Whether the textarea is read-only
1568
+ */
1569
+ readOnly?: boolean;
1570
+
1571
+ /**
1572
+ * Textarea ID
1573
+ */
1574
+ id?: string;
1575
+
1576
+ /**
1577
+ * Textarea name
1578
+ */
1579
+ name?: string;
1580
+
1581
+ /**
1582
+ * Number of rows
1583
+ */
1584
+ rows?: number;
1585
+
1586
+ /**
1587
+ * Number of columns
1588
+ */
1589
+ cols?: number;
1590
+
1591
+ /**
1592
+ * Maximum length
1593
+ */
1594
+ maxLength?: number;
1595
+
1596
+ /**
1597
+ * Minimum length
1598
+ */
1599
+ minLength?: number;
1600
+
1601
+ /**
1602
+ * Size variant
1603
+ */
1604
+ size?: Size;
1605
+
1606
+ /**
1607
+ * Color variant
1608
+ */
1609
+ variant?: ThemeColor;
1610
+
1611
+ /**
1612
+ * Whether the textarea is invalid
1613
+ */
1614
+ invalid?: boolean;
1615
+
1616
+ /**
1617
+ * Whether the textarea is valid
1618
+ */
1619
+ valid?: boolean;
1620
+
1621
+ /**
1622
+ * Whether the textarea should receive focus on render
1623
+ */
1624
+ autoFocus?: boolean;
1625
+
1626
+ /**
1627
+ * Accessible label (if no visible label)
1628
+ */
1629
+ ariaLabel?: string;
1630
+
1631
+ /**
1632
+ * ID of element that describes this textarea
1633
+ */
1634
+ ariaDescribedBy?: string;
1635
+ }
1636
+
1637
+ /**
1638
+ * Avatar size options
1639
+ */
1640
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
1641
+
1642
+ /**
1643
+ * Avatar component properties
1644
+ */
1645
+ export interface AvatarProps extends BaseComponentProps {
1646
+ /**
1647
+ * Avatar image source URL
1648
+ */
1649
+ src?: string;
1650
+
1651
+ /**
1652
+ * Alt text for the avatar image
1653
+ */
1654
+ alt?: string;
1655
+
1656
+ /**
1657
+ * Initials to display when no image is available
1658
+ */
1659
+ initials?: string;
1660
+
1661
+ /**
1662
+ * Icon to display when no image or initials are available
1663
+ */
1664
+ icon?: ReactNode;
1665
+
1666
+ /**
1667
+ * Size variant for the avatar
1668
+ */
1669
+ size?: AvatarSize;
1670
+
1671
+ /**
1672
+ * Whether to make the avatar circular
1673
+ */
1674
+ circle?: boolean;
1675
+
1676
+ /**
1677
+ * Optional click handler
1678
+ */
1679
+ onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
1680
+ }
1681
+
1682
+ /**
1683
+ * Avatar Group component properties
1684
+ */
1685
+ export interface AvatarGroupProps extends BaseComponentProps {
1686
+ /**
1687
+ * Child Avatar components
1688
+ */
1689
+ children: ReactNode;
1690
+
1691
+ /**
1692
+ * Maximum number of avatars to display before showing a "+X" indicator
1693
+ */
1694
+ max?: number;
1695
+
1696
+ /**
1697
+ * Whether to display avatars in a stacked formation
1698
+ */
1699
+ stacked?: boolean;
1700
+
1701
+ /**
1702
+ * Custom text for the "more" indicator
1703
+ */
1704
+ moreText?: string;
1705
+ }
1706
+
1707
+ /**
1708
+ * Modal component props
1709
+ */
1710
+ export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
1711
+ /**
1712
+ * Whether the modal is open
1713
+ */
1714
+ isOpen?: boolean;
1715
+
1716
+ /**
1717
+ * Callback when the modal's open state changes
1718
+ */
1719
+ onOpenChange?: (isOpen: boolean) => void;
1720
+
1721
+ /**
1722
+ * Callback when the modal is opened
1723
+ */
1724
+ onOpen?: () => void;
1725
+
1726
+ /**
1727
+ * Callback when the modal is closed
1728
+ */
1729
+ onClose?: () => void;
1730
+
1731
+ /**
1732
+ * Modal title displayed in the header
1733
+ */
1734
+ title?: React.ReactNode;
1735
+
1736
+ /**
1737
+ * Modal subtitle displayed below the title
1738
+ */
1739
+ subtitle?: React.ReactNode;
1740
+
1741
+ /**
1742
+ * Modal size
1743
+ */
1744
+ size?: 'sm' | 'md' | 'lg' | 'xl';
1745
+
1746
+ /**
1747
+ * Whether to close when backdrop is clicked
1748
+ */
1749
+ backdrop?: boolean;
1750
+
1751
+ /**
1752
+ * Whether to close when the escape key is pressed
1753
+ */
1754
+ keyboard?: boolean;
1755
+
1756
+ /**
1757
+ * Whether to show the close button
1758
+ */
1759
+ closeButton?: boolean;
1760
+
1761
+ /**
1762
+ * Content for the modal footer
1763
+ */
1764
+ footer?: React.ReactNode;
1765
+ }
1766
+
1767
+ /**
1768
+ * Breadcrumb item interface
1769
+ */
1770
+ export interface BreadcrumbItem {
1771
+ /**
1772
+ * Item label text
1773
+ */
1774
+ label: string;
1775
+
1776
+ /**
1777
+ * Optional URL for the breadcrumb item
1778
+ */
1779
+ href?: string;
1780
+
1781
+ /**
1782
+ * Whether this item is active/current
1783
+ */
1784
+ active?: boolean;
1785
+
1786
+ /**
1787
+ * Icon name from Phosphor Icons
1788
+ */
1789
+ icon?: string;
1790
+
1791
+ /**
1792
+ * Optional click handler
1793
+ */
1794
+ onClick?: (event: MouseEvent) => void;
1795
+ }
1796
+
1797
+ /**
1798
+ * Breadcrumb options interface
1799
+ */
1800
+ export interface BreadcrumbOptions {
1801
+ /**
1802
+ * Array of breadcrumb items
1803
+ */
1804
+ items?: BreadcrumbItem[];
1805
+
1806
+ /**
1807
+ * Divider character or string between items
1808
+ */
1809
+ divider?: string;
1810
+
1811
+ /**
1812
+ * Additional CSS class names
1813
+ */
1814
+ className?: string;
1815
+
1816
+ /**
1817
+ * Accessible label for the breadcrumb navigation
1818
+ */
1819
+ ariaLabel?: string;
1820
+ }
1821
+
1822
+ /**
1823
+ * Breadcrumb instance interface
1824
+ */
1825
+ export interface BreadcrumbInstance {
1826
+ /**
1827
+ * Update the breadcrumb with new options
1828
+ */
1829
+ update: (options: Partial<BreadcrumbOptions>) => void;
1830
+
1831
+ /**
1832
+ * Destroy the breadcrumb component
1833
+ */
1834
+ destroy: () => void;
1835
+ }
1836
+
1837
+ /**
1838
+ * Message item interface
1839
+ */
1840
+ export interface MessageItem {
1841
+ /**
1842
+ * Unique identifier for the message
1843
+ */
1844
+ id: string;
1845
+
1846
+ /**
1847
+ * Message text content
1848
+ */
1849
+ text?: string;
1850
+
1851
+ /**
1852
+ * Image URL for image messages
1853
+ */
1854
+ image?: string;
1855
+
1856
+ /**
1857
+ * File information for file messages
1858
+ */
1859
+ file?: {
1860
+ /**
1861
+ * File name
1862
+ */
1863
+ name: string;
1864
+
1865
+ /**
1866
+ * File size (formatted string)
1867
+ */
1868
+ size: string;
1869
+ };
1870
+
1871
+ /**
1872
+ * Message timestamp
1873
+ */
1874
+ time: string;
1875
+
1876
+ /**
1877
+ * Whether the message is from the current user
1878
+ */
1879
+ isSelf?: boolean;
1880
+ }
1881
+
1882
+ /**
1883
+ * Messages component properties
1884
+ */
1885
+ export interface MessagesProps extends BaseComponentProps {
1886
+ /**
1887
+ * Array of message items to display
1888
+ */
1889
+ messages: MessageItem[];
1890
+
1891
+ /**
1892
+ * Avatar image URL for the other person
1893
+ */
1894
+ otherAvatar?: string;
1895
+
1896
+ /**
1897
+ * Avatar image URL for the current user
1898
+ */
1899
+ selfAvatar?: string;
1900
+
1901
+ /**
1902
+ * Name of the other person
1903
+ */
1904
+ otherName?: string;
1905
+
1906
+ /**
1907
+ * Custom width for the messages container
1908
+ */
1909
+ width?: string;
1910
+
1911
+ /**
1912
+ * Callback when a new message is sent
1913
+ */
1914
+ onSendMessage?: (text: string) => void;
1915
+
1916
+ /**
1917
+ * Placeholder text for the input field
1918
+ */
1919
+ placeholder?: string;
1920
+
1921
+ /**
1922
+ * Maximum height for the messages body
1923
+ */
1924
+ bodyHeight?: string;
1925
+
1926
+ /**
1927
+ * Unique identifier for the messages component
1928
+ */
1929
+ id?: string;
1930
+ }
1931
+
1932
+ /**
1933
+ * Popover component properties
1934
+ */
1935
+ export interface PopoverTriggerProps {
1936
+ /**
1937
+ * The element that will trigger the popover
1938
+ */
1939
+ children: ReactNode;
1940
+
1941
+ /**
1942
+ * How the popover is triggered
1943
+ */
1944
+ trigger?: 'hover' | 'click';
1945
+
1946
+ /**
1947
+ * Popover reference passed from PopoverContext
1948
+ */
1949
+ popoverId?: string;
1950
+ }
1951
+
1952
+ export interface PopoverProps {
1953
+ /**
1954
+ * Content to be displayed in the popover
1955
+ */
1956
+ content: ReactNode;
1957
+
1958
+ /**
1959
+ * The position of the popover relative to the trigger
1960
+ */
1961
+ position?: 'top' | 'bottom' | 'left' | 'right' | 'auto';
1962
+
1963
+ /**
1964
+ * How the popover is triggered
1965
+ */
1966
+ trigger?: 'hover' | 'click';
1967
+
1968
+ /**
1969
+ * Additional CSS class for the popover
1970
+ */
1971
+ className?: string;
1972
+
1973
+ /**
1974
+ * Delay before showing the popover (in milliseconds)
1975
+ */
1976
+ delay?: number;
1977
+
1978
+ /**
1979
+ * Offset from the trigger element (in pixels)
1980
+ */
1981
+ offset?: number;
1982
+
1983
+ /**
1984
+ * Whether the popover should be open initially
1985
+ */
1986
+ defaultOpen?: boolean;
1987
+
1988
+ /**
1989
+ * Controlled state of the popover
1990
+ */
1991
+ isOpen?: boolean;
1992
+
1993
+ /**
1994
+ * Callback when the popover open state changes
1995
+ */
1996
+ onOpenChange?: (isOpen: boolean) => void;
1997
+
1998
+ /**
1999
+ * Whether to close the popover when clicking outside
2000
+ */
2001
+ closeOnClickOutside?: boolean;
2002
+
2003
+ /**
2004
+ * Whether to close the popover when pressing escape key
2005
+ */
2006
+ closeOnEscape?: boolean;
2007
+
2008
+ /**
2009
+ * Optional ID for the popover
2010
+ */
2011
+ id?: string;
2012
+
2013
+ /**
2014
+ * Children content (removed in favor of using PopoverTrigger)
2015
+ */
2016
+ children?: ReactNode;
2017
+ }
2018
+
2019
+ /**
2020
+ * The trigger method for the dropdown menu
2021
+ */
2022
+ export type DropdownTrigger = 'click' | 'hover';
2023
+
2024
+ /**
2025
+ * The placement of the dropdown menu
2026
+ */
2027
+ export type DropdownPlacement =
2028
+ | 'bottom-start'
2029
+ | 'bottom-end'
2030
+ | 'top-start'
2031
+ | 'top-end'
2032
+ | 'left-start'
2033
+ | 'left-end'
2034
+ | 'right-start'
2035
+ | 'right-end';
2036
+
2037
+ /**
2038
+ * Dropdown component properties
2039
+ */
2040
+ export interface DropdownProps extends BaseComponentProps {
2041
+ /**
2042
+ * Dropdown trigger element
2043
+ */
2044
+ children: ReactNode;
2045
+
2046
+ /**
2047
+ * Dropdown menu content
2048
+ */
2049
+ menu: ReactNode;
2050
+
2051
+ /**
2052
+ * How the dropdown is triggered
2053
+ */
2054
+ trigger?: DropdownTrigger;
2055
+
2056
+ /**
2057
+ * The placement of the dropdown menu
2058
+ */
2059
+ placement?: DropdownPlacement;
2060
+
2061
+ /**
2062
+ * Whether the dropdown is initially open
2063
+ */
2064
+ defaultOpen?: boolean;
2065
+
2066
+ /**
2067
+ * Controlled state of the dropdown
2068
+ */
2069
+ isOpen?: boolean;
2070
+
2071
+ /**
2072
+ * Callback when the dropdown open state changes
2073
+ */
2074
+ onOpenChange?: (isOpen: boolean) => void;
2075
+
2076
+ /**
2077
+ * Offset from the trigger element (in pixels)
2078
+ */
2079
+ offset?: number;
2080
+
2081
+ /**
2082
+ * Whether the dropdown should be closed when clicking outside
2083
+ */
2084
+ closeOnClickOutside?: boolean;
2085
+
2086
+ /**
2087
+ * Whether the dropdown should be closed when pressing escape key
2088
+ */
2089
+ closeOnEscape?: boolean;
2090
+
2091
+ /**
2092
+ * Max height for the dropdown menu
2093
+ */
2094
+ maxHeight?: string;
2095
+
2096
+ /**
2097
+ * Min width for the dropdown menu
2098
+ */
2099
+ minWidth?: string | number;
2100
+
2101
+ /**
2102
+ * Color variant for the dropdown trigger
2103
+ */
2104
+ variant?: ThemeColor;
2105
+
2106
+ /**
2107
+ * Optional ID for the dropdown
2108
+ */
2109
+ id?: string;
2110
+ }
2111
+
2112
+ /**
2113
+ * Dropdown menu item properties
2114
+ */
2115
+ export interface DropdownItemProps extends BaseComponentProps {
2116
+ /**
2117
+ * Item content
2118
+ */
2119
+ children: ReactNode;
2120
+
2121
+ /**
2122
+ * Item href
2123
+ */
2124
+ href?: string;
2125
+
2126
+ /**
2127
+ * Whether item is active
2128
+ */
2129
+ active?: boolean;
2130
+
2131
+ /**
2132
+ * Whether item is disabled
2133
+ */
2134
+ disabled?: boolean;
2135
+
2136
+ /**
2137
+ * Item icon
2138
+ */
2139
+ icon?: ReactNode;
2140
+
2141
+ /**
2142
+ * Item click handler
2143
+ */
2144
+ onClick?: (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
2145
+
2146
+ /**
2147
+ * Optional custom link component
2148
+ */
2149
+ LinkComponent?: React.ElementType;
2150
+ }
2151
+
2152
+ /**
2153
+ * Dropdown divider properties
2154
+ */
2155
+ export interface DropdownDividerProps {
2156
+ /**
2157
+ * Additional CSS class names
2158
+ */
2159
+ className?: string;
2160
+ }
2161
+
2162
+ /**
2163
+ * Dropdown header properties
2164
+ */
2165
+ export interface DropdownHeaderProps {
2166
+ /**
2167
+ * Header content
2168
+ */
2169
+ children: ReactNode;
2170
+
2171
+ /**
2172
+ * Additional CSS class names
2173
+ */
2174
+ className?: string;
2175
+ }
2176
+
2177
+ /**
2178
+ * Progress component properties
2179
+ */
2180
+ export interface ProgressProps extends BaseComponentProps {
2181
+ /**
2182
+ * Progress value (0-100)
2183
+ */
2184
+ value: number;
2185
+
2186
+ /**
2187
+ * Progress bar color variant
2188
+ */
2189
+ variant?: ThemeColor;
2190
+
2191
+ /**
2192
+ * Progress bar size
2193
+ */
2194
+ size?: Size;
2195
+
2196
+ /**
2197
+ * Accessible label for screen readers
2198
+ */
2199
+ ariaLabel?: string;
2200
+ }
2201
+
2202
+ /**
2203
+ * Rating component properties
2204
+ */
2205
+ export interface RatingProps extends BaseComponentProps {
2206
+ /**
2207
+ * The rating value (0-5)
2208
+ */
2209
+ value?: number;
2210
+
2211
+ /**
2212
+ * Default value for uncontrolled mode
2213
+ */
2214
+ defaultValue?: number;
2215
+
2216
+ /**
2217
+ * Maximum possible rating value
2218
+ */
2219
+ maxValue?: number;
2220
+
2221
+ /**
2222
+ * Whether to allow half-star ratings
2223
+ */
2224
+ allowHalf?: boolean;
2225
+
2226
+ /**
2227
+ * Whether the rating is read-only
2228
+ */
2229
+ readOnly?: boolean;
2230
+
2231
+ /**
2232
+ * Size variant
2233
+ */
2234
+ size?: Size;
2235
+
2236
+ /**
2237
+ * Color theme
2238
+ */
2239
+ color?: ThemeColor;
2240
+
2241
+ /**
2242
+ * Optional callback when rating changes
2243
+ */
2244
+ onChange?: (value: number) => void;
2245
+
2246
+ /**
2247
+ * Optional label for the rating component (for accessibility)
2248
+ */
2249
+ label?: string;
2250
+
2251
+ /**
2252
+ * ID for the rating component (for accessibility)
2253
+ */
2254
+ id?: string;
2255
+
2256
+ /**
2257
+ * Whether to use the vanilla JS implementation
2258
+ */
2259
+ useVanillaJS?: boolean;
2260
+ }
2261
+
2262
+ /**
2263
+ * VideoPlayer component properties
2264
+ */
2265
+ export interface VideoQuality {
2266
+ label: string;
2267
+ src: string;
2268
+ resolution?: string;
2269
+ }
2270
+
2271
+ export interface VideoSubtitle {
2272
+ label: string;
2273
+ src: string;
2274
+ srcLang: string;
2275
+ default?: boolean;
2276
+ }
2277
+
2278
+ export interface VideoChapter {
2279
+ title: string;
2280
+ startTime: number;
2281
+ endTime?: number;
2282
+ }
2283
+
2284
+ export interface VideoPlayerProps extends BaseComponentProps {
2285
+ /**
2286
+ * Video source URL or YouTube video ID
2287
+ */
2288
+ src: string;
2289
+
2290
+ /**
2291
+ * Video player type
2292
+ */
2293
+ type?: 'video' | 'youtube';
2294
+
2295
+ /**
2296
+ * YouTube video ID (alternative to src for YouTube videos)
2297
+ */
2298
+ youtubeId?: string;
2299
+
2300
+ /**
2301
+ * Poster image URL
2302
+ */
2303
+ poster?: string;
2304
+
2305
+ /**
2306
+ * Whether video should autoplay
2307
+ */
2308
+ autoplay?: boolean;
2309
+
2310
+ /**
2311
+ * Whether video should loop
2312
+ */
2313
+ loop?: boolean;
2314
+
2315
+ /**
2316
+ * Whether video should be muted
2317
+ */
2318
+ muted?: boolean;
2319
+
2320
+ /**
2321
+ * Whether to show custom controls
2322
+ */
2323
+ controls?: boolean;
2324
+
2325
+ /**
2326
+ * Video preload setting
2327
+ */
2328
+ preload?: 'none' | 'metadata' | 'auto';
2329
+
2330
+ /**
2331
+ * Video width
2332
+ */
2333
+ width?: string | number;
2334
+
2335
+ /**
2336
+ * Video height
2337
+ */
2338
+ height?: string | number;
2339
+
2340
+ /**
2341
+ * Aspect ratio (e.g., '16:9', '4:3')
2342
+ */
2343
+ aspectRatio?: string;
2344
+
2345
+ /**
2346
+ * Available playback rates
2347
+ */
2348
+ playbackRates?: number[];
2349
+
2350
+ /**
2351
+ * Available video qualities
2352
+ */
2353
+ quality?: VideoQuality[];
2354
+
2355
+ /**
2356
+ * Available subtitles
2357
+ */
2358
+ subtitles?: VideoSubtitle[];
2359
+
2360
+ /**
2361
+ * Video chapters for navigation
2362
+ */
2363
+ chapters?: VideoChapter[];
2364
+
2365
+ /**
2366
+ * Thumbnail images for scrubbing
2367
+ */
2368
+ thumbnails?: string[];
2369
+
2370
+ /**
2371
+ * Whether to show download button
2372
+ */
2373
+ showDownload?: boolean;
2374
+
2375
+ /**
2376
+ * Whether to show share button
2377
+ */
2378
+ showShare?: boolean;
2379
+
2380
+ /**
2381
+ * Whether to show settings menu
2382
+ */
2383
+ showSettings?: boolean;
2384
+
2385
+ /**
2386
+ * Enable ambient mode (YouTube-like background glow)
2387
+ */
2388
+ ambientMode?: boolean;
2389
+
2390
+ /**
2391
+ * Play event handler
2392
+ */
2393
+ onPlay?: () => void;
2394
+
2395
+ /**
2396
+ * Pause event handler
2397
+ */
2398
+ onPause?: () => void;
2399
+
2400
+ /**
2401
+ * Ended event handler
2402
+ */
2403
+ onEnded?: () => void;
2404
+
2405
+ /**
2406
+ * Time update event handler
2407
+ */
2408
+ onTimeUpdate?: (currentTime: number) => void;
2409
+
2410
+ /**
2411
+ * Volume change event handler
2412
+ */
2413
+ onVolumeChange?: (volume: number) => void;
2414
+
2415
+ /**
2416
+ * Fullscreen change event handler
2417
+ */
2418
+ onFullscreenChange?: (isFullscreen: boolean) => void;
2419
+
2420
+ /**
2421
+ * Error event handler
2422
+ */
2423
+ onError?: (error: Event) => void;
2424
+ }
2425
+
2426
+ /**
2427
+ * PhotoViewer component properties
2428
+ */
2429
+ /**
2430
+ * Interface for image objects used in PhotoViewer
2431
+ */
2432
+ export interface ImageType {
2433
+ src: string;
2434
+ alt?: string;
2435
+ thumbnail?: string;
2436
+ title?: string;
2437
+ description?: string;
2438
+ date?: string;
2439
+ author?: string;
2440
+ tags?: string[];
2441
+ }
2442
+
2443
+ export interface PhotoViewerProps extends BaseComponentProps {
2444
+ /**
2445
+ * Array of image URLs or image objects to display in the viewer
2446
+ */
2447
+ images: (string | ImageType)[];
2448
+ /**
2449
+ * Index of the image to show first
2450
+ * @default 0
2451
+ */
2452
+ startIndex?: number;
2453
+ /**
2454
+ * Additional className for the root element
2455
+ */
2456
+ className?: string;
2457
+ /**
2458
+ * Whether the viewer is disabled
2459
+ * @default false
2460
+ */
2461
+ disabled?: boolean;
2462
+ /**
2463
+ * Enable keyboard navigation (arrow keys, escape)
2464
+ * @default true
2465
+ */
2466
+ enableKeyboardNavigation?: boolean;
2467
+ /**
2468
+ * Enable touch gestures for mobile devices
2469
+ * @default true
2470
+ */
2471
+ enableGestures?: boolean;
2472
+ /**
2473
+ * Enable fullscreen mode
2474
+ * @default true
2475
+ */
2476
+ enableFullscreen?: boolean;
2477
+ /**
2478
+ * Position of thumbnails
2479
+ * @default 'bottom'
2480
+ */
2481
+ thumbnailPosition?: 'bottom' | 'top' | 'left' | 'right' | 'none';
2482
+ /**
2483
+ * Callback when image changes
2484
+ */
2485
+ onImageChange?: (index: number) => void;
2486
+ /**
2487
+ * Callback when viewer is closed
2488
+ */
2489
+ onClose?: () => void;
2490
+ }
2491
+
2492
+ /**
2493
+ * Card component props
2494
+ */
2495
+ export interface CardProps extends BaseComponentProps {
2496
+ /**
2497
+ * Card header content
2498
+ */
2499
+ header?: ReactNode;
2500
+
2501
+ /**
2502
+ * Card image source URL
2503
+ */
2504
+ image?: string;
2505
+
2506
+ /**
2507
+ * Alternative text for the image
2508
+ */
2509
+ imageAlt?: string;
2510
+
2511
+ /**
2512
+ * Card title
2513
+ */
2514
+ title?: ReactNode;
2515
+
2516
+ /**
2517
+ * Card text content
2518
+ */
2519
+ text?: ReactNode;
2520
+
2521
+ /**
2522
+ * Card actions (buttons, links, etc.)
2523
+ */
2524
+ actions?: ReactNode;
2525
+
2526
+ /**
2527
+ * Card icon
2528
+ */
2529
+ icon?: ReactNode;
2530
+
2531
+ /**
2532
+ * Card footer content
2533
+ */
2534
+ footer?: ReactNode;
2535
+
2536
+ /**
2537
+ * Row layout (horizontal card)
2538
+ */
2539
+ row?: boolean;
2540
+
2541
+ /**
2542
+ * Flat style (no padding on image container)
2543
+ */
2544
+ flat?: boolean;
2545
+
2546
+ /**
2547
+ * Active state
2548
+ */
2549
+ active?: boolean;
2550
+
2551
+ /**
2552
+ * Card content (body)
2553
+ */
2554
+ children?: ReactNode;
2555
+
2556
+ /**
2557
+ * Optional click handler
2558
+ */
2559
+ onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;
2560
+ }
2561
+
2562
+ /**
2563
+ * Elevation Card component props
2564
+ */
2565
+ export interface ElevationCardProps extends CardProps {
2566
+ /**
2567
+ * CSS class for elevation effect
2568
+ */
2569
+ elevationClass?: string;
2570
+ }
2571
+
2572
+ /**
2573
+ * Card hook options
2574
+ */
2575
+ export interface UseCardOptions {
2576
+ /**
2577
+ * Enable elevation effect on hover
2578
+ */
2579
+ elevationEffect?: boolean;
2580
+
2581
+ /**
2582
+ * CSS class for elevation effect
2583
+ */
2584
+ elevationClass?: string;
2585
+
2586
+ /**
2587
+ * Enable flip effect
2588
+ */
2589
+ flipEffect?: boolean;
2590
+
2591
+ /**
2592
+ * Trigger for flip effect: 'click' or 'hover'
2593
+ */
2594
+ flipTrigger?: 'click' | 'hover';
2595
+
2596
+ /**
2597
+ * Make card focusable and add focus effect
2598
+ */
2599
+ focusEffect?: boolean;
2600
+
2601
+ /**
2602
+ * Make card clickable
2603
+ */
2604
+ clickable?: boolean;
2605
+
2606
+ /**
2607
+ * Click handler for clickable card
2608
+ */
2609
+ onClick?: (event: React.MouseEvent) => void;
2610
+ }
2611
+
2612
+ /**
2613
+ * Card hook return value
2614
+ */
2615
+ export interface UseCardReturn {
2616
+ /**
2617
+ * Reference to the card element
2618
+ */
2619
+ cardRef: React.RefObject<HTMLDivElement | null>;
2620
+
2621
+ /**
2622
+ * Reference to the front side of a flip card
2623
+ */
2624
+ frontRef: React.RefObject<HTMLDivElement | null>;
2625
+
2626
+ /**
2627
+ * Reference to the back side of a flip card
2628
+ */
2629
+ backRef: React.RefObject<HTMLDivElement | null>;
2630
+
2631
+ /**
2632
+ * Whether the card is flipped
2633
+ */
2634
+ isFlipped: boolean;
2635
+
2636
+ /**
2637
+ * Whether the card is elevated
2638
+ */
2639
+ isElevated: boolean;
2640
+
2641
+ /**
2642
+ * Whether the card is focused
2643
+ */
2644
+ isFocused: boolean;
2645
+
2646
+ /**
2647
+ * Whether the card is hovered
2648
+ */
2649
+ isHovered: boolean;
2650
+
2651
+ /**
2652
+ * Click event handler
2653
+ */
2654
+ handleClick: (event: React.MouseEvent) => void;
2655
+
2656
+ /**
2657
+ * Keyboard event handler
2658
+ */
2659
+ handleKeyDown: (event: React.KeyboardEvent) => void;
2660
+
2661
+ /**
2662
+ * Mouse enter event handler
2663
+ */
2664
+ handleMouseEnter: () => void;
2665
+
2666
+ /**
2667
+ * Mouse leave event handler
2668
+ */
2669
+ handleMouseLeave: () => void;
2670
+
2671
+ /**
2672
+ * Focus event handler
2673
+ */
2674
+ handleFocus: () => void;
2675
+
2676
+ /**
2677
+ * Blur event handler
2678
+ */
2679
+ handleBlur: () => void;
2680
+
2681
+ /**
2682
+ * Get all card props combined
2683
+ */
2684
+ getCardProps: () => {
2685
+ className: string;
2686
+ ref: React.RefObject<HTMLDivElement | null>;
2687
+ tabIndex?: number;
2688
+ role?: string;
2689
+ onMouseEnter: () => void;
2690
+ onMouseLeave: () => void;
2691
+ onFocus: () => void;
2692
+ onBlur: () => void;
2693
+ onClick: (event: React.MouseEvent) => void;
2694
+ onKeyDown: (event: React.KeyboardEvent) => void;
2695
+ };
2696
+ }
2697
+
2698
+ /**
2699
+ * Slider slide item interface
2700
+ */
2701
+ export interface SliderSlide {
2702
+ /**
2703
+ * Unique identifier for the slide
2704
+ */
2705
+ id: string;
2706
+
2707
+ /**
2708
+ * Slide content
2709
+ */
2710
+ content: ReactNode;
2711
+
2712
+ /**
2713
+ * Optional image source
2714
+ */
2715
+ image?: string;
2716
+
2717
+ /**
2718
+ * Optional image alt text
2719
+ */
2720
+ alt?: string;
2721
+
2722
+ /**
2723
+ * Optional title
2724
+ */
2725
+ title?: string;
2726
+
2727
+ /**
2728
+ * Optional description
2729
+ */
2730
+ description?: string;
2731
+
2732
+ /**
2733
+ * Optional link URL
2734
+ */
2735
+ href?: string;
2736
+
2737
+ /**
2738
+ * Optional click handler
2739
+ */
2740
+ onClick?: () => void;
2741
+
2742
+ /**
2743
+ * Custom CSS class for the slide
2744
+ */
2745
+ className?: string;
2746
+
2747
+ /**
2748
+ * Custom data attributes
2749
+ */
2750
+ data?: Record<string, string>;
2751
+
2752
+ /**
2753
+ * Lazy loading image source
2754
+ */
2755
+ dataSrc?: string;
2756
+
2757
+ /**
2758
+ * Background image
2759
+ */
2760
+ backgroundImage?: string;
2761
+
2762
+ /**
2763
+ * Video source for video slides
2764
+ */
2765
+ video?: {
2766
+ src: string;
2767
+ poster?: string;
2768
+ autoplay?: boolean;
2769
+ loop?: boolean;
2770
+ muted?: boolean;
2771
+ };
2772
+ }
2773
+
2774
+ /**
2775
+ * Slider breakpoint configuration
2776
+ */
2777
+ export interface SliderBreakpoint {
2778
+ /**
2779
+ * Number of slides to show
2780
+ */
2781
+ slidesToShow?: number;
2782
+
2783
+ /**
2784
+ * Slides per view
2785
+ */
2786
+ slidesPerView?: number | 'auto';
2787
+
2788
+ /**
2789
+ * Number of slides to scroll
2790
+ */
2791
+ slidesToScroll?: number;
2792
+
2793
+ /**
2794
+ * Slides per group
2795
+ */
2796
+ slidesPerGroup?: number;
2797
+
2798
+ /**
2799
+ * Space between slides in pixels
2800
+ */
2801
+ spaceBetween?: number;
2802
+
2803
+ /**
2804
+ * Whether to center slides
2805
+ */
2806
+ centeredSlides?: boolean;
2807
+
2808
+ /**
2809
+ * Slides per column
2810
+ */
2811
+ slidesPerColumn?: number;
2812
+
2813
+ /**
2814
+ * Slides per column fill
2815
+ */
2816
+ slidesPerColumnFill?: 'column' | 'row';
2817
+
2818
+ /**
2819
+ * Direction
2820
+ */
2821
+ direction?: 'horizontal' | 'vertical';
2822
+
2823
+ /**
2824
+ * Width
2825
+ */
2826
+ width?: number;
2827
+
2828
+ /**
2829
+ * Height
2830
+ */
2831
+ height?: number;
2832
+
2833
+ /**
2834
+ * Loop
2835
+ */
2836
+ loop?: boolean;
2837
+
2838
+ /**
2839
+ * Loop additional slides
2840
+ */
2841
+ loopAdditionalSlides?: number;
2842
+
2843
+ /**
2844
+ * Loop filled group with blank
2845
+ */
2846
+ loopFillGroupWithBlank?: boolean;
2847
+
2848
+ /**
2849
+ * Free mode
2850
+ */
2851
+ freeMode?: boolean;
2852
+
2853
+ /**
2854
+ * Speed
2855
+ */
2856
+ speed?: number;
2857
+
2858
+ /**
2859
+ * Effect
2860
+ */
2861
+ effect?: string;
2862
+
2863
+ /**
2864
+ * Autoplay
2865
+ */
2866
+ autoplay?: boolean | SliderAutoplay;
2867
+
2868
+ /**
2869
+ * Navigation
2870
+ */
2871
+ navigation?: boolean | SliderNavigation;
2872
+
2873
+ /**
2874
+ * Pagination
2875
+ */
2876
+ pagination?: boolean | SliderPagination;
2877
+
2878
+ /**
2879
+ * Scrollbar
2880
+ */
2881
+ scrollbar?: boolean | SliderScrollbar;
2882
+ }
2883
+
2884
+ /**
2885
+ * Slider autoplay configuration
2886
+ */
2887
+ export interface SliderAutoplay {
2888
+ /**
2889
+ * Delay between transitions in milliseconds
2890
+ */
2891
+ delay: number;
2892
+
2893
+ /**
2894
+ * Whether to stop autoplay on interaction
2895
+ */
2896
+ stopOnInteraction?: boolean;
2897
+
2898
+ /**
2899
+ * Whether to disable autoplay on hover
2900
+ */
2901
+ pauseOnHover?: boolean;
2902
+
2903
+ /**
2904
+ * Whether to reverse direction
2905
+ */
2906
+ reverseDirection?: boolean;
2907
+
2908
+ /**
2909
+ * Disable on interaction
2910
+ */
2911
+ disableOnInteraction?: boolean;
2912
+
2913
+ /**
2914
+ * Wait for transition
2915
+ */
2916
+ waitForTransition?: boolean;
2917
+
2918
+ /**
2919
+ * Pause on mouse enter
2920
+ */
2921
+ pauseOnMouseEnter?: boolean;
2922
+ }
2923
+
2924
+ /**
2925
+ * Slider pagination configuration
2926
+ */
2927
+ export interface SliderPagination {
2928
+ /**
2929
+ * Whether pagination is enabled
2930
+ */
2931
+ enabled: boolean;
2932
+
2933
+ /**
2934
+ * Pagination element selector
2935
+ */
2936
+ el?: string | HTMLElement;
2937
+
2938
+ /**
2939
+ * Pagination type
2940
+ */
2941
+ type?: 'bullets' | 'fraction' | 'progressbar' | 'custom';
2942
+
2943
+ /**
2944
+ * Whether pagination is clickable
2945
+ */
2946
+ clickable?: boolean;
2947
+
2948
+ /**
2949
+ * Whether to hide pagination on single slide
2950
+ */
2951
+ hideOnClick?: boolean;
2952
+
2953
+ /**
2954
+ * Dynamic bullets
2955
+ */
2956
+ dynamicBullets?: boolean;
2957
+
2958
+ /**
2959
+ * Dynamic main bullets
2960
+ */
2961
+ dynamicMainBullets?: number;
2962
+
2963
+ /**
2964
+ * Format fraction current
2965
+ */
2966
+ formatFractionCurrent?: (number: number) => string;
2967
+
2968
+ /**
2969
+ * Format fraction total
2970
+ */
2971
+ formatFractionTotal?: (number: number) => string;
2972
+
2973
+ /**
2974
+ * Render bullet
2975
+ */
2976
+ renderBullet?: (index: number, className: string) => string;
2977
+
2978
+ /**
2979
+ * Render fraction
2980
+ */
2981
+ renderFraction?: (currentClass: string, totalClass: string) => string;
2982
+
2983
+ /**
2984
+ * Render progressbar
2985
+ */
2986
+ renderProgressbar?: (progressbarFillClass: string) => string;
2987
+
2988
+ /**
2989
+ * Render custom
2990
+ */
2991
+ renderCustom?: (swiper: any, current: number, total: number) => string;
2992
+
2993
+ /**
2994
+ * Progressbar opposite
2995
+ */
2996
+ progressbarOpposite?: boolean;
2997
+
2998
+ /**
2999
+ * Bullet class
3000
+ */
3001
+ bulletClass?: string;
3002
+
3003
+ /**
3004
+ * Bullet active class
3005
+ */
3006
+ bulletActiveClass?: string;
3007
+
3008
+ /**
3009
+ * Modifier class
3010
+ */
3011
+ modifierClass?: string;
3012
+
3013
+ /**
3014
+ * Current class
3015
+ */
3016
+ currentClass?: string;
3017
+
3018
+ /**
3019
+ * Total class
3020
+ */
3021
+ totalClass?: string;
3022
+
3023
+ /**
3024
+ * Hidden class
3025
+ */
3026
+ hiddenClass?: string;
3027
+
3028
+ /**
3029
+ * Progressbar fill class
3030
+ */
3031
+ progressbarFillClass?: string;
3032
+
3033
+ /**
3034
+ * Progressbar opposite class
3035
+ */
3036
+ progressbarOppositeClass?: string;
3037
+
3038
+ /**
3039
+ * Clickable class
3040
+ */
3041
+ clickableClass?: string;
3042
+
3043
+ /**
3044
+ * Lock class
3045
+ */
3046
+ lockClass?: string;
3047
+
3048
+ /**
3049
+ * Horizontal class
3050
+ */
3051
+ horizontalClass?: string;
3052
+
3053
+ /**
3054
+ * Vertical class
3055
+ */
3056
+ verticalClass?: string;
3057
+ }
3058
+
3059
+ /**
3060
+ * Slider navigation configuration
3061
+ */
3062
+ export interface SliderNavigation {
3063
+ /**
3064
+ * Whether navigation is enabled
3065
+ */
3066
+ enabled: boolean;
3067
+
3068
+ /**
3069
+ * Previous button element selector
3070
+ */
3071
+ prevEl?: string | HTMLElement | ReactNode;
3072
+
3073
+ /**
3074
+ * Next button element selector
3075
+ */
3076
+ nextEl?: string | HTMLElement | ReactNode;
3077
+
3078
+ /**
3079
+ * Whether to hide navigation on reach
3080
+ */
3081
+ hideOnClick?: boolean;
3082
+
3083
+ /**
3084
+ * Disabled class
3085
+ */
3086
+ disabledClass?: string;
3087
+
3088
+ /**
3089
+ * Hidden class
3090
+ */
3091
+ hiddenClass?: string;
3092
+
3093
+ /**
3094
+ * Lock class
3095
+ */
3096
+ lockClass?: string;
3097
+
3098
+ /**
3099
+ * Navigation wrapper class
3100
+ */
3101
+ navigationDisabledClass?: string;
3102
+ }
3103
+
3104
+ /**
3105
+ * Slider scrollbar configuration
3106
+ */
3107
+ export interface SliderScrollbar {
3108
+ /**
3109
+ * Whether scrollbar is enabled
3110
+ */
3111
+ enabled: boolean;
3112
+
3113
+ /**
3114
+ * Scrollbar element selector
3115
+ */
3116
+ el?: string | HTMLElement;
3117
+
3118
+ /**
3119
+ * Whether scrollbar is draggable
3120
+ */
3121
+ draggable?: boolean;
3122
+
3123
+ /**
3124
+ * Whether to hide scrollbar automatically
3125
+ */
3126
+ hide?: boolean;
3127
+
3128
+ /**
3129
+ * Scrollbar snap on release
3130
+ */
3131
+ snapOnRelease?: boolean;
3132
+
3133
+ /**
3134
+ * Drag class
3135
+ */
3136
+ dragClass?: string;
3137
+
3138
+ /**
3139
+ * Lock class
3140
+ */
3141
+ lockClass?: string;
3142
+
3143
+ /**
3144
+ * Horizontal class
3145
+ */
3146
+ horizontalClass?: string;
3147
+
3148
+ /**
3149
+ * Vertical class
3150
+ */
3151
+ verticalClass?: string;
3152
+ }
3153
+
3154
+ /**
3155
+ * Slider effect configuration
3156
+ */
3157
+ export interface SliderEffect {
3158
+ /**
3159
+ * Transition effect type
3160
+ */
3161
+ type: 'slide' | 'fade' | 'cube' | 'coverflow' | 'flip' | 'cards' | 'creative';
3162
+
3163
+ /**
3164
+ * Fade effect options
3165
+ */
3166
+ fade?: {
3167
+ crossFade?: boolean;
3168
+ };
3169
+
3170
+ /**
3171
+ * Cube effect options
3172
+ */
3173
+ cube?: {
3174
+ slideShadows?: boolean;
3175
+ shadow?: boolean;
3176
+ shadowOffset?: number;
3177
+ shadowScale?: number;
3178
+ };
3179
+
3180
+ /**
3181
+ * Coverflow effect options
3182
+ */
3183
+ coverflow?: {
3184
+ rotate?: number;
3185
+ stretch?: number;
3186
+ depth?: number;
3187
+ modifier?: number;
3188
+ slideShadows?: boolean;
3189
+ };
3190
+
3191
+ /**
3192
+ * Flip effect options
3193
+ */
3194
+ flip?: {
3195
+ slideShadows?: boolean;
3196
+ limitRotation?: boolean;
3197
+ };
3198
+
3199
+ /**
3200
+ * Cards effect options
3201
+ */
3202
+ cards?: {
3203
+ perSlideOffset?: number;
3204
+ perSlideRotate?: number;
3205
+ rotate?: boolean;
3206
+ slideShadows?: boolean;
3207
+ };
3208
+
3209
+ /**
3210
+ * Creative effect options
3211
+ */
3212
+ creative?: {
3213
+ prev?: {
3214
+ translate?: [number, number, number];
3215
+ rotate?: [number, number, number];
3216
+ opacity?: number;
3217
+ scale?: number;
3218
+ };
3219
+ next?: {
3220
+ translate?: [number, number, number];
3221
+ rotate?: [number, number, number];
3222
+ opacity?: number;
3223
+ scale?: number;
3224
+ };
3225
+ limitProgress?: number;
3226
+ shadowPerProgress?: boolean;
3227
+ progressMultiplier?: number;
3228
+ };
3229
+ }
3230
+
3231
+ /**
3232
+ * Slider thumbs configuration
3233
+ */
3234
+ export interface SliderThumbs {
3235
+ /**
3236
+ * Whether thumbs are enabled
3237
+ */
3238
+ enabled: boolean;
3239
+
3240
+ /**
3241
+ * Swiper instance for thumbs
3242
+ */
3243
+ swiper?: any;
3244
+
3245
+ /**
3246
+ * Thumbs slides data
3247
+ */
3248
+ slides?: SliderSlide[];
3249
+
3250
+ /**
3251
+ * Number of thumbs to show
3252
+ */
3253
+ slidesToShow?: number;
3254
+
3255
+ /**
3256
+ * Space between thumbs
3257
+ */
3258
+ spaceBetween?: number;
3259
+
3260
+ /**
3261
+ * Thumbs direction
3262
+ */
3263
+ direction?: 'horizontal' | 'vertical';
3264
+
3265
+ /**
3266
+ * Whether thumbs are clickable
3267
+ */
3268
+ clickable?: boolean;
3269
+
3270
+ /**
3271
+ * Slide thumb active class
3272
+ */
3273
+ slideThumbActiveClass?: string;
3274
+
3275
+ /**
3276
+ * Thumbs container class
3277
+ */
3278
+ thumbsContainerClass?: string;
3279
+
3280
+ /**
3281
+ * Auto scroll offset
3282
+ */
3283
+ autoScrollOffset?: number;
3284
+
3285
+ /**
3286
+ * Multiple active thumbs
3287
+ */
3288
+ multipleActiveThumbs?: boolean;
3289
+ }
3290
+
3291
+ /**
3292
+ * Slider zoom configuration
3293
+ */
3294
+ export interface SliderZoom {
3295
+ /**
3296
+ * Whether zoom is enabled
3297
+ */
3298
+ enabled: boolean;
3299
+
3300
+ /**
3301
+ * Maximum zoom ratio
3302
+ */
3303
+ maxRatio?: number;
3304
+
3305
+ /**
3306
+ * Minimum zoom ratio
3307
+ */
3308
+ minRatio?: number;
3309
+
3310
+ /**
3311
+ * Whether to toggle zoom on double tap
3312
+ */
3313
+ toggle?: boolean;
3314
+
3315
+ /**
3316
+ * Container selector for zoom
3317
+ */
3318
+ containerClass?: string;
3319
+
3320
+ /**
3321
+ * Zoomed slide class
3322
+ */
3323
+ zoomedSlideClass?: string;
3324
+
3325
+ /**
3326
+ * Zoom container class
3327
+ */
3328
+ zoomContainerClass?: string;
3329
+ }
3330
+
3331
+ /**
3332
+ * Slider lazy loading configuration
3333
+ */
3334
+ export interface SliderLazy {
3335
+ /**
3336
+ * Whether lazy loading is enabled
3337
+ */
3338
+ enabled: boolean;
3339
+
3340
+ /**
3341
+ * Check in view
3342
+ */
3343
+ checkInView?: boolean;
3344
+
3345
+ /**
3346
+ * Load on transition start
3347
+ */
3348
+ loadOnTransitionStart?: boolean;
3349
+
3350
+ /**
3351
+ * Number of slides to preload
3352
+ */
3353
+ loadPrevNext?: boolean;
3354
+
3355
+ /**
3356
+ * Number of slides to preload in each direction
3357
+ */
3358
+ loadPrevNextAmount?: number;
3359
+
3360
+ /**
3361
+ * Loading element selector
3362
+ */
3363
+ loadingClass?: string;
3364
+
3365
+ /**
3366
+ * Loaded element selector
3367
+ */
3368
+ loadedClass?: string;
3369
+
3370
+ /**
3371
+ * Preloader element selector
3372
+ */
3373
+ preloaderClass?: string;
3374
+
3375
+ /**
3376
+ * Element class
3377
+ */
3378
+ elementClass?: string;
3379
+ }
3380
+
3381
+ /**
3382
+ * Slider virtual slides configuration
3383
+ */
3384
+ export interface SliderVirtual {
3385
+ /**
3386
+ * Whether virtual slides are enabled
3387
+ */
3388
+ enabled: boolean;
3389
+
3390
+ /**
3391
+ * Number of slides to render
3392
+ */
3393
+ slides?: SliderSlide[];
3394
+
3395
+ /**
3396
+ * Cache rendered slides
3397
+ */
3398
+ cache?: boolean;
3399
+
3400
+ /**
3401
+ * Render slide function
3402
+ */
3403
+ renderSlide?: (slide: SliderSlide, index: number) => string;
3404
+
3405
+ /**
3406
+ * Render external function
3407
+ */
3408
+ renderExternal?: (data: any) => void;
3409
+
3410
+ /**
3411
+ * Add slides before
3412
+ */
3413
+ addSlidesBefore?: number;
3414
+
3415
+ /**
3416
+ * Add slides after
3417
+ */
3418
+ addSlidesAfter?: number;
3419
+
3420
+ /**
3421
+ * Render external update
3422
+ */
3423
+ renderExternalUpdate?: boolean;
3424
+ }
3425
+
3426
+ /**
3427
+ * Slider state interface
3428
+ */
3429
+ export interface SliderState {
3430
+ /**
3431
+ * Current active slide index
3432
+ */
3433
+ activeIndex: number;
3434
+
3435
+ /**
3436
+ * Real index (without loop duplicates)
3437
+ */
3438
+ realIndex: number;
3439
+
3440
+ /**
3441
+ * Previous index
3442
+ */
3443
+ previousIndex: number;
3444
+
3445
+ /**
3446
+ * Whether slider is at the beginning
3447
+ */
3448
+ isBeginning: boolean;
3449
+
3450
+ /**
3451
+ * Whether slider is at the end
3452
+ */
3453
+ isEnd: boolean;
3454
+
3455
+ /**
3456
+ * Current progress (0-1)
3457
+ */
3458
+ progress: number;
3459
+
3460
+ /**
3461
+ * Whether autoplay is running
3462
+ */
3463
+ autoplayRunning: boolean;
3464
+
3465
+ /**
3466
+ * Whether slider is transitioning
3467
+ */
3468
+ transitioning: boolean;
3469
+
3470
+ /**
3471
+ * Whether touch is active
3472
+ */
3473
+ touching: boolean;
3474
+
3475
+ /**
3476
+ * Current translate value
3477
+ */
3478
+ translate: number;
3479
+
3480
+ /**
3481
+ * Slides per view
3482
+ */
3483
+ slidesPerView: number | 'auto';
3484
+
3485
+ /**
3486
+ * Total slides count
3487
+ */
3488
+ slidesCount: number;
3489
+
3490
+ /**
3491
+ * Whether slider is locked
3492
+ */
3493
+ isLocked: boolean;
3494
+
3495
+ /**
3496
+ * Whether slider is destroyed
3497
+ */
3498
+ destroyed: boolean;
3499
+
3500
+ /**
3501
+ * Current breakpoint
3502
+ */
3503
+ currentBreakpoint?: string;
3504
+
3505
+ /**
3506
+ * Size
3507
+ */
3508
+ size: number;
3509
+
3510
+ /**
3511
+ * Touches
3512
+ */
3513
+ touches: {
3514
+ startX: number;
3515
+ startY: number;
3516
+ currentX: number;
3517
+ currentY: number;
3518
+ diff: number;
3519
+ };
3520
+
3521
+ /**
3522
+ * Allow slide next
3523
+ */
3524
+ allowSlideNext: boolean;
3525
+
3526
+ /**
3527
+ * Allow slide prev
3528
+ */
3529
+ allowSlidePrev: boolean;
3530
+
3531
+ /**
3532
+ * Allow touch move
3533
+ */
3534
+ allowTouchMove: boolean;
3535
+
3536
+ /**
3537
+ * Animating
3538
+ */
3539
+ animating: boolean;
3540
+
3541
+ /**
3542
+ * Enabled
3543
+ */
3544
+ enabled: boolean;
3545
+
3546
+ /**
3547
+ * Initialized
3548
+ */
3549
+ initialized: boolean;
3550
+ }
3551
+
3552
+ /**
3553
+ * Slider element refs
3554
+ */
3555
+ export interface SliderRefs {
3556
+ containerRef?: React.RefObject<HTMLDivElement | null>;
3557
+ wrapperRef?: React.RefObject<HTMLDivElement | null>;
3558
+ paginationRef?: React.RefObject<HTMLDivElement | null>;
3559
+ navigationPrevRef?: React.RefObject<HTMLButtonElement | null>;
3560
+ navigationNextRef?: React.RefObject<HTMLButtonElement | null>;
3561
+ }
3562
+
3563
+ /**
3564
+ * Slider component properties
3565
+ */
3566
+ export interface SliderProps extends BaseComponentProps {
3567
+ /**
3568
+ * Array of slides to display
3569
+ */
3570
+ slides: SliderSlide[];
3571
+
3572
+ /**
3573
+ * Number of slides to show at once
3574
+ */
3575
+ slidesToShow?: number;
3576
+
3577
+ /**
3578
+ * Number of slides to scroll at once
3579
+ */
3580
+ slidesToScroll?: number;
3581
+
3582
+ /**
3583
+ * Space between slides in pixels
3584
+ */
3585
+ spaceBetween?: number;
3586
+
3587
+ /**
3588
+ * Whether to center slides
3589
+ */
3590
+ centeredSlides?: boolean;
3591
+
3592
+ /**
3593
+ * Whether to loop slides infinitely
3594
+ */
3595
+ loop?: boolean;
3596
+
3597
+ /**
3598
+ * Initial slide index
3599
+ */
3600
+ initialSlide?: number;
3601
+
3602
+ /**
3603
+ * Slider direction
3604
+ */
3605
+ direction?: 'horizontal' | 'vertical';
3606
+
3607
+ /**
3608
+ * Transition speed in milliseconds
3609
+ */
3610
+ speed?: number;
3611
+
3612
+ /**
3613
+ * CSS easing function
3614
+ */
3615
+ easing?: string;
3616
+
3617
+ /**
3618
+ * Whether to allow touch/swipe gestures
3619
+ */
3620
+ allowTouchMove?: boolean;
3621
+
3622
+ /**
3623
+ * Touch threshold for swipe (default: 10px)
3624
+ */
3625
+ threshold?: number;
3626
+
3627
+ /**
3628
+ * Whether to enable mouse wheel control
3629
+ */
3630
+ mousewheel?:
3631
+ | boolean
3632
+ | {
3633
+ forceToAxis?: boolean;
3634
+ sensitivity?: number;
3635
+ releaseOnEdges?: boolean;
3636
+ };
3637
+
3638
+ /**
3639
+ * Whether to enable keyboard control
3640
+ */
3641
+ keyboard?:
3642
+ | boolean
3643
+ | {
3644
+ enabled?: boolean;
3645
+ onlyInViewport?: boolean;
3646
+ pageUpDown?: boolean;
3647
+ };
3648
+
3649
+ /**
3650
+ * Whether to grab cursor on hover (default: true)
3651
+ */
3652
+ grabCursor?: boolean;
3653
+
3654
+ /**
3655
+ * Autoplay configuration
3656
+ */
3657
+ autoplay?: SliderAutoplay | boolean;
3658
+
3659
+ /**
3660
+ * Pagination configuration
3661
+ */
3662
+ pagination?: SliderPagination | boolean;
3663
+
3664
+ /**
3665
+ * Navigation configuration
3666
+ */
3667
+ navigation?: SliderNavigation | boolean;
3668
+
3669
+ /**
3670
+ * Scrollbar configuration
3671
+ */
3672
+ scrollbar?: SliderScrollbar | boolean;
3673
+
3674
+ /**
3675
+ * Effect configuration
3676
+ */
3677
+ effect?: SliderEffect;
3678
+
3679
+ /**
3680
+ * Thumbs configuration
3681
+ */
3682
+ thumbs?: SliderThumbs;
3683
+
3684
+ /**
3685
+ * Zoom configuration
3686
+ */
3687
+ zoom?: SliderZoom;
3688
+
3689
+ /**
3690
+ * Lazy loading configuration
3691
+ */
3692
+ lazy?: SliderLazy;
3693
+
3694
+ /**
3695
+ * Virtual slides configuration
3696
+ */
3697
+ virtual?: SliderVirtual;
3698
+
3699
+ /**
3700
+ * Responsive breakpoints
3701
+ */
3702
+ breakpoints?: {
3703
+ [key: number]: SliderBreakpoint;
3704
+ };
3705
+
3706
+ /**
3707
+ * Whether to free mode (no snap to slides)
3708
+ */
3709
+ freeMode?:
3710
+ | boolean
3711
+ | {
3712
+ enabled?: boolean;
3713
+ sticky?: boolean;
3714
+ momentumRatio?: number;
3715
+ momentumVelocityRatio?: number;
3716
+ momentumBounce?: boolean;
3717
+ momentumBounceRatio?: number;
3718
+ minimumVelocity?: number;
3719
+ };
3720
+
3721
+ /**
3722
+ * Whether to watch for slides and wrapper size changes
3723
+ */
3724
+ watchSlidesProgress?: boolean;
3725
+
3726
+ /**
3727
+ * Whether to watch for overflow
3728
+ */
3729
+ watchOverflow?: boolean;
3730
+
3731
+ /**
3732
+ * Resistance ratio for edges
3733
+ */
3734
+ resistanceRatio?: number;
3735
+
3736
+ /**
3737
+ * Whether to prevent clicks during transition
3738
+ */
3739
+ preventClicks?: boolean;
3740
+
3741
+ /**
3742
+ * Whether to prevent clicks propagation during transition
3743
+ */
3744
+ preventClicksPropagation?: boolean;
3745
+
3746
+ /**
3747
+ * Parallax configuration
3748
+ */
3749
+ parallax?: boolean;
3750
+
3751
+ /**
3752
+ * Hash navigation
3753
+ */
3754
+ hashNavigation?:
3755
+ | boolean
3756
+ | {
3757
+ watchState?: boolean;
3758
+ replaceState?: boolean;
3759
+ };
3760
+
3761
+ /**
3762
+ * History navigation
3763
+ */
3764
+ history?:
3765
+ | boolean
3766
+ | {
3767
+ enabled?: boolean;
3768
+ root?: string;
3769
+ replaceState?: boolean;
3770
+ key?: string;
3771
+ };
3772
+
3773
+ /**
3774
+ * Controller configuration
3775
+ */
3776
+ controller?: {
3777
+ control?: any;
3778
+ inverse?: boolean;
3779
+ by?: 'slide' | 'container';
3780
+ };
3781
+
3782
+ /**
3783
+ * A11y configuration
3784
+ */
3785
+ a11y?:
3786
+ | boolean
3787
+ | {
3788
+ enabled?: boolean;
3789
+ prevSlideMessage?: string;
3790
+ nextSlideMessage?: string;
3791
+ firstSlideMessage?: string;
3792
+ lastSlideMessage?: string;
3793
+ paginationBulletMessage?: string;
3794
+ notificationClass?: string;
3795
+ };
3796
+
3797
+ /**
3798
+ * Slide change callback
3799
+ */
3800
+ onSlideChange?: (swiper: any) => void;
3801
+
3802
+ /**
3803
+ * Slide change transition start callback
3804
+ */
3805
+ onSlideChangeTransitionStart?: (swiper: any) => void;
3806
+
3807
+ /**
3808
+ * Slide change transition end callback
3809
+ */
3810
+ onSlideChangeTransitionEnd?: (swiper: any) => void;
3811
+
3812
+ /**
3813
+ * Slider initialization callback
3814
+ */
3815
+ onInit?: (swiper: any) => void;
3816
+
3817
+ /**
3818
+ * Before destroy callback
3819
+ */
3820
+ onDestroy?: () => void;
3821
+
3822
+ /**
3823
+ * Touch start callback
3824
+ */
3825
+ onTouchStart?: (swiper: any, event: TouchEvent) => void;
3826
+
3827
+ /**
3828
+ * Touch move callback
3829
+ */
3830
+ onTouchMove?: (swiper: any, event: TouchEvent) => void;
3831
+
3832
+ /**
3833
+ * Touch end callback
3834
+ */
3835
+ onTouchEnd?: (swiper: any, event: TouchEvent) => void;
3836
+
3837
+ /**
3838
+ * Reach beginning callback
3839
+ */
3840
+ onReachBeginning?: (swiper: any) => void;
3841
+
3842
+ /**
3843
+ * Reach end callback
3844
+ */
3845
+ onReachEnd?: (swiper: any) => void;
3846
+
3847
+ /**
3848
+ * Progress change callback
3849
+ */
3850
+ onProgress?: (swiper: any, progress: number) => void;
3851
+
3852
+ /**
3853
+ * Autoplay start callback
3854
+ */
3855
+ onAutoplayStart?: (swiper: any) => void;
3856
+
3857
+ /**
3858
+ * Autoplay stop callback
3859
+ */
3860
+ onAutoplayStop?: (swiper: any) => void;
3861
+
3862
+ /**
3863
+ * Before resize callback
3864
+ */
3865
+ onBeforeResize?: (swiper: any) => void;
3866
+
3867
+ /**
3868
+ * After resize callback
3869
+ */
3870
+ onResize?: (swiper: any) => void;
3871
+
3872
+ /**
3873
+ * Slider size
3874
+ */
3875
+ size?: Size;
3876
+
3877
+ /**
3878
+ * Slider height (for horizontal sliders)
3879
+ */
3880
+ height?: string | number;
3881
+
3882
+ /**
3883
+ * Slider width (for vertical sliders)
3884
+ */
3885
+ width?: string | number;
3886
+
3887
+ /**
3888
+ * Custom container class
3889
+ */
3890
+ containerClass?: string;
3891
+
3892
+ /**
3893
+ * Whether to use vanilla JS implementation
3894
+ */
3895
+ useVanillaJS?: boolean;
3896
+
3897
+ /**
3898
+ * Modules to enable
3899
+ */
3900
+ modules?: string[];
3901
+
3902
+ /**
3903
+ * Update on window resize
3904
+ */
3905
+ updateOnWindowResize?: boolean;
3906
+
3907
+ /**
3908
+ * Resize observer
3909
+ */
3910
+ resizeObserver?: boolean;
3911
+
3912
+ /**
3913
+ * Observer
3914
+ */
3915
+ observer?: boolean;
3916
+
3917
+ /**
3918
+ * Observer parents
3919
+ */
3920
+ observeParents?: boolean;
3921
+
3922
+ /**
3923
+ * Observer slide children
3924
+ */
3925
+ observeSlideChildren?: boolean;
3926
+
3927
+ /**
3928
+ * Run callbacks on init
3929
+ */
3930
+ runCallbacksOnInit?: boolean;
3931
+
3932
+ /**
3933
+ * Preload images
3934
+ */
3935
+ preloadImages?: boolean;
3936
+
3937
+ /**
3938
+ * Update on images ready
3939
+ */
3940
+ updateOnImagesReady?: boolean;
3941
+
3942
+ /**
3943
+ * CSS mode
3944
+ */
3945
+ cssMode?: boolean;
3946
+
3947
+ /**
3948
+ * Simulate touch
3949
+ */
3950
+ simulateTouch?: boolean;
3951
+
3952
+ /**
3953
+ * Touch ratio
3954
+ */
3955
+ touchRatio?: number;
3956
+
3957
+ /**
3958
+ * Touch angle
3959
+ */
3960
+ touchAngle?: number;
3961
+
3962
+ /**
3963
+ * Short swipes
3964
+ */
3965
+ shortSwipes?: boolean;
3966
+
3967
+ /**
3968
+ * Long swipes
3969
+ */
3970
+ longSwipes?: boolean;
3971
+
3972
+ /**
3973
+ * Long swipes ratio
3974
+ */
3975
+ longSwipesRatio?: number;
3976
+
3977
+ /**
3978
+ * Long swipes ms
3979
+ */
3980
+ longSwipesMs?: number;
3981
+
3982
+ /**
3983
+ * Follow finger
3984
+ */
3985
+ followFinger?: boolean;
3986
+
3987
+ /**
3988
+ * Touch move stop propagation
3989
+ */
3990
+ touchMoveStopPropagation?: boolean;
3991
+
3992
+ /**
3993
+ * Touch start prevent default
3994
+ */
3995
+ touchStartPreventDefault?: boolean;
3996
+
3997
+ /**
3998
+ * Touch start force prevent default
3999
+ */
4000
+ touchStartForcePreventDefault?: boolean;
4001
+
4002
+ /**
4003
+ * Touch release on edges
4004
+ */
4005
+ touchReleaseOnEdges?: boolean;
4006
+
4007
+ /**
4008
+ * Unique nav elements
4009
+ */
4010
+ uniqueNavElements?: boolean;
4011
+
4012
+ /**
4013
+ * Slides per group
4014
+ */
4015
+ slidesPerGroup?: number;
4016
+
4017
+ /**
4018
+ * Slides per group skip
4019
+ */
4020
+ slidesPerGroupSkip?: number;
4021
+
4022
+ /**
4023
+ * Slides per group auto
4024
+ */
4025
+ slidesPerGroupAuto?: boolean;
4026
+
4027
+ /**
4028
+ * Centered slides bounds
4029
+ */
4030
+ centeredSlidesBounds?: boolean;
4031
+
4032
+ /**
4033
+ * Slides grid
4034
+ */
4035
+ grid?: {
4036
+ rows?: number;
4037
+ fill?: 'row' | 'column';
4038
+ };
4039
+
4040
+ /**
4041
+ * Set wrapper size
4042
+ */
4043
+ setWrapperSize?: boolean;
4044
+
4045
+ /**
4046
+ * Virtual translate
4047
+ */
4048
+ virtualTranslate?: boolean;
4049
+
4050
+ /**
4051
+ * Round lengths
4052
+ */
4053
+ roundLengths?: boolean;
4054
+
4055
+ /**
4056
+ * Nested
4057
+ */
4058
+ nested?: boolean;
4059
+
4060
+ /**
4061
+ * Focus on select
4062
+ */
4063
+ focusableElements?: string;
4064
+
4065
+ /**
4066
+ * Release form elements
4067
+ */
4068
+ releaseFormElements?: boolean;
4069
+
4070
+ /**
4071
+ * Auto height
4072
+ */
4073
+ autoHeight?: boolean;
4074
+
4075
+ /**
4076
+ * Slides offset before
4077
+ */
4078
+ slidesOffsetBefore?: number;
4079
+
4080
+ /**
4081
+ * Slides offset after
4082
+ */
4083
+ slidesOffsetAfter?: number;
4084
+
4085
+ /**
4086
+ * Normalize slide index
4087
+ */
4088
+ normalizeSlideIndex?: boolean;
4089
+
4090
+ /**
4091
+ * Center insufficient slides
4092
+ */
4093
+ centerInsufficientSlides?: boolean;
4094
+
4095
+ /**
4096
+ * Watch slides visibility
4097
+ */
4098
+ watchSlidesVisibility?: boolean;
4099
+
4100
+ /**
4101
+ * Max backface hidden slides
4102
+ */
4103
+ maxBackfaceHiddenSlides?: number;
4104
+
4105
+ /**
4106
+ * Edge swipe detection
4107
+ */
4108
+ edgeSwipeDetection?: boolean | string;
4109
+
4110
+ /**
4111
+ * Edge swipe threshold
4112
+ */
4113
+ edgeSwipeThreshold?: number;
4114
+
4115
+ /**
4116
+ * Resistance
4117
+ */
4118
+ resistance?: boolean;
4119
+
4120
+ /**
4121
+ * Passive listeners
4122
+ */
4123
+ passiveListeners?: boolean;
4124
+
4125
+ /**
4126
+ * Container modifier class
4127
+ */
4128
+ containerModifierClass?: string;
4129
+
4130
+ /**
4131
+ * Slide class
4132
+ */
4133
+ slideClass?: string;
4134
+
4135
+ /**
4136
+ * Slide blank class
4137
+ */
4138
+ slideBlankClass?: string;
4139
+
4140
+ /**
4141
+ * Slide active class
4142
+ */
4143
+ slideActiveClass?: string;
4144
+
4145
+ /**
4146
+ * Slide duplicate active class
4147
+ */
4148
+ slideDuplicateActiveClass?: string;
4149
+
4150
+ /**
4151
+ * Slide visible class
4152
+ */
4153
+ slideVisibleClass?: string;
4154
+
4155
+ /**
4156
+ * Slide duplicate class
4157
+ */
4158
+ slideDuplicateClass?: string;
4159
+
4160
+ /**
4161
+ * Slide next class
4162
+ */
4163
+ slideNextClass?: string;
4164
+
4165
+ /**
4166
+ * Slide duplicate next class
4167
+ */
4168
+ slideDuplicateNextClass?: string;
4169
+
4170
+ /**
4171
+ * Slide prev class
4172
+ */
4173
+ slidePrevClass?: string;
4174
+
4175
+ /**
4176
+ * Slide duplicate prev class
4177
+ */
4178
+ slideDuplicatePrevClass?: string;
4179
+
4180
+ /**
4181
+ * Wrapper class
4182
+ */
4183
+ wrapperClass?: string;
4184
+
4185
+ /**
4186
+ * Lazy preloader class
4187
+ */
4188
+ lazyPreloaderClass?: string;
4189
+
4190
+ /**
4191
+ * Lazy preloader custom
4192
+ */
4193
+ lazyPreloaderCustom?: string;
4194
+
4195
+ /**
4196
+ * Init
4197
+ */
4198
+ init?: boolean;
4199
+
4200
+ /**
4201
+ * On any
4202
+ */
4203
+ onAny?: (eventName: string, ...args: any[]) => void;
4204
+
4205
+ /**
4206
+ * Before init
4207
+ */
4208
+ onBeforeInit?: (swiper: any) => void;
4209
+
4210
+ /**
4211
+ * Slides length change
4212
+ */
4213
+ onSlidesLengthChange?: (swiper: any) => void;
4214
+
4215
+ /**
4216
+ * Snap index change
4217
+ */
4218
+ onSnapIndexChange?: (swiper: any) => void;
4219
+
4220
+ /**
4221
+ * Real index change
4222
+ */
4223
+ onRealIndexChange?: (swiper: any) => void;
4224
+
4225
+ /**
4226
+ * Before loop fix
4227
+ */
4228
+ onBeforeLoopFix?: (swiper: any) => void;
4229
+
4230
+ /**
4231
+ * Loop fix
4232
+ */
4233
+ onLoopFix?: (swiper: any) => void;
4234
+
4235
+ /**
4236
+ * Before transition start
4237
+ */
4238
+ onBeforeTransitionStart?: (swiper: any, speed: number, internal: boolean) => void;
4239
+
4240
+ /**
4241
+ * Transition start
4242
+ */
4243
+ onTransitionStart?: (swiper: any) => void;
4244
+
4245
+ /**
4246
+ * Transition end
4247
+ */
4248
+ onTransitionEnd?: (swiper: any) => void;
4249
+
4250
+ /**
4251
+ * Slider move
4252
+ */
4253
+ onSliderMove?: (swiper: any, event: TouchEvent | MouseEvent) => void;
4254
+
4255
+ /**
4256
+ * Slider first move
4257
+ */
4258
+ onSliderFirstMove?: (swiper: any, event: TouchEvent | MouseEvent) => void;
4259
+
4260
+ /**
4261
+ * Set translate
4262
+ */
4263
+ onSetTranslate?: (swiper: any, translate: number) => void;
4264
+
4265
+ /**
4266
+ * Set transition
4267
+ */
4268
+ onSetTransition?: (swiper: any, duration: number) => void;
4269
+
4270
+ /**
4271
+ * From edge
4272
+ */
4273
+ onFromEdge?: (swiper: any) => void;
4274
+
4275
+ /**
4276
+ * To edge
4277
+ */
4278
+ onToEdge?: (swiper: any) => void;
4279
+
4280
+ /**
4281
+ * Tap
4282
+ */
4283
+ onTap?: (swiper: any, event: TouchEvent | MouseEvent) => void;
4284
+
4285
+ /**
4286
+ * Double tap
4287
+ */
4288
+ onDoubleTap?: (swiper: any, event: TouchEvent | MouseEvent) => void;
4289
+
4290
+ /**
4291
+ * Images ready
4292
+ */
4293
+ onImagesReady?: (swiper: any) => void;
4294
+
4295
+ /**
4296
+ * Lock
4297
+ */
4298
+ onLock?: (swiper: any) => void;
4299
+
4300
+ /**
4301
+ * Unlock
4302
+ */
4303
+ onUnlock?: (swiper: any) => void;
4304
+
4305
+ /**
4306
+ * Breakpoint
4307
+ */
4308
+ onBreakpoint?: (swiper: any, breakpointParams: any) => void;
4309
+
4310
+ /**
4311
+ * Orientation change
4312
+ */
4313
+ onOrientationchange?: (swiper: any) => void;
4314
+
4315
+ /**
4316
+ * Keyboard
4317
+ */
4318
+ onKeyPress?: (swiper: any, keyCode: string) => void;
4319
+
4320
+ /**
4321
+ * Mousewheel
4322
+ */
4323
+ onScroll?: (swiper: any, event: WheelEvent) => void;
4324
+
4325
+ /**
4326
+ * Navigation hide
4327
+ */
4328
+ onNavigationHide?: (swiper: any) => void;
4329
+
4330
+ /**
4331
+ * Navigation show
4332
+ */
4333
+ onNavigationShow?: (swiper: any) => void;
4334
+
4335
+ /**
4336
+ * Pagination hide
4337
+ */
4338
+ onPaginationHide?: (swiper: any) => void;
4339
+
4340
+ /**
4341
+ * Pagination show
4342
+ */
4343
+ onPaginationShow?: (swiper: any) => void;
4344
+
4345
+ /**
4346
+ * Pagination render
4347
+ */
4348
+ onPaginationRender?: (swiper: any, paginationEl: HTMLElement) => void;
4349
+
4350
+ /**
4351
+ * Scrollbar drag start
4352
+ */
4353
+ onScrollbarDragStart?: (swiper: any, event: MouseEvent | TouchEvent) => void;
4354
+
4355
+ /**
4356
+ * Scrollbar drag move
4357
+ */
4358
+ onScrollbarDragMove?: (swiper: any, event: MouseEvent | TouchEvent) => void;
4359
+
4360
+ /**
4361
+ * Scrollbar drag end
4362
+ */
4363
+ onScrollbarDragEnd?: (swiper: any, event: MouseEvent | TouchEvent) => void;
4364
+
4365
+ /**
4366
+ * Zoom change
4367
+ */
4368
+ onZoomChange?: (swiper: any, scale: number, imageEl: HTMLElement, slideEl: HTMLElement) => void;
4369
+
4370
+ /**
4371
+ * Autoplay pause
4372
+ */
4373
+ onAutoplayPause?: (swiper: any) => void;
4374
+
4375
+ /**
4376
+ * Autoplay resume
4377
+ */
4378
+ onAutoplayResume?: (swiper: any) => void;
4379
+
4380
+ /**
4381
+ * Autoplay time left
4382
+ */
4383
+ onAutoplayTimeLeft?: (swiper: any, timeLeft: number, percentage: number) => void;
4384
+ }
4385
+
4386
+ // ============================================================================
4387
+ // CHART COMPONENT TYPES
4388
+ // ============================================================================
4389
+
4390
+ /**
4391
+ * Chart type options
4392
+ */
4393
+ export type ChartType =
4394
+ | 'line'
4395
+ | 'area'
4396
+ | 'bar'
4397
+ | 'horizontal-bar'
4398
+ | 'pie'
4399
+ | 'donut'
4400
+ | 'doughnut'
4401
+ | 'scatter'
4402
+ | 'radar'
4403
+ | 'bubble'
4404
+ | 'candlestick'
4405
+ | 'interactive'
4406
+ | 'advanced'
4407
+ | 'gauge'
4408
+ | 'funnel'
4409
+ | 'waterfall'
4410
+ | 'heatmap'
4411
+ | 'treemap'
4412
+ | 'realtime';
4413
+
4414
+ /**
4415
+ * Extended size options for charts
4416
+ */
4417
+ export type ChartSize = Size | 'xl' | 'full';
4418
+
4419
+ /**
4420
+ * Chart data point interface
4421
+ */
4422
+ export interface ChartDataPoint {
4423
+ /**
4424
+ * Data point label
4425
+ */
4426
+ label: string;
4427
+
4428
+ /**
4429
+ * Data point value
4430
+ */
4431
+ value: number;
4432
+
4433
+ /**
4434
+ * Optional color for this data point
4435
+ */
4436
+ color?: string;
4437
+
4438
+ /**
4439
+ * Optional metadata
4440
+ */
4441
+ metadata?: Record<string, any>;
4442
+ }
4443
+
4444
+ /**
4445
+ * Chart dataset interface
4446
+ */
4447
+ export interface ChartDataset {
4448
+ /**
4449
+ * Dataset label
4450
+ */
4451
+ label: string;
4452
+
4453
+ /**
4454
+ * Dataset data points
4455
+ */
4456
+ data: ChartDataPoint[];
4457
+
4458
+ /**
4459
+ * Dataset color
4460
+ */
4461
+ color?: string;
4462
+
4463
+ /**
4464
+ * Whether this dataset is visible
4465
+ */
4466
+ visible?: boolean;
4467
+ }
4468
+
4469
+ /**
4470
+ * Chart axis configuration
4471
+ */
4472
+ export interface ChartAxis {
4473
+ /**
4474
+ * Axis label
4475
+ */
4476
+ label?: string;
4477
+
4478
+ /**
4479
+ * Whether to show grid lines
4480
+ */
4481
+ showGrid?: boolean;
4482
+
4483
+ /**
4484
+ * Whether to show axis labels
4485
+ */
4486
+ showLabels?: boolean;
4487
+
4488
+ /**
4489
+ * Minimum value
4490
+ */
4491
+ min?: number;
4492
+
4493
+ /**
4494
+ * Maximum value
4495
+ */
4496
+ max?: number;
4497
+
4498
+ /**
4499
+ * Value formatter function
4500
+ */
4501
+ formatter?: (value: number) => string;
4502
+
4503
+ /**
4504
+ * Number of ticks
4505
+ */
4506
+ ticks?: number;
4507
+ }
4508
+
4509
+ /**
4510
+ * Chart configuration
4511
+ */
4512
+ export interface ChartConfig {
4513
+ /**
4514
+ * X-axis configuration
4515
+ */
4516
+ xAxis?: ChartAxis;
4517
+
4518
+ /**
4519
+ * Y-axis configuration
4520
+ */
4521
+ yAxis?: ChartAxis;
4522
+
4523
+ /**
4524
+ * Whether to show legend
4525
+ */
4526
+ showLegend?: boolean;
4527
+
4528
+ /**
4529
+ * Whether to show tooltips
4530
+ */
4531
+ showTooltips?: boolean;
4532
+
4533
+ /**
4534
+ * Whether to animate the chart
4535
+ */
4536
+ animate?: boolean;
4537
+
4538
+ /**
4539
+ * Animation duration in milliseconds
4540
+ */
4541
+ animationDuration?: number;
4542
+ }
4543
+
4544
+ /**
4545
+ * Chart component properties
4546
+ */
4547
+ export interface ChartProps extends BaseComponentProps {
4548
+ /**
4549
+ * Chart type
4550
+ */
4551
+ type?: ChartType;
4552
+
4553
+ /**
4554
+ * Chart datasets
4555
+ */
4556
+ datasets?: ChartDataset[];
4557
+
4558
+ /**
4559
+ * Chart configuration
4560
+ */
4561
+ config?: ChartConfig;
4562
+
4563
+ /**
4564
+ * Chart title
4565
+ */
4566
+ title?: string;
4567
+
4568
+ /**
4569
+ * Chart subtitle
4570
+ */
4571
+ subtitle?: string;
4572
+
4573
+ /**
4574
+ * Loading state
4575
+ */
4576
+ loading?: boolean;
4577
+
4578
+ /**
4579
+ * Error message
4580
+ */
4581
+ error?: string;
4582
+
4583
+ /**
4584
+ * Chart size
4585
+ */
4586
+ size?: ChartSize;
4587
+
4588
+ /**
4589
+ * Chart variant
4590
+ */
4591
+ variant?: Variant;
4592
+
4593
+ /**
4594
+ * Chart content (for wrapper chart component)
4595
+ */
4596
+ children?: React.ReactNode;
4597
+
4598
+ /**
4599
+ * Click handler for data points
4600
+ */
4601
+ onDataPointClick?: (dataPoint: ChartDataPoint, datasetIndex: number, pointIndex: number) => void;
4602
+
4603
+ /**
4604
+ * Legend item click handler
4605
+ */
4606
+ onLegendItemClick?: (datasetIndex: number, visible: boolean) => void;
4607
+
4608
+ /**
4609
+ * Interactive mode - enables hover/click effects
4610
+ */
4611
+ interactive?: boolean;
4612
+
4613
+ /**
4614
+ * Disabled state
4615
+ */
4616
+ disabled?: boolean;
4617
+
4618
+ /**
4619
+ * Fullscreen mode
4620
+ */
4621
+ fullscreen?: boolean;
4622
+
4623
+ /**
4624
+ * Minimized mode
4625
+ */
4626
+ minimized?: boolean;
4627
+
4628
+ /**
4629
+ * Show toolbar with actions
4630
+ */
4631
+ showToolbar?: boolean;
4632
+
4633
+ /**
4634
+ * Enable fullscreen functionality
4635
+ */
4636
+ enableFullscreen?: boolean;
4637
+
4638
+ /**
4639
+ * Enable export functionality
4640
+ */
4641
+ enableExport?: boolean;
4642
+
4643
+ /**
4644
+ * Enable refresh functionality
4645
+ */
4646
+ enableRefresh?: boolean;
4647
+
4648
+ /**
4649
+ * Available export formats
4650
+ */
4651
+ exportFormats?: ('png' | 'svg' | 'csv' | 'json')[];
4652
+
4653
+ /**
4654
+ * Fullscreen state change handler
4655
+ */
4656
+ onFullscreen?: (isFullscreen: boolean) => void;
4657
+
4658
+ /**
4659
+ * Export handler
4660
+ */
4661
+ onExport?: (format: string) => Promise<void> | void;
4662
+
4663
+ /**
4664
+ * Refresh handler
4665
+ */
4666
+ onRefresh?: () => void;
4667
+
4668
+ /**
4669
+ * Custom toolbar actions
4670
+ */
4671
+ toolbarActions?: React.ReactNode;
4672
+
4673
+ /**
4674
+ * Empty state configuration
4675
+ */
4676
+ emptyState?: {
4677
+ message?: string;
4678
+ icon?: React.ReactNode;
4679
+ };
4680
+
4681
+ /**
4682
+ * Accessibility label
4683
+ */
4684
+ 'aria-label'?: string;
4685
+ }
4686
+
4687
+ /**
4688
+ * CodeBlock component properties
4689
+ */
4690
+ export interface CodeBlockProps extends BaseComponentProps {
4691
+ /**
4692
+ * The code to be displayed
4693
+ */
4694
+ code: string;
4695
+
4696
+ /**
4697
+ * The language of the code
4698
+ */
4699
+ language: string;
4700
+
4701
+ /**
4702
+ * Whether to show line numbers
4703
+ */
4704
+ showLineNumbers?: boolean;
4705
+
4706
+ /**
4707
+ * Theme variant for the code block
4708
+ */
4709
+ theme?: 'light' | 'dark' | 'auto';
4710
+
4711
+ /**
4712
+ * Maximum height of the code block in pixels or CSS units
4713
+ */
4714
+ maxHeight?: string | number;
4715
+
4716
+ /**
4717
+ * Minimum height of the code block in pixels or CSS units
4718
+ */
4719
+ minHeight?: string | number;
4720
+
4721
+ /**
4722
+ * Callback when code is copied to clipboard
4723
+ */
4724
+ onCopy?: () => void;
4725
+
4726
+ /**
4727
+ * Callback when fullscreen mode changes
4728
+ */
4729
+ onFullscreenChange?: (isFullscreen: boolean) => void;
4730
+
4731
+ /**
4732
+ * Whether to enable line wrapping
4733
+ */
4734
+ wrapLines?: boolean;
4735
+
4736
+ /**
4737
+ * Whether to enable fullscreen mode
4738
+ */
4739
+ enableFullscreen?: boolean;
4740
+
4741
+ /**
4742
+ * Whether to enable copy functionality
4743
+ */
4744
+ enableCopy?: boolean;
4745
+
4746
+ /**
4747
+ * Whether to show the toolbar with actions
4748
+ */
4749
+ showToolbar?: boolean;
4750
+ }