@shohojdhara/atomix 0.2.3 → 0.2.5

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 (225) hide show
  1. package/README.md +19 -0
  2. package/dist/atomix.css +1703 -1544
  3. package/dist/atomix.min.css +4 -4
  4. package/dist/index.d.ts +1465 -963
  5. package/dist/index.esm.js +16289 -25908
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +15650 -21780
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.min.js +1 -1
  10. package/dist/index.min.js.map +1 -1
  11. package/dist/themes/applemix.css +15008 -0
  12. package/dist/themes/applemix.min.css +72 -0
  13. package/dist/themes/boomdevs.css +1608 -1450
  14. package/dist/themes/boomdevs.min.css +5 -5
  15. package/dist/themes/esrar.css +1702 -1543
  16. package/dist/themes/esrar.min.css +4 -4
  17. package/dist/themes/flashtrade.css +15159 -0
  18. package/dist/themes/flashtrade.min.css +86 -0
  19. package/dist/themes/mashroom.css +1699 -1540
  20. package/dist/themes/mashroom.min.css +7 -7
  21. package/dist/themes/shaj-default.css +1693 -1534
  22. package/dist/themes/shaj-default.min.css +4 -4
  23. package/package.json +6 -17
  24. package/src/components/Accordion/Accordion.stories.tsx +662 -21
  25. package/src/components/Accordion/Accordion.tsx +21 -14
  26. package/src/components/AtomixGlass/AtomixGlass.test.tsx +106 -72
  27. package/src/components/AtomixGlass/AtomixGlass.tsx +529 -1195
  28. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +400 -0
  29. package/src/components/AtomixGlass/GlassFilter.tsx +156 -0
  30. package/src/components/AtomixGlass/README.md +124 -2
  31. package/src/components/AtomixGlass/atomixGLass.old.tsx +1266 -0
  32. package/src/components/AtomixGlass/glass-utils.ts +263 -0
  33. package/src/components/AtomixGlass/shader-utils.ts +792 -68
  34. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +1250 -0
  35. package/src/components/AtomixGlass/stories/Examples.stories.tsx +5768 -0
  36. package/src/components/AtomixGlass/stories/Modes.stories.tsx +1065 -0
  37. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1129 -0
  38. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +395 -0
  39. package/src/components/AtomixGlass/stories/shared-components.tsx +301 -0
  40. package/src/components/AtomixGlass/utils.ts +3 -3
  41. package/src/components/Avatar/Avatar.tsx +3 -0
  42. package/src/components/Avatar/AvatarGroup.tsx +2 -1
  43. package/src/components/Badge/Badge.stories.tsx +76 -55
  44. package/src/components/Badge/Badge.tsx +12 -14
  45. package/src/components/Breadcrumb/Breadcrumb.tsx +23 -4
  46. package/src/components/Button/Button.stories.tsx +501 -20
  47. package/src/components/Button/Button.tsx +5 -8
  48. package/src/components/Callout/Callout.stories.tsx +86 -35
  49. package/src/components/Callout/Callout.tsx +31 -9
  50. package/src/components/Card/Card.stories.tsx +565 -2
  51. package/src/components/Card/Card.tsx +15 -4
  52. package/src/components/Card/ElevationCard.tsx +2 -0
  53. package/src/components/Chart/AnimatedChart.tsx +179 -156
  54. package/src/components/Chart/AreaChart.tsx +123 -12
  55. package/src/components/Chart/BarChart.tsx +91 -100
  56. package/src/components/Chart/BaseChart.tsx +80 -0
  57. package/src/components/Chart/BubbleChart.tsx +114 -290
  58. package/src/components/Chart/CandlestickChart.tsx +282 -622
  59. package/src/components/Chart/Chart.stories.tsx +576 -179
  60. package/src/components/Chart/Chart.tsx +374 -75
  61. package/src/components/Chart/ChartRenderer.tsx +371 -220
  62. package/src/components/Chart/ChartToolbar.tsx +372 -61
  63. package/src/components/Chart/ChartTooltip.tsx +33 -18
  64. package/src/components/Chart/DonutChart.tsx +172 -254
  65. package/src/components/Chart/FunnelChart.tsx +169 -240
  66. package/src/components/Chart/GaugeChart.tsx +224 -392
  67. package/src/components/Chart/HeatmapChart.tsx +302 -440
  68. package/src/components/Chart/LineChart.tsx +148 -103
  69. package/src/components/Chart/MultiAxisChart.tsx +267 -395
  70. package/src/components/Chart/PieChart.tsx +114 -64
  71. package/src/components/Chart/RadarChart.tsx +202 -218
  72. package/src/components/Chart/ScatterChart.tsx +111 -97
  73. package/src/components/Chart/TreemapChart.tsx +147 -222
  74. package/src/components/Chart/WaterfallChart.tsx +253 -291
  75. package/src/components/Chart/index.ts +11 -9
  76. package/src/components/Chart/types.ts +85 -9
  77. package/src/components/Chart/utils.ts +66 -0
  78. package/src/components/ColorModeToggle/ColorModeToggle.tsx +6 -3
  79. package/src/components/Countdown/Countdown.tsx +4 -0
  80. package/src/components/DataTable/DataTable.tsx +2 -1
  81. package/src/components/DatePicker/DatePicker.stories.tsx +689 -12
  82. package/src/components/DatePicker/DatePicker.tsx +3 -9
  83. package/src/components/DatePicker/types.ts +5 -0
  84. package/src/components/Dropdown/Dropdown.stories.tsx +32 -25
  85. package/src/components/Dropdown/Dropdown.tsx +26 -28
  86. package/src/components/EdgePanel/EdgePanel.stories.tsx +473 -2
  87. package/src/components/EdgePanel/EdgePanel.tsx +101 -13
  88. package/src/components/Footer/Footer.stories.tsx +187 -60
  89. package/src/components/Footer/Footer.test.tsx +134 -0
  90. package/src/components/Footer/Footer.tsx +133 -34
  91. package/src/components/Footer/FooterLink.tsx +1 -1
  92. package/src/components/Footer/FooterSection.tsx +53 -36
  93. package/src/components/Footer/FooterSocialLink.tsx +32 -29
  94. package/src/components/Footer/README.md +82 -3
  95. package/src/components/Footer/index.ts +1 -1
  96. package/src/components/Form/Checkbox.stories.tsx +13 -5
  97. package/src/components/Form/Checkbox.tsx +3 -6
  98. package/src/components/Form/Form.stories.tsx +10 -3
  99. package/src/components/Form/Form.tsx +2 -0
  100. package/src/components/Form/FormGroup.tsx +2 -1
  101. package/src/components/Form/Input.stories.tsx +12 -11
  102. package/src/components/Form/Input.tsx +97 -95
  103. package/src/components/Form/Radio.stories.tsx +22 -7
  104. package/src/components/Form/Radio.tsx +3 -6
  105. package/src/components/Form/Select.stories.tsx +21 -6
  106. package/src/components/Form/Select.tsx +3 -5
  107. package/src/components/Form/Textarea.stories.tsx +13 -11
  108. package/src/components/Form/Textarea.tsx +88 -86
  109. package/src/components/Hero/Hero.stories.tsx +2 -3
  110. package/src/components/Hero/Hero.tsx +5 -6
  111. package/src/components/Icon/Icon.tsx +12 -1
  112. package/src/components/List/List.tsx +2 -1
  113. package/src/components/List/ListGroup.tsx +2 -1
  114. package/src/components/Messages/Messages.stories.tsx +113 -0
  115. package/src/components/Messages/Messages.tsx +52 -9
  116. package/src/components/Modal/Modal.stories.tsx +48 -32
  117. package/src/components/Modal/Modal.tsx +19 -24
  118. package/src/components/Navigation/Menu/MegaMenu.tsx +2 -2
  119. package/src/components/Navigation/Menu/Menu.tsx +2 -2
  120. package/src/components/Navigation/Nav/Nav.stories.tsx +469 -0
  121. package/src/components/Navigation/Nav/Nav.tsx +22 -4
  122. package/src/components/Navigation/Nav/NavDropdown.tsx +10 -1
  123. package/src/components/Navigation/Navbar/Navbar.stories.tsx +413 -0
  124. package/src/components/Navigation/Navbar/Navbar.tsx +70 -29
  125. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +340 -0
  126. package/src/components/Navigation/SideMenu/SideMenu.tsx +29 -2
  127. package/src/components/Pagination/Pagination.stories.tsx +13 -6
  128. package/src/components/Pagination/Pagination.tsx +7 -6
  129. package/src/components/PhotoViewer/PhotoViewer.tsx +2 -1
  130. package/src/components/Popover/Popover.stories.tsx +32 -24
  131. package/src/components/Popover/Popover.tsx +4 -1
  132. package/src/components/ProductReview/ProductReview.tsx +8 -2
  133. package/src/components/Progress/Progress.tsx +19 -3
  134. package/src/components/Rating/Rating.stories.tsx +11 -6
  135. package/src/components/Rating/Rating.tsx +3 -5
  136. package/src/components/River/River.tsx +5 -5
  137. package/src/components/SectionIntro/SectionIntro.tsx +8 -2
  138. package/src/components/Slider/Slider.stories.tsx +4 -4
  139. package/src/components/Slider/Slider.tsx +4 -3
  140. package/src/components/Spinner/Spinner.tsx +19 -3
  141. package/src/components/Steps/Steps.stories.tsx +5 -4
  142. package/src/components/Steps/Steps.tsx +8 -5
  143. package/src/components/Tab/Tab.stories.tsx +4 -3
  144. package/src/components/Tab/Tab.tsx +8 -6
  145. package/src/components/Testimonial/Testimonial.tsx +8 -2
  146. package/src/components/Todo/Todo.tsx +2 -1
  147. package/src/components/Toggle/Toggle.stories.tsx +5 -4
  148. package/src/components/Toggle/Toggle.tsx +8 -5
  149. package/src/components/Tooltip/Tooltip.stories.tsx +40 -30
  150. package/src/components/Tooltip/Tooltip.tsx +9 -2
  151. package/src/components/Upload/Upload.stories.tsx +252 -0
  152. package/src/components/Upload/Upload.tsx +92 -53
  153. package/src/components/VideoPlayer/VideoPlayer.tsx +3 -1
  154. package/src/components/index.ts +0 -4
  155. package/src/layouts/Grid/Grid.stories.tsx +10 -23
  156. package/src/layouts/Grid/Grid.tsx +20 -1
  157. package/src/layouts/Grid/GridCol.tsx +76 -48
  158. package/src/lib/composables/useAtomixGlass.ts +861 -44
  159. package/src/lib/composables/useBarChart.ts +21 -4
  160. package/src/lib/composables/useChart.ts +227 -370
  161. package/src/lib/composables/useChartExport.ts +19 -78
  162. package/src/lib/composables/useChartToolbar.ts +11 -21
  163. package/src/lib/composables/useEdgePanel.ts +125 -71
  164. package/src/lib/composables/useFooter.ts +3 -3
  165. package/src/lib/composables/useGlassContainer.ts +16 -7
  166. package/src/lib/composables/useLineChart.ts +11 -2
  167. package/src/lib/composables/usePieChart.ts +4 -14
  168. package/src/lib/composables/useRiver.ts +5 -0
  169. package/src/lib/composables/useSlider.ts +62 -24
  170. package/src/lib/composables/useVideoPlayer.ts +60 -63
  171. package/src/lib/constants/components.ts +147 -32
  172. package/src/lib/types/components.ts +355 -25
  173. package/src/lib/utils/displacement-generator.ts +55 -49
  174. package/src/lib/utils/icons.ts +1 -1
  175. package/src/lib/utils/index.ts +16 -10
  176. package/src/styles/01-settings/_settings.accordion.scss +19 -19
  177. package/src/styles/01-settings/_settings.animations.scss +5 -5
  178. package/src/styles/01-settings/_settings.avatar-group.scss +1 -1
  179. package/src/styles/01-settings/_settings.avatar.scss +17 -17
  180. package/src/styles/01-settings/_settings.background.scss +0 -3
  181. package/src/styles/01-settings/_settings.badge.scss +1 -1
  182. package/src/styles/01-settings/_settings.breadcrumb.scss +1 -1
  183. package/src/styles/01-settings/_settings.card.scss +1 -1
  184. package/src/styles/01-settings/_settings.chart.scss +65 -2
  185. package/src/styles/01-settings/_settings.dropdown.scss +1 -1
  186. package/src/styles/01-settings/_settings.edge-panel.scss +1 -1
  187. package/src/styles/01-settings/_settings.footer.scss +35 -42
  188. package/src/styles/01-settings/_settings.input.scss +1 -1
  189. package/src/styles/01-settings/_settings.list.scss +1 -1
  190. package/src/styles/01-settings/_settings.rating.scss +1 -1
  191. package/src/styles/01-settings/_settings.tabs.scss +1 -1
  192. package/src/styles/01-settings/_settings.upload.scss +6 -5
  193. package/src/styles/02-tools/_tools.animations.scss +4 -5
  194. package/src/styles/02-tools/_tools.background.scss +1 -13
  195. package/src/styles/02-tools/_tools.glass.scss +0 -1
  196. package/src/styles/02-tools/_tools.utility-api.scss +91 -48
  197. package/src/styles/03-generic/_generic.root.scss +1 -4
  198. package/src/styles/04-elements/_elements.body.scss +0 -1
  199. package/src/styles/06-components/_components.atomix-glass.scss +249 -0
  200. package/src/styles/06-components/_components.badge.scss +8 -23
  201. package/src/styles/06-components/_components.button.scss +8 -3
  202. package/src/styles/06-components/_components.callout.scss +10 -5
  203. package/src/styles/06-components/_components.card.scss +2 -14
  204. package/src/styles/06-components/_components.chart.scss +969 -1449
  205. package/src/styles/06-components/_components.dropdown.scss +19 -7
  206. package/src/styles/06-components/_components.edge-panel.scss +103 -0
  207. package/src/styles/06-components/_components.footer.scss +166 -85
  208. package/src/styles/06-components/_components.input.scss +8 -9
  209. package/src/styles/06-components/_components.list.scss +1 -0
  210. package/src/styles/06-components/_components.messages.scss +176 -0
  211. package/src/styles/06-components/_components.modal.scss +16 -4
  212. package/src/styles/06-components/_components.navbar.scss +12 -1
  213. package/src/styles/06-components/_components.side-menu.scss +5 -0
  214. package/src/styles/06-components/_components.skeleton.scss +8 -6
  215. package/src/styles/06-components/_components.upload.scss +219 -4
  216. package/src/styles/06-components/old.chart.styles.scss +1 -30
  217. package/src/styles/99-utilities/_index.scss +1 -0
  218. package/src/styles/99-utilities/_utilities.glass-fixes.scss +1 -0
  219. package/src/styles/99-utilities/_utilities.scss +1 -1
  220. package/src/components/AtomixGlass/AtomixGlass.stories.tsx +0 -3011
  221. package/src/components/AtomixGlass/AtomixGlassComprehensivePreview.stories.tsx +0 -1369
  222. package/src/components/Chart/AdvancedChart.tsx +0 -624
  223. package/src/components/Chart/LineChartNew.tsx +0 -167
  224. package/src/components/Chart/RealTimeChart.tsx +0 -436
  225. package/src/components/DatePicker/DatePicker copy.tsx +0 -551
@@ -607,3 +607,343 @@ export const InteractiveDemo: Story = {
607
607
  onToggle: fn(),
608
608
  },
609
609
  };
610
+
611
+ // Glass Morphism Effect Stories - Professional Showcase
612
+
613
+ /**
614
+ * Background wrapper component for consistent glass effect demonstrations
615
+ */
616
+ interface BackgroundWrapperProps {
617
+ children: React.ReactNode;
618
+ backgroundImage: string;
619
+ height?: string;
620
+ padding?: string;
621
+ overlay?: boolean;
622
+ }
623
+
624
+ const BackgroundWrapper = ({
625
+ children,
626
+ backgroundImage,
627
+ height = '90vh',
628
+ padding = '60px 40px',
629
+ overlay = false,
630
+ }: BackgroundWrapperProps) => (
631
+ <div
632
+ style={{
633
+ position: 'relative',
634
+ width: '100%',
635
+ minHeight: height,
636
+ background: `url(${backgroundImage})`,
637
+ backgroundSize: 'cover',
638
+ backgroundPosition: 'center',
639
+ backgroundAttachment: 'fixed',
640
+ display: 'flex',
641
+ alignItems: 'center',
642
+ justifyContent: 'flex-start',
643
+ padding: padding,
644
+ borderRadius: '12px',
645
+ gap: '3rem',
646
+ }}
647
+ >
648
+ {overlay && (
649
+ <div
650
+ style={{
651
+ position: 'absolute',
652
+ top: 0,
653
+ left: 0,
654
+ right: 0,
655
+ bottom: 0,
656
+ backgroundColor: 'rgba(0,0,0,0.3)',
657
+ borderRadius: '12px',
658
+ }}
659
+ />
660
+ )}
661
+ {children}
662
+ </div>
663
+ );
664
+
665
+ /**
666
+ * Glass Effect - Default
667
+ *
668
+ * Demonstrates the SideMenu component with default glass morphism settings.
669
+ * The glass effect provides a modern, frosted appearance perfect for sidebar navigation.
670
+ */
671
+ export const Glass: Story = {
672
+ render: () => (
673
+ <BackgroundWrapper
674
+ backgroundImage="https://images.unsplash.com/photo-1506905925346-21bda4d32df4?q=80&w=2940&auto=format&fit=crop"
675
+ overlay
676
+ >
677
+ <div style={{ position: 'relative', width: '300px' }}>
678
+ <SideMenu title="Navigation" glass>
679
+ <SideMenuList>
680
+ <SideMenuItem href="/" icon={<Icon name="House" size="sm" />} active>
681
+ Home
682
+ </SideMenuItem>
683
+ <SideMenuItem href="/explore" icon={<Icon name="Compass" size="sm" />}>
684
+ Explore
685
+ </SideMenuItem>
686
+ <SideMenuItem href="/services" icon={<Icon name="Briefcase" size="sm" />}>
687
+ Services
688
+ </SideMenuItem>
689
+ <SideMenuItem href="/contact" icon={<Icon name="Envelope" size="sm" />}>
690
+ Contact
691
+ </SideMenuItem>
692
+ </SideMenuList>
693
+ <SideMenuList>
694
+ <SideMenuItem href="/settings" icon={<Icon name="Gear" size="sm" />}>
695
+ Settings
696
+ </SideMenuItem>
697
+ </SideMenuList>
698
+ </SideMenu>
699
+ </div>
700
+ <div style={{ position: 'relative', zIndex: 1, flex: 1, maxWidth: '600px' }}>
701
+ <h2
702
+ style={{
703
+ color: 'white',
704
+ fontSize: '32px',
705
+ fontWeight: 600,
706
+ marginBottom: '16px',
707
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
708
+ }}
709
+ >
710
+ Glass SideMenu
711
+ </h2>
712
+ <p
713
+ style={{
714
+ color: 'rgba(255,255,255,0.9)',
715
+ fontSize: '18px',
716
+ lineHeight: 1.6,
717
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
718
+ }}
719
+ >
720
+ A modern sidebar navigation with glassmorphism effect. Perfect for dashboards, admin
721
+ panels, and application interfaces that require elegant navigation.
722
+ </p>
723
+ </div>
724
+ </BackgroundWrapper>
725
+ ),
726
+ parameters: {
727
+ layout: 'fullscreen',
728
+ docs: {
729
+ description: {
730
+ story:
731
+ 'Basic glass morphism effect with default settings. The sidebar maintains excellent readability while creating a beautiful frosted glass aesthetic.',
732
+ },
733
+ },
734
+ },
735
+ };
736
+
737
+ /**
738
+ * Glass with Custom Properties
739
+ *
740
+ * Demonstrates advanced customization of the glass effect with various
741
+ * displacement, blur, and corner radius settings.
742
+ */
743
+ export const GlassCustom: Story = {
744
+ render: () => (
745
+ <BackgroundWrapper
746
+ backgroundImage="https://images.unsplash.com/photo-1441974231531-c6227db76b6e?q=80&w=2940&auto=format&fit=crop"
747
+ overlay
748
+ >
749
+ <div style={{ position: 'relative', width: '320px' }}>
750
+ <SideMenu
751
+ title="Nature Explorer"
752
+ glass={{
753
+ displacementScale: 70,
754
+ blurAmount: 2,
755
+ cornerRadius: 12,
756
+ mode: 'shader',
757
+ }}
758
+ >
759
+ <SideMenuList>
760
+ <SideMenuItem href="/" icon={<Icon name="House" size="sm" />} active>
761
+ Home
762
+ </SideMenuItem>
763
+ <SideMenuItem href="/trails" icon={<Icon name="MapPin" size="sm" />}>
764
+ Trails
765
+ </SideMenuItem>
766
+ <SideMenuItem href="/wildlife" icon={<Icon name="Sparkle" size="sm" />}>
767
+ Wildlife
768
+ </SideMenuItem>
769
+ <SideMenuItem href="/camping" icon={<Icon name="Tent" size="sm" />}>
770
+ Camping
771
+ </SideMenuItem>
772
+ </SideMenuList>
773
+ <SideMenuList>
774
+ <SideMenuItem href="/guides" icon={<Icon name="Book" size="sm" />}>
775
+ Guides
776
+ </SideMenuItem>
777
+ <SideMenuItem href="/gear" icon={<Icon name="Backpack" size="sm" />}>
778
+ Gear List
779
+ </SideMenuItem>
780
+ </SideMenuList>
781
+ </SideMenu>
782
+ </div>
783
+ <div style={{ position: 'relative', zIndex: 1, flex: 1, maxWidth: '600px' }}>
784
+ <h2
785
+ style={{
786
+ color: 'white',
787
+ fontSize: '32px',
788
+ fontWeight: 600,
789
+ marginBottom: '16px',
790
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
791
+ }}
792
+ >
793
+ Custom Glass Properties
794
+ </h2>
795
+ <p
796
+ style={{
797
+ color: 'rgba(255,255,255,0.9)',
798
+ fontSize: '18px',
799
+ lineHeight: 1.6,
800
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
801
+ }}
802
+ >
803
+ Enhanced glass effect with custom displacement, blur, and corner radius. Perfect for
804
+ creating unique visual experiences tailored to your brand.
805
+ </p>
806
+ </div>
807
+ </BackgroundWrapper>
808
+ ),
809
+ parameters: {
810
+ layout: 'fullscreen',
811
+ docs: {
812
+ description: {
813
+ story:
814
+ 'Customized glass effect with increased displacement and blur for a more pronounced visual impact. Demonstrates the flexibility of the glass morphism system.',
815
+ },
816
+ },
817
+ },
818
+ };
819
+
820
+ /**
821
+ * Glass Theme Variations
822
+ *
823
+ * A comprehensive showcase of glass sidebar across different themed
824
+ * backgrounds, demonstrating versatility and adaptability.
825
+ */
826
+ export const GlassThemeShowcase: Story = {
827
+ render: () => (
828
+ <div style={{ display: 'flex', flexDirection: 'column', gap: '3rem' }}>
829
+ {/* Ocean Theme */}
830
+ <BackgroundWrapper
831
+ backgroundImage="https://images.unsplash.com/photo-1505142468610-359e7d316be0?q=80&w=2940&auto=format&fit=crop"
832
+ height="70vh"
833
+ >
834
+ <div style={{ position: 'relative', width: '300px' }}>
835
+ <SideMenu title="Ocean Explorer" glass>
836
+ <SideMenuList>
837
+ <SideMenuItem href="/" icon={<Icon name="House" size="sm" />} active>
838
+ Home
839
+ </SideMenuItem>
840
+ <SideMenuItem href="/beaches" icon={<Icon name="Sun" size="sm" />}>
841
+ Beaches
842
+ </SideMenuItem>
843
+ <SideMenuItem href="/diving" icon={<Icon name="Waves" size="sm" />}>
844
+ Diving
845
+ </SideMenuItem>
846
+ </SideMenuList>
847
+ </SideMenu>
848
+ </div>
849
+ <div style={{ position: 'relative', flex: 1 }}>
850
+ <h3
851
+ style={{
852
+ color: 'white',
853
+ fontSize: '24px',
854
+ fontWeight: 600,
855
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
856
+ }}
857
+ >
858
+ Ocean & Travel Theme
859
+ </h3>
860
+ </div>
861
+ </BackgroundWrapper>
862
+
863
+ {/* Urban Theme */}
864
+ <BackgroundWrapper
865
+ backgroundImage="https://images.unsplash.com/photo-1514565131-fce0801e5785?q=80&w=2940&auto=format&fit=crop"
866
+ height="70vh"
867
+ >
868
+ <div style={{ position: 'relative', width: '300px' }}>
869
+ <SideMenu title="Admin Panel" glass>
870
+ <SideMenuList>
871
+ <SideMenuItem href="/dashboard" icon={<Icon name="ChartBar" size="sm" />} active>
872
+ Dashboard
873
+ </SideMenuItem>
874
+ <SideMenuItem href="/analytics" icon={<Icon name="TrendUp" size="sm" />}>
875
+ Analytics
876
+ </SideMenuItem>
877
+ <SideMenuItem href="/users" icon={<Icon name="Users" size="sm" />}>
878
+ Users
879
+ </SideMenuItem>
880
+ </SideMenuList>
881
+ </SideMenu>
882
+ </div>
883
+ <div style={{ position: 'relative', flex: 1 }}>
884
+ <h3
885
+ style={{
886
+ color: 'white',
887
+ fontSize: '24px',
888
+ fontWeight: 600,
889
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
890
+ }}
891
+ >
892
+ Modern & Professional Theme
893
+ </h3>
894
+ </div>
895
+ </BackgroundWrapper>
896
+
897
+ {/* Sunset Theme */}
898
+ <BackgroundWrapper
899
+ backgroundImage="https://images.unsplash.com/photo-1495616811223-4d98c6e9c869?q=80&w=2940&auto=format&fit=crop"
900
+ height="70vh"
901
+ >
902
+ <div style={{ position: 'relative', width: '320px' }}>
903
+ <SideMenu
904
+ title="Travel Hub"
905
+ glass={{
906
+ displacementScale: 60,
907
+ blurAmount: 1.8,
908
+ cornerRadius: 16,
909
+ mode: 'shader',
910
+ }}
911
+ >
912
+ <SideMenuList>
913
+ <SideMenuItem href="/home" icon={<Icon name="House" size="sm" />} active>
914
+ Home
915
+ </SideMenuItem>
916
+ <SideMenuItem href="/destinations" icon={<Icon name="MapPin" size="sm" />}>
917
+ Destinations
918
+ </SideMenuItem>
919
+ <SideMenuItem href="/bookings" icon={<Icon name="Calendar" size="sm" />}>
920
+ Bookings
921
+ </SideMenuItem>
922
+ </SideMenuList>
923
+ </SideMenu>
924
+ </div>
925
+ <div style={{ position: 'relative', flex: 1 }}>
926
+ <h3
927
+ style={{
928
+ color: 'white',
929
+ fontSize: '24px',
930
+ fontWeight: 600,
931
+ textShadow: '0 2px 10px rgba(0,0,0,0.5)',
932
+ }}
933
+ >
934
+ Warm & Inviting Theme
935
+ </h3>
936
+ </div>
937
+ </BackgroundWrapper>
938
+ </div>
939
+ ),
940
+ parameters: {
941
+ layout: 'fullscreen',
942
+ docs: {
943
+ description: {
944
+ story:
945
+ 'A comprehensive showcase demonstrating how glass sidebar adapts to different themes and color palettes. Each example represents a different use case and aesthetic.',
946
+ },
947
+ },
948
+ },
949
+ };
@@ -3,6 +3,8 @@ import { SideMenuProps } from '../../../lib/types/components';
3
3
  import { useSideMenu } from '../../../lib/composables/useSideMenu';
4
4
  import { SIDE_MENU } from '../../../lib/constants/components';
5
5
  import { Icon } from '../../Icon';
6
+ import { AtomixGlass } from '../../AtomixGlass/AtomixGlass';
7
+ import { log } from 'console';
6
8
 
7
9
  /**
8
10
  * SideMenu component provides a collapsible navigation menu with title and menu items.
@@ -28,9 +30,11 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
28
30
  onToggle,
29
31
  collapsible = true,
30
32
  className = '',
33
+ style,
31
34
  disabled = false,
32
35
  toggleIcon,
33
36
  id,
37
+ glass,
34
38
  },
35
39
  ref
36
40
  ) => {
@@ -54,8 +58,8 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
54
58
  // Default toggle icon using Atomix Icon component
55
59
  const defaultToggleIcon = <Icon name="CaretRight" size="xs" />;
56
60
 
57
- return (
58
- <div ref={ref} className={sideMenuClass} id={id}>
61
+ const sideMenuContent = (
62
+ <>
59
63
  {title && collapsible && (
60
64
  <div
61
65
  className="c-side-menu__toggler"
@@ -89,6 +93,29 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
89
93
  {children}
90
94
  </div>
91
95
  </div>
96
+ </>
97
+ );
98
+
99
+ if (glass) {
100
+ const defaultGlassProps = {
101
+ displacementScale: 70,
102
+ blurAmount: 2,
103
+ cornerRadius: 12,
104
+ mode: 'shader' as const,
105
+ };
106
+ const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
107
+ return (
108
+ <AtomixGlass {...glassProps}>
109
+ <div ref={ref} className={sideMenuClass + ' c-side-menu--glass'} id={id} style={style}>
110
+ {sideMenuContent}
111
+ </div>
112
+ </AtomixGlass>
113
+ );
114
+ }
115
+
116
+ return (
117
+ <div ref={ref} className={sideMenuClass} id={id} style={style}>
118
+ {sideMenuContent}
92
119
  </div>
93
120
  );
94
121
  }
@@ -201,13 +201,13 @@ export const Glass = {
201
201
  size: 'md',
202
202
  glass: true,
203
203
  },
204
- render: (args) => {
204
+ render: (args: any) => {
205
205
  const [currentPage, setCurrentPage] = React.useState(args.currentPage);
206
206
  const handlePageChange = (page: number) => {
207
207
  setCurrentPage(page);
208
208
  args.onPageChange?.(page);
209
209
  };
210
-
210
+
211
211
  return (
212
212
  <div
213
213
  style={{
@@ -249,17 +249,18 @@ export const GlassCustom = {
249
249
  cornerRadius: 12,
250
250
  },
251
251
  },
252
- render: (args) => {
252
+ render: (args: any) => {
253
253
  const [currentPage, setCurrentPage] = React.useState(args.currentPage);
254
254
  const handlePageChange = (page: number) => {
255
255
  setCurrentPage(page);
256
256
  args.onPageChange?.(page);
257
257
  };
258
-
258
+
259
259
  return (
260
260
  <div
261
261
  style={{
262
- background: 'url(https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&auto=format&fit=crop&w=1000&q=80)',
262
+ background:
263
+ 'url(https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&auto=format&fit=crop&w=1000&q=80)',
263
264
  backgroundSize: 'cover',
264
265
  backgroundPosition: 'center',
265
266
  padding: '2rem',
@@ -271,7 +272,13 @@ export const GlassCustom = {
271
272
  }}
272
273
  >
273
274
  <div style={{ textAlign: 'center' }}>
274
- <h3 style={{ color: 'white', marginBottom: '2rem', textShadow: '0 2px 4px rgba(0,0,0,0.5)' }}>
275
+ <h3
276
+ style={{
277
+ color: 'white',
278
+ marginBottom: '2rem',
279
+ textShadow: '0 2px 4px rgba(0,0,0,0.5)',
280
+ }}
281
+ >
275
282
  Custom Glass Pagination
276
283
  </h3>
277
284
  <Pagination {...args} currentPage={currentPage} onPageChange={handlePageChange} />
@@ -61,6 +61,7 @@ export const Pagination: React.FC<PaginationProps> = ({
61
61
  showPrevNextButtons = PAGINATION_DEFAULTS.showPrevNextButtons,
62
62
  size = PAGINATION_DEFAULTS.size,
63
63
  className = '',
64
+ style,
64
65
  ariaLabel = 'Pagination',
65
66
  glass,
66
67
  }) => {
@@ -77,7 +78,11 @@ export const Pagination: React.FC<PaginationProps> = ({
77
78
  }
78
79
 
79
80
  const paginationContent = (
80
- <nav className={`c-pagination c-pagination--${size} ${className}`} aria-label={ariaLabel}>
81
+ <nav
82
+ className={`c-pagination c-pagination--${size} ${className}`}
83
+ style={style}
84
+ aria-label={ariaLabel}
85
+ >
81
86
  <ul className="c-pagination__items">
82
87
  {showFirstLastButtons && (
83
88
  <PaginationNavButton
@@ -169,11 +174,7 @@ export const Pagination: React.FC<PaginationProps> = ({
169
174
 
170
175
  const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
171
176
 
172
- return (
173
- <AtomixGlass {...glassProps}>
174
- {paginationContent}
175
- </AtomixGlass>
176
- );
177
+ return <AtomixGlass {...glassProps}>{paginationContent}</AtomixGlass>;
177
178
  }
178
179
 
179
180
  return paginationContent;
@@ -111,7 +111,8 @@ export const PhotoViewer: React.FC<PhotoViewerProps> = ({
111
111
 
112
112
  const link = document.createElement('a');
113
113
  link.href = currentImage.src;
114
- link.download = currentImage.title || `image-${currentIndex + 1}`;
114
+ const sanitizedTitle = (currentImage.title || `image-${currentIndex + 1}`).replace(/[^a-zA-Z0-9.-]/g, '_');
115
+ link.download = sanitizedTitle;
115
116
  document.body.appendChild(link);
116
117
  link.click();
117
118
  document.body.removeChild(link);
@@ -155,12 +155,14 @@ GlassPopover.args = {
155
155
  glass: true,
156
156
  };
157
157
  GlassPopover.decorators = [
158
- (Story) => (
159
- <div style={{
160
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
161
- minHeight: '100vh',
162
- padding: '2rem'
163
- }}>
158
+ Story => (
159
+ <div
160
+ style={{
161
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
162
+ minHeight: '100vh',
163
+ padding: '2rem',
164
+ }}
165
+ >
164
166
  <Story />
165
167
  </div>
166
168
  ),
@@ -182,12 +184,14 @@ GlassPopoverCustom.args = {
182
184
  },
183
185
  };
184
186
  GlassPopoverCustom.decorators = [
185
- (Story) => (
186
- <div style={{
187
- background: 'linear-gradient(45deg, #f093fb 0%, #f5576c 100%)',
188
- minHeight: '100vh',
189
- padding: '2rem'
190
- }}>
187
+ Story => (
188
+ <div
189
+ style={{
190
+ background: 'linear-gradient(45deg, #f093fb 0%, #f5576c 100%)',
191
+ minHeight: '100vh',
192
+ padding: '2rem',
193
+ }}
194
+ >
191
195
  <Story />
192
196
  </div>
193
197
  ),
@@ -204,12 +208,14 @@ GlassPopoverHover.args = {
204
208
  glass: true,
205
209
  };
206
210
  GlassPopoverHover.decorators = [
207
- (Story) => (
208
- <div style={{
209
- background: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)',
210
- minHeight: '100vh',
211
- padding: '2rem'
212
- }}>
211
+ Story => (
212
+ <div
213
+ style={{
214
+ background: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)',
215
+ minHeight: '100vh',
216
+ padding: '2rem',
217
+ }}
218
+ >
213
219
  <Story />
214
220
  </div>
215
221
  ),
@@ -225,12 +231,14 @@ GlassPopoverPositions.args = {
225
231
  defaultOpen: true,
226
232
  };
227
233
  GlassPopoverPositions.decorators = [
228
- (Story) => (
229
- <div style={{
230
- background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
231
- minHeight: '100vh',
232
- padding: '2rem'
233
- }}>
234
+ Story => (
235
+ <div
236
+ style={{
237
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
238
+ minHeight: '100vh',
239
+ padding: '2rem',
240
+ }}
241
+ >
234
242
  <Story />
235
243
  </div>
236
244
  ),
@@ -28,6 +28,7 @@ export const Popover: React.FC<PopoverProps> = ({
28
28
  position = 'top',
29
29
  trigger = 'click',
30
30
  className = '',
31
+ style,
31
32
  delay = 0,
32
33
  offset = 12,
33
34
  defaultOpen = false,
@@ -72,6 +73,7 @@ export const Popover: React.FC<PopoverProps> = ({
72
73
  <div
73
74
  ref={popoverRef}
74
75
  className={`c-popover c-popover--${currentPosition} ${isOpen ? POPOVER.CLASSES.IS_OPEN : ''} ${glass ? 'c-popover--glass' : ''} ${className}`}
76
+ style={style}
75
77
  id={popoverId}
76
78
  role="tooltip"
77
79
  aria-hidden={!isOpen}
@@ -88,7 +90,8 @@ export const Popover: React.FC<PopoverProps> = ({
88
90
  mode: 'shader' as const,
89
91
  };
90
92
 
91
- const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
93
+ const glassProps =
94
+ glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
92
95
 
93
96
  return (
94
97
  <AtomixGlass {...glassProps}>
@@ -43,6 +43,11 @@ export interface ProductReviewProps {
43
43
  * Additional CSS class
44
44
  */
45
45
  className?: string;
46
+
47
+ /**
48
+ * Inline style for the component
49
+ */
50
+ style?: React.CSSProperties;
46
51
  }
47
52
 
48
53
  /**
@@ -57,6 +62,7 @@ export const ProductReview: React.FC<ProductReviewProps> = ({
57
62
  ratingColor = 'warning' as ThemeColor,
58
63
  onSubmit,
59
64
  className = '',
65
+ style,
60
66
  }) => {
61
67
  const [rating, setRating] = useState<number>(initialRating);
62
68
  const [comment, setComment] = useState<string>('');
@@ -90,7 +96,7 @@ export const ProductReview: React.FC<ProductReviewProps> = ({
90
96
 
91
97
  if (submitted) {
92
98
  return (
93
- <div className={containerClasses} ref={reviewRef}>
99
+ <div className={containerClasses} ref={reviewRef} style={style}>
94
100
  <div className="c-product-review__success">
95
101
  <h3>Thank you for your review!</h3>
96
102
  <p>Your feedback helps us improve our products.</p>
@@ -109,7 +115,7 @@ export const ProductReview: React.FC<ProductReviewProps> = ({
109
115
  }
110
116
 
111
117
  return (
112
- <div className={containerClasses} ref={reviewRef}>
118
+ <div className={containerClasses} ref={reviewRef} style={style}>
113
119
  <div className="c-product-review__header">
114
120
  <h3 className="c-product-review__title">Review {productName}</h3>
115
121
  {productImage && (