@shohojdhara/atomix 0.2.3 → 0.2.4
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.
- package/dist/atomix.css +430 -125
- package/dist/atomix.min.css +4 -4
- package/dist/index.d.ts +188 -42
- package/dist/index.esm.js +2049 -1516
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +3571 -3055
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/themes/boomdevs.css +379 -74
- package/dist/themes/boomdevs.min.css +4 -4
- package/dist/themes/esrar.css +430 -125
- package/dist/themes/esrar.min.css +4 -4
- package/dist/themes/mashroom.css +429 -124
- package/dist/themes/mashroom.min.css +4 -4
- package/dist/themes/shaj-default.css +429 -124
- package/dist/themes/shaj-default.min.css +4 -4
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.stories.tsx +684 -21
- package/src/components/Accordion/Accordion.tsx +5 -7
- package/src/components/AtomixGlass/AtomixGlass.stories.tsx +456 -2237
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +2 -2
- package/src/components/AtomixGlass/AtomixGlass.tsx +728 -666
- package/src/components/AtomixGlass/shader-utils.ts +589 -33
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +5800 -0
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +1065 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +1066 -0
- package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +397 -0
- package/src/components/AtomixGlass/stories/shared-components.tsx +310 -0
- package/src/components/Badge/Badge.stories.tsx +3 -2
- package/src/components/Badge/Badge.tsx +9 -7
- package/src/components/Button/Button.stories.tsx +501 -20
- package/src/components/Button/Button.tsx +4 -5
- package/src/components/Callout/Callout.tsx +27 -9
- package/src/components/Card/Card.stories.tsx +560 -1
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/DatePicker/DatePicker.stories.tsx +697 -9
- package/src/components/EdgePanel/EdgePanel.stories.tsx +476 -3
- package/src/components/EdgePanel/EdgePanel.tsx +86 -13
- package/src/components/Messages/Messages.stories.tsx +113 -0
- package/src/components/Messages/Messages.tsx +51 -9
- package/src/components/Modal/Modal.stories.tsx +6 -4
- package/src/components/Modal/Modal.tsx +2 -3
- package/src/components/Navigation/Nav/Nav.stories.tsx +469 -0
- package/src/components/Navigation/Nav/Nav.tsx +17 -4
- package/src/components/Navigation/Navbar/Navbar.stories.tsx +413 -0
- package/src/components/Navigation/Navbar/Navbar.tsx +66 -28
- package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +340 -0
- package/src/components/Navigation/SideMenu/SideMenu.tsx +28 -2
- package/src/components/Progress/Progress.tsx +17 -2
- package/src/components/Spinner/Spinner.tsx +17 -2
- package/src/lib/composables/useBarChart.ts +14 -4
- package/src/lib/composables/useChart.ts +223 -370
- package/src/lib/composables/useChartToolbar.ts +11 -20
- package/src/lib/composables/useEdgePanel.ts +81 -35
- package/src/lib/composables/useLineChart.ts +4 -2
- package/src/lib/composables/usePieChart.ts +4 -14
- package/src/lib/constants/components.ts +1 -0
- package/src/lib/types/components.ts +97 -15
- package/src/styles/01-settings/_settings.background.scss +2 -2
- package/src/styles/01-settings/_settings.edge-panel.scss +1 -1
- package/src/styles/02-tools/_tools.utility-api.scss +62 -27
- package/src/styles/06-components/_components.atomix-glass.scss +72 -0
- package/src/styles/06-components/_components.badge.scss +2 -15
- package/src/styles/06-components/_components.callout.scss +10 -5
- package/src/styles/06-components/_components.edge-panel.scss +101 -0
- package/src/styles/06-components/_components.messages.scss +176 -0
- package/src/styles/06-components/_components.modal.scss +13 -3
- package/src/styles/06-components/_components.navbar.scss +12 -1
- package/src/styles/06-components/_components.side-menu.scss +5 -0
- package/src/styles/99-utilities/_index.scss +1 -0
- package/src/styles/99-utilities/_utilities.glass-fixes.scss +1 -0
- package/src/styles/99-utilities/_utilities.opacity.scss +1 -1
- package/src/components/AtomixGlass/AtomixGlassComprehensivePreview.stories.tsx +0 -1369
|
@@ -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.
|
|
@@ -31,6 +33,7 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
|
|
|
31
33
|
disabled = false,
|
|
32
34
|
toggleIcon,
|
|
33
35
|
id,
|
|
36
|
+
glass,
|
|
34
37
|
},
|
|
35
38
|
ref
|
|
36
39
|
) => {
|
|
@@ -54,8 +57,8 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
|
|
|
54
57
|
// Default toggle icon using Atomix Icon component
|
|
55
58
|
const defaultToggleIcon = <Icon name="CaretRight" size="xs" />;
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
const sideMenuContent = (
|
|
61
|
+
<>
|
|
59
62
|
{title && collapsible && (
|
|
60
63
|
<div
|
|
61
64
|
className="c-side-menu__toggler"
|
|
@@ -89,6 +92,29 @@ export const SideMenu = forwardRef<HTMLDivElement, SideMenuProps>(
|
|
|
89
92
|
{children}
|
|
90
93
|
</div>
|
|
91
94
|
</div>
|
|
95
|
+
</>
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
if (glass) {
|
|
99
|
+
const defaultGlassProps = {
|
|
100
|
+
displacementScale: 70,
|
|
101
|
+
blurAmount: 2,
|
|
102
|
+
cornerRadius: 12,
|
|
103
|
+
mode: 'shader' as const,
|
|
104
|
+
};
|
|
105
|
+
const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
|
|
106
|
+
return (
|
|
107
|
+
<AtomixGlass {...glassProps}>
|
|
108
|
+
<div ref={ref} className={sideMenuClass + ' c-side-menu--glass'} id={id}>
|
|
109
|
+
{sideMenuContent}
|
|
110
|
+
</div>
|
|
111
|
+
</AtomixGlass>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<div ref={ref} className={sideMenuClass} id={id}>
|
|
117
|
+
{sideMenuContent}
|
|
92
118
|
</div>
|
|
93
119
|
);
|
|
94
120
|
}
|
|
@@ -2,6 +2,7 @@ import React, { forwardRef } from 'react';
|
|
|
2
2
|
import { ProgressProps } from '../../lib/types/components';
|
|
3
3
|
import { useProgress } from '../../lib/composables/useProgress';
|
|
4
4
|
import { PROGRESS } from '../../lib/constants/components';
|
|
5
|
+
import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
|
|
5
6
|
|
|
6
7
|
export const Progress = forwardRef<HTMLDivElement, ProgressProps>(
|
|
7
8
|
(
|
|
@@ -12,6 +13,7 @@ export const Progress = forwardRef<HTMLDivElement, ProgressProps>(
|
|
|
12
13
|
className = '',
|
|
13
14
|
disabled = false,
|
|
14
15
|
ariaLabel = PROGRESS.DEFAULTS.ARIA_LABEL,
|
|
16
|
+
glass,
|
|
15
17
|
},
|
|
16
18
|
ref
|
|
17
19
|
) => {
|
|
@@ -22,10 +24,10 @@ export const Progress = forwardRef<HTMLDivElement, ProgressProps>(
|
|
|
22
24
|
className,
|
|
23
25
|
});
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
const progressContent = (
|
|
26
28
|
<div
|
|
27
29
|
ref={ref}
|
|
28
|
-
className={progressClasses}
|
|
30
|
+
className={progressClasses + (glass ? ' c-progress--glass' : '')}
|
|
29
31
|
style={progressStyle}
|
|
30
32
|
role="progressbar"
|
|
31
33
|
aria-valuemin={0}
|
|
@@ -37,6 +39,19 @@ export const Progress = forwardRef<HTMLDivElement, ProgressProps>(
|
|
|
37
39
|
<div className={PROGRESS.CLASSES.BAR}></div>
|
|
38
40
|
</div>
|
|
39
41
|
);
|
|
42
|
+
|
|
43
|
+
if (glass) {
|
|
44
|
+
const defaultGlassProps = {
|
|
45
|
+
displacementScale: 30,
|
|
46
|
+
blurAmount: 0.5,
|
|
47
|
+
cornerRadius: 8,
|
|
48
|
+
mode: 'shader' as const,
|
|
49
|
+
};
|
|
50
|
+
const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
|
|
51
|
+
return <AtomixGlass {...glassProps}>{progressContent}</AtomixGlass>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return progressContent;
|
|
40
55
|
}
|
|
41
56
|
);
|
|
42
57
|
|
|
@@ -2,12 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { SpinnerProps } from '../../lib/types/components';
|
|
3
3
|
import { useSpinner } from '../../lib/composables/useSpinner';
|
|
4
4
|
import { SPINNER } from '../../lib/constants/components';
|
|
5
|
+
import { AtomixGlass } from '../AtomixGlass/AtomixGlass';
|
|
5
6
|
|
|
6
7
|
export const Spinner: React.FC<SpinnerProps> = ({
|
|
7
8
|
size = 'md',
|
|
8
9
|
variant = 'primary',
|
|
9
10
|
fullscreen = false,
|
|
10
11
|
className = '',
|
|
12
|
+
glass,
|
|
11
13
|
}) => {
|
|
12
14
|
const { generateSpinnerClass } = useSpinner({
|
|
13
15
|
size,
|
|
@@ -19,14 +21,27 @@ export const Spinner: React.FC<SpinnerProps> = ({
|
|
|
19
21
|
size,
|
|
20
22
|
variant,
|
|
21
23
|
fullscreen,
|
|
22
|
-
className,
|
|
24
|
+
className: `${className} ${glass ? 'c-spinner--glass' : ''}`.trim(),
|
|
23
25
|
});
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
const spinnerContent = (
|
|
26
28
|
<div className={spinnerClass} role="status">
|
|
27
29
|
<span className={SPINNER.VISUALLY_HIDDEN}>Loading...</span>
|
|
28
30
|
</div>
|
|
29
31
|
);
|
|
32
|
+
|
|
33
|
+
if (glass) {
|
|
34
|
+
const defaultGlassProps = {
|
|
35
|
+
displacementScale: 20,
|
|
36
|
+
blurAmount: 1,
|
|
37
|
+
cornerRadius: 999,
|
|
38
|
+
mode: 'shader' as const,
|
|
39
|
+
};
|
|
40
|
+
const glassProps = glass === true ? defaultGlassProps : { ...defaultGlassProps, ...glass };
|
|
41
|
+
return <AtomixGlass {...glassProps}>{spinnerContent}</AtomixGlass>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return spinnerContent;
|
|
30
45
|
};
|
|
31
46
|
|
|
32
47
|
export type { SpinnerProps };
|
|
@@ -101,8 +101,10 @@ export function useBarChart(datasets: ChartDataset[], options: BarChartOptions =
|
|
|
101
101
|
const [hoveredBar, setHoveredBar] = useState<{
|
|
102
102
|
datasetIndex: number;
|
|
103
103
|
pointIndex: number;
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
chartX: number;
|
|
105
|
+
chartY: number;
|
|
106
|
+
clientX: number;
|
|
107
|
+
clientY: number;
|
|
106
108
|
} | null>(null);
|
|
107
109
|
|
|
108
110
|
const [animationProgress, setAnimationProgress] = useState(0);
|
|
@@ -119,6 +121,7 @@ export function useBarChart(datasets: ChartDataset[], options: BarChartOptions =
|
|
|
119
121
|
): BarDimensions[] => {
|
|
120
122
|
if (!datasets.length) return [];
|
|
121
123
|
|
|
124
|
+
// Use provided dimensions and padding (from ChartRenderer scales)
|
|
122
125
|
const innerWidth = width - padding.left - padding.right;
|
|
123
126
|
const innerHeight = height - padding.top - padding.bottom;
|
|
124
127
|
const numCategories = datasets[0]?.data?.length || 0;
|
|
@@ -270,8 +273,15 @@ export function useBarChart(datasets: ChartDataset[], options: BarChartOptions =
|
|
|
270
273
|
|
|
271
274
|
// Bar hover handlers
|
|
272
275
|
const handleBarHover = useCallback(
|
|
273
|
-
(datasetIndex: number, pointIndex: number,
|
|
274
|
-
setHoveredBar({
|
|
276
|
+
(datasetIndex: number, pointIndex: number, chartX: number, chartY: number, clientX: number, clientY: number) => {
|
|
277
|
+
setHoveredBar({
|
|
278
|
+
datasetIndex,
|
|
279
|
+
pointIndex,
|
|
280
|
+
chartX,
|
|
281
|
+
chartY,
|
|
282
|
+
clientX,
|
|
283
|
+
clientY
|
|
284
|
+
});
|
|
275
285
|
},
|
|
276
286
|
[]
|
|
277
287
|
);
|