@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,574 @@
1
+ import {
2
+ ArrowsIn,
3
+ ArrowsOut,
4
+ Download,
5
+ Gear,
6
+ Pause,
7
+ Play,
8
+ Share,
9
+ SkipBack,
10
+ SkipForward,
11
+ SpeakerHigh,
12
+ SpeakerX,
13
+ } from '@phosphor-icons/react';
14
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
15
+ import { useAmbientMode } from '../../lib/composables/useAmbientMode';
16
+ import { useVideoPlayer } from '../../lib/composables/useVideoPlayer';
17
+ import { VIDEO_PLAYER } from '../../lib/constants/components';
18
+ import { VideoPlayerProps } from '../../lib/types/components';
19
+ import { extractYouTubeId, isYouTubeUrl } from '../../lib/utils';
20
+
21
+ /**
22
+ * Advanced Video Player Component
23
+ */
24
+ export const VideoPlayer = forwardRef<HTMLVideoElement, VideoPlayerProps>(
25
+ (
26
+ {
27
+ src,
28
+ type = 'video',
29
+ youtubeId,
30
+ poster,
31
+ autoplay = false,
32
+ loop = false,
33
+ muted = false,
34
+ controls = true,
35
+ preload = 'metadata',
36
+ width,
37
+ height,
38
+ aspectRatio = '16:9',
39
+ className = '',
40
+ onPlay,
41
+ onPause,
42
+ onEnded,
43
+ onTimeUpdate,
44
+ onVolumeChange,
45
+ onFullscreenChange,
46
+ onError,
47
+ showDownload = false,
48
+ showShare = false,
49
+ showSettings = true,
50
+ playbackRates = [0.5, 0.75, 1, 1.25, 1.5, 2],
51
+ subtitles,
52
+ quality,
53
+ ambientMode = false,
54
+ ...props
55
+ },
56
+ ref
57
+ ) => {
58
+ const videoRef = useRef<HTMLVideoElement>(null);
59
+ const containerRef = useRef<HTMLDivElement>(null);
60
+ const canvasRef = useRef<HTMLCanvasElement>(null);
61
+ const iframeRef = useRef<HTMLIFrameElement>(null);
62
+
63
+ // Determine video source and type
64
+ const isYouTube = type === 'youtube' || youtubeId || (src && isYouTubeUrl(src));
65
+ const videoId = youtubeId || (isYouTube && src ? extractYouTubeId(src) : null);
66
+
67
+ const {
68
+ isPlaying,
69
+ currentTime,
70
+ duration,
71
+ volume,
72
+ isMuted,
73
+ isFullscreen,
74
+ isLoading,
75
+ playbackRate,
76
+ currentQuality,
77
+ showControls,
78
+ play,
79
+ pause,
80
+ togglePlay,
81
+ seek,
82
+ setVolume,
83
+ toggleMute,
84
+ toggleFullscreen,
85
+ togglePictureInPicture,
86
+ setPlaybackRate,
87
+ setQuality,
88
+ formatTime,
89
+ getProgressPercentage,
90
+ getBufferedPercentage,
91
+ } = useVideoPlayer({
92
+ videoRef: videoRef,
93
+ containerRef: containerRef,
94
+ onPlay,
95
+ onPause,
96
+ onEnded,
97
+ onTimeUpdate,
98
+ onVolumeChange,
99
+ onFullscreenChange,
100
+ onError,
101
+ playbackRates,
102
+ quality,
103
+ });
104
+
105
+ useAmbientMode({
106
+ videoRef: videoRef,
107
+ canvasRef: canvasRef,
108
+ enabled: ambientMode,
109
+ });
110
+
111
+ const [showSettingsMenu, setShowSettingsMenu] = useState(false);
112
+ const [activeSettingsTab, setActiveSettingsTab] = useState<'quality' | 'speed' | 'subtitles'>(
113
+ 'quality'
114
+ );
115
+ const [activeSubtitle, setActiveSubtitle] = useState<string | null>(
116
+ subtitles?.find(sub => sub.default)?.srcLang || null
117
+ );
118
+
119
+ const handleProgressClick = useCallback(
120
+ (e: React.MouseEvent<HTMLDivElement>) => {
121
+ const rect = e.currentTarget.getBoundingClientRect();
122
+ const percent = (e.clientX - rect.left) / rect.width;
123
+ seek(percent * duration);
124
+ },
125
+ [duration, seek]
126
+ );
127
+
128
+ const handleVolumeClick = useCallback(
129
+ (e: React.MouseEvent<HTMLDivElement>) => {
130
+ const rect = e.currentTarget.getBoundingClientRect();
131
+ const percent = (e.clientX - rect.left) / rect.width;
132
+ setVolume(percent);
133
+ },
134
+ [setVolume]
135
+ );
136
+
137
+ const handleDownload = useCallback(() => {
138
+ if (src) {
139
+ const a = document.createElement('a');
140
+ a.href = src;
141
+ a.download = 'video';
142
+ a.click();
143
+ }
144
+ }, [src]);
145
+
146
+ const handleShare = useCallback(async () => {
147
+ if (navigator.share) {
148
+ try {
149
+ await navigator.share({
150
+ title: 'Video',
151
+ url: window.location.href,
152
+ });
153
+ } catch (err) {
154
+ console.log('Error sharing:', err);
155
+ }
156
+ }
157
+ }, []);
158
+
159
+ const setSubtitle = useCallback(
160
+ (subtitleLang: string | null) => {
161
+ const video = videoRef.current;
162
+ if (video) {
163
+ const tracks = video.textTracks;
164
+ console.log('Setting subtitle:', subtitleLang, 'Available tracks:', tracks.length);
165
+
166
+ // Hide all tracks first
167
+ for (let i = 0; i < tracks.length; i++) {
168
+ const track = tracks[i];
169
+ if (track) {
170
+ track.mode = 'hidden';
171
+ console.log(`Track ${i}:`, track.language, track.label);
172
+ }
173
+ }
174
+
175
+ // Show selected track
176
+ if (subtitleLang) {
177
+ for (let i = 0; i < tracks.length; i++) {
178
+ const track = tracks[i];
179
+ if (track && track.language === subtitleLang) {
180
+ track.mode = 'showing';
181
+ console.log('Showing track:', track.language, track.label);
182
+ break;
183
+ }
184
+ }
185
+ }
186
+
187
+ setActiveSubtitle(subtitleLang);
188
+ }
189
+ },
190
+ [videoRef]
191
+ );
192
+
193
+ // Initialize subtitle tracks when video loads
194
+ useEffect(() => {
195
+ const video = videoRef.current;
196
+ if (video && subtitles) {
197
+ const handleLoadedData = () => {
198
+ // Wait for tracks to be loaded
199
+ setTimeout(() => {
200
+ const defaultSubtitle = subtitles.find(sub => sub.default);
201
+ if (defaultSubtitle) {
202
+ setSubtitle(defaultSubtitle.srcLang);
203
+ }
204
+ }, 100);
205
+ };
206
+
207
+ const handleCanPlay = () => {
208
+ // Ensure tracks are ready
209
+ if (video.textTracks.length > 0) {
210
+ const defaultSubtitle = subtitles.find(sub => sub.default);
211
+ if (defaultSubtitle) {
212
+ setSubtitle(defaultSubtitle.srcLang);
213
+ }
214
+ }
215
+ };
216
+
217
+ video.addEventListener('loadeddata', handleLoadedData);
218
+ video.addEventListener('canplay', handleCanPlay);
219
+
220
+ return () => {
221
+ video.removeEventListener('loadeddata', handleLoadedData);
222
+ video.removeEventListener('canplay', handleCanPlay);
223
+ };
224
+ }
225
+ return undefined;
226
+ }, [subtitles, setSubtitle, videoRef]);
227
+
228
+ const handleContainerClick = useCallback(() => {
229
+ if (containerRef.current) {
230
+ containerRef.current.focus();
231
+ }
232
+ }, []);
233
+
234
+ const handleKeyDown = useCallback(
235
+ (e: React.KeyboardEvent) => {
236
+ switch (e.key) {
237
+ case ' ':
238
+ case 'k':
239
+ e.preventDefault();
240
+ togglePlay();
241
+ break;
242
+ case 'ArrowLeft':
243
+ e.preventDefault();
244
+ seek(currentTime - 10);
245
+ break;
246
+ case 'ArrowRight':
247
+ e.preventDefault();
248
+ seek(currentTime + 10);
249
+ break;
250
+ case 'ArrowUp':
251
+ e.preventDefault();
252
+ setVolume(Math.min(1, volume + 0.1));
253
+ break;
254
+ case 'ArrowDown':
255
+ e.preventDefault();
256
+ setVolume(Math.max(0, volume - 0.1));
257
+ break;
258
+ case 'm':
259
+ e.preventDefault();
260
+ toggleMute();
261
+ break;
262
+ case 'f':
263
+ e.preventDefault();
264
+ toggleFullscreen();
265
+ break;
266
+ }
267
+ },
268
+ [togglePlay, currentTime, seek, volume, setVolume, toggleMute, toggleFullscreen]
269
+ );
270
+
271
+ return (
272
+ <div
273
+ ref={containerRef}
274
+ className={`${VIDEO_PLAYER.CLASSES.BASE} ${isYouTube ? VIDEO_PLAYER.CLASSES.YOUTUBE : ''} ${ambientMode ? VIDEO_PLAYER.CLASSES.AMBIENT : ''} ${className}`}
275
+ style={{
276
+ width,
277
+ height,
278
+ aspectRatio: aspectRatio ? aspectRatio.replace(':', '/') : undefined,
279
+ }}
280
+ tabIndex={0}
281
+ onClick={handleContainerClick}
282
+ onKeyDown={handleKeyDown}
283
+ role="application"
284
+ aria-label="Video player"
285
+ {...props}
286
+ >
287
+ {ambientMode && (
288
+ <canvas
289
+ ref={canvasRef}
290
+ className={VIDEO_PLAYER.CLASSES.AMBIENT_CANVAS}
291
+ aria-hidden="true"
292
+ />
293
+ )}
294
+
295
+ {isYouTube && videoId ? (
296
+ <iframe
297
+ ref={iframeRef}
298
+ className={VIDEO_PLAYER.CLASSES.VIDEO}
299
+ src={`https://www.youtube.com/embed/${videoId}?${new URLSearchParams({
300
+ autoplay: autoplay ? '1' : '0',
301
+ loop: loop ? '1' : '0',
302
+ mute: muted ? '1' : '0',
303
+ controls: controls ? '1' : '0',
304
+ modestbranding: '1',
305
+ rel: '0',
306
+ ...(loop && { playlist: videoId }),
307
+ }).toString()}`}
308
+ title="YouTube video player"
309
+ frameBorder="0"
310
+ allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
311
+ allowFullScreen
312
+ />
313
+ ) : (
314
+ <video
315
+ ref={element => {
316
+ videoRef.current = element;
317
+ if (typeof ref === 'function') {
318
+ ref(element);
319
+ } else if (ref) {
320
+ ref.current = element;
321
+ }
322
+ }}
323
+ className={VIDEO_PLAYER.CLASSES.VIDEO}
324
+ src={src}
325
+ poster={poster}
326
+ autoPlay={autoplay}
327
+ loop={loop}
328
+ muted={muted}
329
+ preload={preload}
330
+ controls={false}
331
+ crossOrigin="anonymous"
332
+ >
333
+ {subtitles &&
334
+ subtitles.map(subtitle => (
335
+ <track
336
+ key={subtitle.srcLang}
337
+ kind="subtitles"
338
+ src={subtitle.src}
339
+ srcLang={subtitle.srcLang}
340
+ label={subtitle.label}
341
+ default={subtitle.default}
342
+ />
343
+ ))}
344
+ </video>
345
+ )}
346
+
347
+ {isLoading && (
348
+ <div className={VIDEO_PLAYER.CLASSES.LOADING}>
349
+ <div className={VIDEO_PLAYER.CLASSES.SPINNER} />
350
+ </div>
351
+ )}
352
+
353
+ {controls && !isYouTube && (
354
+ <div
355
+ className={`${VIDEO_PLAYER.CLASSES.CONTROLS} ${showControls ? VIDEO_PLAYER.CLASSES.CONTROLS_VISIBLE : ''}`}
356
+ >
357
+ <div className={VIDEO_PLAYER.CLASSES.PROGRESS_CONTAINER}>
358
+ <div className={VIDEO_PLAYER.CLASSES.PROGRESS_BAR} onClick={handleProgressClick}>
359
+ <div
360
+ className={VIDEO_PLAYER.CLASSES.PROGRESS_BUFFERED}
361
+ style={{ width: `${getBufferedPercentage()}%` }}
362
+ />
363
+ <div
364
+ className={VIDEO_PLAYER.CLASSES.PROGRESS_PLAYED}
365
+ style={{ width: `${getProgressPercentage()}%` }}
366
+ />
367
+ <div
368
+ className={VIDEO_PLAYER.CLASSES.PROGRESS_THUMB}
369
+ style={{ left: `${getProgressPercentage()}%` }}
370
+ />
371
+ </div>
372
+ </div>
373
+
374
+ <div className={VIDEO_PLAYER.CLASSES.CONTROLS_ROW}>
375
+ <div className={VIDEO_PLAYER.CLASSES.CONTROLS_LEFT}>
376
+ <button
377
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
378
+ onClick={togglePlay}
379
+ aria-label={isPlaying ? 'Pause' : 'Play'}
380
+ >
381
+ {isPlaying ? <Pause size={20} /> : <Play size={20} />}
382
+ </button>
383
+
384
+ <button
385
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
386
+ onClick={() => seek(currentTime - 10)}
387
+ aria-label="Skip back 10 seconds"
388
+ >
389
+ <SkipBack size={20} />
390
+ </button>
391
+
392
+ <button
393
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
394
+ onClick={() => seek(currentTime + 10)}
395
+ aria-label="Skip forward 10 seconds"
396
+ >
397
+ <SkipForward size={20} />
398
+ </button>
399
+
400
+ <div className={VIDEO_PLAYER.CLASSES.VOLUME_CONTAINER}>
401
+ <button
402
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
403
+ onClick={toggleMute}
404
+ aria-label={isMuted ? 'Unmute' : 'Mute'}
405
+ >
406
+ {isMuted || volume === 0 ? <SpeakerX size={20} /> : <SpeakerHigh size={20} />}
407
+ </button>
408
+ <div className={VIDEO_PLAYER.CLASSES.VOLUME_SLIDER}>
409
+ <div className={VIDEO_PLAYER.CLASSES.VOLUME_BAR} onClick={handleVolumeClick}>
410
+ <div
411
+ className={VIDEO_PLAYER.CLASSES.VOLUME_FILL}
412
+ style={{ width: `${volume * 100}%` }}
413
+ />
414
+ </div>
415
+ </div>
416
+ </div>
417
+
418
+ <div className={VIDEO_PLAYER.CLASSES.TIME_DISPLAY}>
419
+ <span>{formatTime(currentTime)}</span>
420
+ <span>/</span>
421
+ <span>{formatTime(duration)}</span>
422
+ </div>
423
+ </div>
424
+
425
+ <div className={VIDEO_PLAYER.CLASSES.CONTROLS_RIGHT}>
426
+ {showSettings && (
427
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_CONTAINER}>
428
+ <button
429
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
430
+ onClick={() => setShowSettingsMenu(!showSettingsMenu)}
431
+ aria-label="Settings"
432
+ >
433
+ <Gear size={20} />
434
+ </button>
435
+
436
+ {showSettingsMenu && (
437
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_MENU}>
438
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_TABS}>
439
+ {quality && quality.length > 1 && (
440
+ <button
441
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_TAB} ${activeSettingsTab === 'quality' ? VIDEO_PLAYER.CLASSES.SETTINGS_TAB_ACTIVE : ''}`}
442
+ onClick={() => setActiveSettingsTab('quality')}
443
+ >
444
+ Quality
445
+ </button>
446
+ )}
447
+ <button
448
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_TAB} ${activeSettingsTab === 'speed' ? VIDEO_PLAYER.CLASSES.SETTINGS_TAB_ACTIVE : ''}`}
449
+ onClick={() => setActiveSettingsTab('speed')}
450
+ >
451
+ Speed
452
+ </button>
453
+ <button
454
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_TAB} ${activeSettingsTab === 'subtitles' ? VIDEO_PLAYER.CLASSES.SETTINGS_TAB_ACTIVE : ''}`}
455
+ onClick={() => setActiveSettingsTab('subtitles')}
456
+ >
457
+ Subtitles
458
+ </button>
459
+ </div>
460
+
461
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_CONTENT}>
462
+ {activeSettingsTab === 'quality' && quality && (
463
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_OPTIONS}>
464
+ {quality.map(q => (
465
+ <button
466
+ key={q.label}
467
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_OPTION} ${currentQuality?.label === q.label ? VIDEO_PLAYER.CLASSES.SETTINGS_OPTION_ACTIVE : ''}`}
468
+ onClick={() => setQuality(q)}
469
+ >
470
+ {q.label}
471
+ </button>
472
+ ))}
473
+ </div>
474
+ )}
475
+
476
+ {activeSettingsTab === 'speed' && (
477
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_OPTIONS}>
478
+ {playbackRates.map(rate => (
479
+ <button
480
+ key={rate}
481
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_OPTION} ${playbackRate === rate ? VIDEO_PLAYER.CLASSES.SETTINGS_OPTION_ACTIVE : ''}`}
482
+ onClick={() => setPlaybackRate(rate)}
483
+ >
484
+ {rate}x
485
+ </button>
486
+ ))}
487
+ </div>
488
+ )}
489
+
490
+ {activeSettingsTab === 'subtitles' && (
491
+ <div className={VIDEO_PLAYER.CLASSES.SETTINGS_OPTIONS}>
492
+ {subtitles && subtitles.length > 0 ? (
493
+ <>
494
+ <button
495
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_OPTION} ${activeSubtitle === null ? VIDEO_PLAYER.CLASSES.SETTINGS_OPTION_ACTIVE : ''}`}
496
+ onClick={() => setSubtitle(null)}
497
+ >
498
+ Off
499
+ </button>
500
+ {subtitles.map(subtitle => (
501
+ <button
502
+ key={subtitle.srcLang}
503
+ className={`${VIDEO_PLAYER.CLASSES.SETTINGS_OPTION} ${activeSubtitle === subtitle.srcLang ? VIDEO_PLAYER.CLASSES.SETTINGS_OPTION_ACTIVE : ''}`}
504
+ onClick={() => setSubtitle(subtitle.srcLang)}
505
+ >
506
+ {subtitle.label}
507
+ </button>
508
+ ))}
509
+ </>
510
+ ) : (
511
+ <div
512
+ className={VIDEO_PLAYER.CLASSES.SETTINGS_OPTION}
513
+ style={{ opacity: 0.6, cursor: 'default' }}
514
+ >
515
+ No subtitles available
516
+ </div>
517
+ )}
518
+ </div>
519
+ )}
520
+ </div>
521
+ </div>
522
+ )}
523
+ </div>
524
+ )}
525
+
526
+ {showDownload && (
527
+ <button
528
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
529
+ onClick={handleDownload}
530
+ aria-label="Download video"
531
+ >
532
+ <Download size={20} />
533
+ </button>
534
+ )}
535
+
536
+ {showShare && (
537
+ <button
538
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
539
+ onClick={handleShare}
540
+ aria-label="Share video"
541
+ >
542
+ <Share size={20} />
543
+ </button>
544
+ )}
545
+
546
+ <button
547
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
548
+ onClick={togglePictureInPicture}
549
+ aria-label="Picture in Picture"
550
+ >
551
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor">
552
+ <path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z" />
553
+ </svg>
554
+ </button>
555
+
556
+ <button
557
+ className={VIDEO_PLAYER.CLASSES.CONTROL_BUTTON}
558
+ onClick={toggleFullscreen}
559
+ aria-label={isFullscreen ? 'Exit fullscreen' : 'Enter fullscreen'}
560
+ >
561
+ {isFullscreen ? <ArrowsIn size={20} /> : <ArrowsOut size={20} />}
562
+ </button>
563
+ </div>
564
+ </div>
565
+ </div>
566
+ )}
567
+ </div>
568
+ );
569
+ }
570
+ );
571
+
572
+ VideoPlayer.displayName = 'VideoPlayer';
573
+
574
+ export default VideoPlayer;
@@ -0,0 +1,7 @@
1
+ export { default as VideoPlayer } from './VideoPlayer';
2
+ export type {
3
+ VideoPlayerProps,
4
+ VideoQuality,
5
+ VideoSubtitle,
6
+ VideoChapter,
7
+ } from '../../lib/types/components';
@@ -0,0 +1,111 @@
1
+ export type { SliderProps, VideoPlayerProps } from '../lib/types/components';
2
+ export { default as Accordion, type AccordionProps } from './Accordion/Accordion';
3
+ export { default as AtomixLogo, type AtomixLogoProps } from './AtomixLogo/AtomixLogo';
4
+ export { default as Avatar, type AvatarProps } from './Avatar/Avatar';
5
+ export { default as AvatarGroup, type AvatarGroupProps } from './Avatar/AvatarGroup';
6
+ export { default as Badge, type BadgeProps } from './Badge/Badge';
7
+ export { default as Block, type BlockProps } from './Block';
8
+ export { default as Breadcrumb, type BreadcrumbProps } from './Breadcrumb/Breadcrumb';
9
+ export { default as Button, type ButtonProps } from './Button/Button';
10
+ export { default as Callout, type CalloutProps } from './Callout/Callout';
11
+ export { default as Card, type CardProps } from './Card/Card';
12
+ export {
13
+ AdvancedChart,
14
+ AnimatedChart,
15
+ AreaChart,
16
+ BarChart,
17
+ BubbleChart,
18
+ CandlestickChart,
19
+ Chart,
20
+ ChartRenderer,
21
+ DonutChart,
22
+ FunnelChart,
23
+ GaugeChart,
24
+ HeatmapChart,
25
+ LineChart,
26
+ MultiAxisChart,
27
+ PieChart,
28
+ RadarChart,
29
+ RealTimeChart,
30
+ ScatterChart,
31
+ TreemapChart,
32
+ WaterfallChart,
33
+ type AdvancedChartProps,
34
+ type AnimatedChartProps,
35
+ type AreaChartProps,
36
+ type BarChartProps,
37
+ type BubbleChartProps,
38
+ type BubbleDataPoint,
39
+ type CandlestickChartProps,
40
+ type CandlestickDataPoint,
41
+ type ChartProps,
42
+ type DonutChartProps,
43
+ type FunnelChartProps,
44
+ type FunnelDataPoint,
45
+ type GaugeChartProps,
46
+ type HeatmapChartProps,
47
+ type HeatmapDataPoint,
48
+ type LineChartProps,
49
+ type MultiAxisChartProps,
50
+ type PieChartProps,
51
+ type RadarChartProps,
52
+ type RealTimeChartProps,
53
+ type ScatterChartProps,
54
+ type ScatterDataPoint,
55
+ type TreemapChartProps,
56
+ type TreemapDataPoint,
57
+ type TreemapNode,
58
+ type WaterfallChartProps,
59
+ type WaterfallDataPoint,
60
+ } from './Chart';
61
+ export {
62
+ default as ColorModeToggle,
63
+ type ColorModeToggleProps,
64
+ } from './ColorModeToggle/ColorModeToggle';
65
+ export { default as Countdown, type CountdownProps } from './Countdown/Countdown';
66
+ export { default as DataTable, type DataTableProps } from './DataTable/DataTable';
67
+ export { default as DatePicker, type DatePickerProps } from './DatePicker/DatePicker';
68
+ export { default as Dropdown, type DropdownProps } from './Dropdown/Dropdown';
69
+ export { default as EdgePanel, type EdgePanelProps } from './EdgePanel/EdgePanel';
70
+ export { default as Checkbox, type CheckboxProps } from './Form/Checkbox';
71
+ export { default as Form, type FormProps } from './Form/Form';
72
+ export { default as FormGroup, type FormGroupProps } from './Form/FormGroup';
73
+ export { default as Input, type InputProps } from './Form/Input';
74
+ export { default as Radio, type RadioProps } from './Form/Radio';
75
+ export { default as Select, type SelectProps } from './Form/Select';
76
+ export { default as Textarea, type TextareaProps } from './Form/Textarea';
77
+ export { default as Hero, type HeroProps } from './Hero/Hero';
78
+ export { default as Icon, type IconProps } from './Icon/Icon';
79
+ export { default as List, type ListProps } from './List/List';
80
+ export { default as Messages, type MessagesProps } from './Messages/Messages';
81
+ export { default as Modal, type ModalProps } from './Modal/Modal';
82
+ export { default as Nav, type NavProps } from './Navigation/Nav/Nav';
83
+ export { default as NavItem, type NavItemProps } from './Navigation/Nav/NavItem';
84
+ export { default as Navbar, type NavbarProps } from './Navigation/Navbar/Navbar';
85
+ export { default as SideMenu, type SideMenuProps } from './Navigation/SideMenu/SideMenu';
86
+ export {
87
+ default as SideMenuItem,
88
+ type SideMenuItemProps,
89
+ } from './Navigation/SideMenu/SideMenuItem';
90
+ export {
91
+ default as SideMenuList,
92
+ type SideMenuListProps,
93
+ } from './Navigation/SideMenu/SideMenuList';
94
+ export { default as Pagination, type PaginationProps } from './Pagination/Pagination';
95
+ export { default as PhotoViewer, type PhotoViewerProps } from './PhotoViewer/PhotoViewer';
96
+ export { default as Popover, type PopoverProps } from './Popover/Popover';
97
+ export { default as ProductReview, type ProductReviewProps } from './ProductReview/ProductReview';
98
+ export { default as Progress, type ProgressProps } from './Progress/Progress';
99
+ export { default as Rating, type RatingProps } from './Rating/Rating';
100
+ export { default as River, type RiverProps } from './River/River';
101
+ export { default as SectionIntro, type SectionIntroProps } from './SectionIntro/SectionIntro';
102
+ export { Slider } from './Slider/Slider';
103
+ export { default as Spinner, type SpinnerProps } from './Spinner/Spinner';
104
+ export { default as Steps, type StepsProps } from './Steps/Steps';
105
+ export { default as Tab, type TabProps } from './Tab/Tab';
106
+ export { default as Testimonial, type TestimonialProps } from './Testimonial/Testimonial';
107
+ export { default as Todo, type TodoProps } from './Todo/Todo';
108
+ export { default as Toggle, type ToggleProps } from './Toggle/Toggle';
109
+ export { default as Tooltip, type TooltipProps } from './Tooltip/Tooltip';
110
+ export { default as Upload, type UploadProps } from './Upload/Upload';
111
+ export { VideoPlayer } from './VideoPlayer/VideoPlayer';