@shohojdhara/atomix 0.2.9 → 0.3.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 (102) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/atomix.css +309 -105
  3. package/dist/atomix.min.css +3 -5
  4. package/dist/index.d.ts +807 -51
  5. package/dist/index.esm.js +16367 -16405
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +16277 -16330
  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 +309 -105
  12. package/dist/themes/applemix.min.css +5 -7
  13. package/dist/themes/boomdevs.css +202 -10
  14. package/dist/themes/boomdevs.min.css +3 -5
  15. package/dist/themes/esrar.css +309 -105
  16. package/dist/themes/esrar.min.css +4 -6
  17. package/dist/themes/flashtrade.css +310 -105
  18. package/dist/themes/flashtrade.min.css +5 -7
  19. package/dist/themes/mashroom.css +300 -96
  20. package/dist/themes/mashroom.min.css +4 -6
  21. package/dist/themes/shaj-default.css +300 -96
  22. package/dist/themes/shaj-default.min.css +4 -6
  23. package/package.json +1 -1
  24. package/src/components/AtomixGlass/AtomixGlass.test.tsx +21 -32
  25. package/src/components/AtomixGlass/AtomixGlass.tsx +55 -42
  26. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +205 -57
  27. package/src/components/AtomixGlass/GlassFilter.tsx +22 -8
  28. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +221 -0
  29. package/src/components/AtomixGlass/atomixGLass.old.tsx +0 -3
  30. package/src/components/AtomixGlass/shader-utils.ts +8 -0
  31. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +319 -100
  32. package/src/components/AtomixGlass/stories/Examples.stories.tsx +601 -105
  33. package/src/components/AtomixGlass/stories/Modes.stories.tsx +30 -12
  34. package/src/components/AtomixGlass/stories/Playground.stories.tsx +173 -38
  35. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +18 -18
  36. package/src/components/AtomixGlass/stories/shared-components.tsx +27 -5
  37. package/src/components/Breadcrumb/Breadcrumb.tsx +8 -3
  38. package/src/components/Button/Button.tsx +62 -17
  39. package/src/components/Callout/Callout.test.tsx +8 -14
  40. package/src/components/Card/Card.tsx +103 -1
  41. package/src/components/Card/index.ts +3 -2
  42. package/src/components/Footer/Footer.stories.tsx +1 -2
  43. package/src/components/Footer/Footer.tsx +0 -5
  44. package/src/components/Footer/FooterLink.tsx +3 -2
  45. package/src/components/Footer/FooterSection.tsx +0 -7
  46. package/src/components/Icon/index.ts +1 -1
  47. package/src/components/Modal/Modal.stories.tsx +29 -38
  48. package/src/components/Modal/Modal.tsx +4 -4
  49. package/src/components/Navigation/Nav/NavItem.tsx +8 -3
  50. package/src/components/Navigation/SideMenu/SideMenu.tsx +49 -41
  51. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +63 -19
  52. package/src/components/Popover/Popover.tsx +1 -1
  53. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +977 -400
  54. package/src/components/VideoPlayer/VideoPlayer.tsx +1 -6
  55. package/src/lib/composables/shared-mouse-tracker.ts +133 -0
  56. package/src/lib/composables/useAtomixGlass.ts +303 -115
  57. package/src/lib/theme/ThemeManager.integration.test.ts +124 -0
  58. package/src/lib/theme/ThemeManager.stories.tsx +13 -13
  59. package/src/lib/theme/ThemeManager.test.ts +4 -0
  60. package/src/lib/theme/ThemeManager.ts +203 -59
  61. package/src/lib/theme/ThemeProvider.tsx +183 -33
  62. package/src/lib/theme/composeTheme.ts +375 -0
  63. package/src/lib/theme/createTheme.test.ts +475 -0
  64. package/src/lib/theme/createTheme.ts +510 -0
  65. package/src/lib/theme/generateCSSVariables.ts +713 -0
  66. package/src/lib/theme/index.ts +67 -0
  67. package/src/lib/theme/themeUtils.ts +333 -0
  68. package/src/lib/theme/types.ts +337 -8
  69. package/src/lib/theme/useTheme.test.tsx +2 -1
  70. package/src/lib/theme/useTheme.ts +6 -22
  71. package/src/lib/types/components.ts +152 -57
  72. package/src/styles/01-settings/_index.scss +2 -2
  73. package/src/styles/01-settings/_settings.badge.scss +2 -2
  74. package/src/styles/01-settings/_settings.border-radius.scss +1 -1
  75. package/src/styles/01-settings/{_settings.maps.scss → _settings.design-tokens.scss} +163 -49
  76. package/src/styles/01-settings/_settings.modal.scss +1 -1
  77. package/src/styles/01-settings/_settings.spacing.scss +14 -13
  78. package/src/styles/03-generic/_generic.root.scss +131 -50
  79. package/src/styles/05-objects/_objects.block.scss +1 -1
  80. package/src/styles/06-components/_components.atomix-glass.scss +20 -22
  81. package/src/styles/06-components/_components.badge.scss +2 -2
  82. package/src/styles/06-components/_components.button.scss +1 -1
  83. package/src/styles/06-components/_components.callout.scss +1 -1
  84. package/src/styles/06-components/_components.card.scss +74 -2
  85. package/src/styles/06-components/_components.chart.scss +1 -1
  86. package/src/styles/06-components/_components.dropdown.scss +6 -0
  87. package/src/styles/06-components/_components.footer.scss +1 -1
  88. package/src/styles/06-components/_components.list-group.scss +1 -1
  89. package/src/styles/06-components/_components.list.scss +1 -1
  90. package/src/styles/06-components/_components.menu.scss +1 -1
  91. package/src/styles/06-components/_components.messages.scss +1 -1
  92. package/src/styles/06-components/_components.modal.scss +7 -2
  93. package/src/styles/06-components/_components.navbar.scss +1 -1
  94. package/src/styles/06-components/_components.popover.scss +10 -0
  95. package/src/styles/06-components/_components.product-review.scss +1 -1
  96. package/src/styles/06-components/_components.progress.scss +1 -1
  97. package/src/styles/06-components/_components.rating.scss +1 -1
  98. package/src/styles/06-components/_components.spinner.scss +1 -1
  99. package/src/styles/99-utilities/_utilities.background.scss +1 -1
  100. package/src/styles/99-utilities/_utilities.border.scss +1 -1
  101. package/src/styles/99-utilities/_utilities.link.scss +1 -1
  102. package/src/styles/99-utilities/_utilities.text.scss +1 -1
@@ -150,20 +150,38 @@ export const ModeGallery: Story = {
150
150
  displacementScale={80}
151
151
  blurAmount={1}
152
152
  saturation={130}
153
- cornerRadius={20}
153
+ cornerRadius={24}
154
154
  elasticity={0.12}
155
- className="u-mb-4 d-inline-block"
155
+ style={{ marginBottom: '24px', display: 'inline-block' }}
156
156
  >
157
- Four Rendering Modes
157
+ <div
158
+ style={{
159
+ padding: '12px 24px',
160
+ display: 'inline-flex',
161
+ alignItems: 'center',
162
+ gap: '8px',
163
+ fontSize: '13px',
164
+ fontWeight: 700,
165
+ letterSpacing: '1px',
166
+ textTransform: 'uppercase',
167
+ color: 'rgba(255, 255, 255, 0.9)',
168
+ }}
169
+ >
170
+ <span>🎨</span>
171
+ <span>Four Rendering Modes</span>
172
+ </div>
158
173
  </AtomixGlass>
159
174
  <h1
160
175
  style={{
161
- margin: '0 0 16px 0',
162
- fontSize: '48px',
176
+ margin: '0 0 20px 0',
177
+ fontSize: '56px',
163
178
  fontWeight: 700,
164
- color: '#fff',
165
- letterSpacing: '-1px',
166
- textShadow: '0 4px 12px rgba(0,0,0,0.3)',
179
+ background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.7) 100%)',
180
+ WebkitBackgroundClip: 'text',
181
+ WebkitTextFillColor: 'transparent',
182
+ backgroundClip: 'text',
183
+ letterSpacing: '-1.5px',
184
+ textShadow: '0 4px 12px rgba(0,0,0,0.1)',
167
185
  }}
168
186
  >
169
187
  AtomixGlass Modes
@@ -171,15 +189,15 @@ export const ModeGallery: Story = {
171
189
  <p
172
190
  style={{
173
191
  fontSize: '18px',
174
- color: 'rgba(255, 255, 255, 0.85)',
175
- maxWidth: '680px',
192
+ color: 'rgba(255, 255, 255, 0.9)',
193
+ maxWidth: '720px',
176
194
  margin: '0 auto',
177
- lineHeight: 1.6,
195
+ lineHeight: 1.7,
178
196
  textShadow: '0 2px 4px rgba(0,0,0,0.2)',
179
197
  }}
180
198
  >
181
199
  Choose from four distinct rendering modes, each optimized for different visual styles
182
- and performance requirements.
200
+ and performance requirements. Click any card to explore the mode in detail.
183
201
  </p>
184
202
  </div>
185
203
 
@@ -520,12 +520,50 @@ export const Playground: Story = {
520
520
  }}
521
521
  >
522
522
  <div className="u-mb-8">
523
- <h2 className="u-mb-2 u-text-white u-fw-bold" style={{ fontSize: '2rem' }}>
524
- Advanced Playground
525
- </h2>
526
- <p className="u-text-white u-opacity-70 u-fs-sm">
527
- Fine-tune every parameter with live preview
528
- </p>
523
+ <div
524
+ style={{
525
+ display: 'flex',
526
+ alignItems: 'center',
527
+ gap: '12px',
528
+ marginBottom: '16px',
529
+ }}
530
+ >
531
+ <div
532
+ style={{
533
+ width: '48px',
534
+ height: '48px',
535
+ borderRadius: '14px',
536
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
537
+ display: 'flex',
538
+ alignItems: 'center',
539
+ justifyContent: 'center',
540
+ fontSize: '24px',
541
+ boxShadow: '0 8px 24px rgba(102, 126, 234, 0.4)',
542
+ }}
543
+ >
544
+ 🎮
545
+ </div>
546
+ <div>
547
+ <h2
548
+ className="u-m-0 u-text-white u-fw-bold"
549
+ style={{
550
+ fontSize: '1.75rem',
551
+ background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
552
+ WebkitBackgroundClip: 'text',
553
+ WebkitTextFillColor: 'transparent',
554
+ backgroundClip: 'text',
555
+ }}
556
+ >
557
+ Advanced Playground
558
+ </h2>
559
+ <p
560
+ className="u-m-0 u-text-white u-opacity-80"
561
+ style={{ fontSize: '13px', marginTop: '4px' }}
562
+ >
563
+ Fine-tune every parameter with live preview
564
+ </p>
565
+ </div>
566
+ </div>
529
567
  </div>
530
568
 
531
569
  {/* Performance Indicator */}
@@ -574,8 +612,11 @@ export const Playground: Story = {
574
612
 
575
613
  {/* Quick Presets */}
576
614
  <div className="u-mb-6">
577
- <label className="u-d-block u-mb-3 u-text-white u-fw-semibold">
578
- Quick Presets
615
+ <label
616
+ className="u-d-block u-mb-3 u-text-white u-fw-semibold"
617
+ style={{ fontSize: '14px', letterSpacing: '0.5px' }}
618
+ >
619
+ ⚡ Quick Presets
579
620
  </label>
580
621
  <div
581
622
  style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}
@@ -585,28 +626,48 @@ export const Playground: Story = {
585
626
  key={key}
586
627
  onClick={() => applyPreset(key as keyof typeof presets)}
587
628
  style={{
588
- padding: '12px',
589
- background: 'rgba(255,255,255,0.1)',
590
- border: '1px solid rgba(255,255,255,0.2)',
591
- borderRadius: '12px',
629
+ padding: '16px 12px',
630
+ background: 'rgba(255,255,255,0.08)',
631
+ border: '2px solid rgba(255,255,255,0.15)',
632
+ borderRadius: '16px',
592
633
  color: 'white',
593
634
  cursor: 'pointer',
594
- transition: 'all 0.2s',
635
+ transition: 'all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)',
595
636
  textAlign: 'center',
637
+ position: 'relative',
638
+ overflow: 'hidden',
596
639
  }}
597
640
  onMouseEnter={e => {
598
641
  e.currentTarget.style.background = 'rgba(255,255,255,0.15)';
599
642
  e.currentTarget.style.borderColor = 'rgba(255,255,255,0.3)';
643
+ e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';
644
+ e.currentTarget.style.boxShadow = '0 8px 24px rgba(0,0,0,0.2)';
600
645
  }}
601
646
  onMouseLeave={e => {
602
- e.currentTarget.style.background = 'rgba(255,255,255,0.1)';
603
- e.currentTarget.style.borderColor = 'rgba(255,255,255,0.2)';
647
+ e.currentTarget.style.background = 'rgba(255,255,255,0.08)';
648
+ e.currentTarget.style.borderColor = 'rgba(255,255,255,0.15)';
649
+ e.currentTarget.style.transform = 'translateY(0) scale(1)';
650
+ e.currentTarget.style.boxShadow = 'none';
604
651
  }}
605
652
  >
606
- <div style={{ fontSize: '1.5rem', marginBottom: '4px' }}>
653
+ <div
654
+ style={{
655
+ fontSize: '2rem',
656
+ marginBottom: '8px',
657
+ filter: 'drop-shadow(0 4px 8px rgba(0,0,0,0.2))',
658
+ }}
659
+ >
607
660
  {preset.icon}
608
661
  </div>
609
- <div style={{ fontSize: '0.875rem', fontWeight: 600 }}>{preset.name}</div>
662
+ <div
663
+ style={{
664
+ fontSize: '0.875rem',
665
+ fontWeight: 700,
666
+ letterSpacing: '0.3px',
667
+ }}
668
+ >
669
+ {preset.name}
670
+ </div>
610
671
  </button>
611
672
  ))}
612
673
  </div>
@@ -838,25 +899,62 @@ export const Playground: Story = {
838
899
  cornerRadius={16}
839
900
  saturation={120}
840
901
  >
841
- <div style={{ padding: '2rem' }}>
842
- <div className="u-d-flex u-justify-content-between u-align-items-center u-mb-4">
843
- <h3 className="u-text-white u-fw-semibold" style={{ fontSize: '1.5rem' }}>
844
- Generated Code
845
- </h3>
846
- <Button variant="primary" size="sm" onClick={copyCode}>
847
- {copiedCode ? '✓ Copied' : 'Copy'}
902
+ <div style={{ padding: '2.5rem' }}>
903
+ <div
904
+ className="u-d-flex u-justify-content-between u-align-items-center u-mb-4"
905
+ style={{ marginBottom: '24px' }}
906
+ >
907
+ <div>
908
+ <h3
909
+ className="u-m-0 u-fw-bold"
910
+ style={{
911
+ fontSize: '1.75rem',
912
+ background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
913
+ WebkitBackgroundClip: 'text',
914
+ WebkitTextFillColor: 'transparent',
915
+ backgroundClip: 'text',
916
+ marginBottom: '8px',
917
+ }}
918
+ >
919
+ 💻 Generated Code
920
+ </h3>
921
+ <p
922
+ className="u-m-0"
923
+ style={{
924
+ fontSize: '13px',
925
+ color: 'rgba(255, 255, 255, 0.7)',
926
+ }}
927
+ >
928
+ Copy this code to use in your project
929
+ </p>
930
+ </div>
931
+ <Button
932
+ variant="primary"
933
+ size="md"
934
+ onClick={copyCode}
935
+ style={{
936
+ minWidth: '120px',
937
+ boxShadow: copiedCode
938
+ ? '0 4px 16px rgba(122, 255, 215, 0.4)'
939
+ : 'none',
940
+ }}
941
+ >
942
+ {copiedCode ? '✓ Copied!' : '📋 Copy Code'}
848
943
  </Button>
849
944
  </div>
850
945
  <pre
851
946
  style={{
852
- background: 'rgba(0,0,0,0.5)',
853
- padding: '1.5rem',
854
- borderRadius: '8px',
947
+ background: 'rgba(0,0,0,0.6)',
948
+ padding: '1.75rem',
949
+ borderRadius: '12px',
855
950
  overflow: 'auto',
856
951
  maxHeight: '500px',
857
952
  color: '#7AFFD7',
858
953
  fontSize: '0.875rem',
859
- lineHeight: 1.6,
954
+ lineHeight: 1.7,
955
+ border: '1px solid rgba(122, 255, 215, 0.2)',
956
+ fontFamily: 'Monaco, "Courier New", monospace',
957
+ boxShadow: 'inset 0 2px 8px rgba(0,0,0,0.3)',
860
958
  }}
861
959
  >
862
960
  <code>{generateCode()}</code>
@@ -882,28 +980,65 @@ export const Playground: Story = {
882
980
  enableBorderEffect={settings.enableBorderEffect}
883
981
  style={{ width: '100%' }}
884
982
  >
885
- <div style={{ padding: '2rem', textAlign: 'center' }}>
983
+ <div style={{ padding: '2.5rem', textAlign: 'center' }}>
886
984
  <div
887
985
  style={{
888
986
  display: 'inline-flex',
889
987
  alignItems: 'center',
890
- padding: '8px 20px',
891
- borderRadius: '24px',
892
- background: 'rgba(122, 255, 215, 0.2)',
988
+ gap: '8px',
989
+ padding: '10px 24px',
990
+ borderRadius: '28px',
991
+ background: 'linear-gradient(135deg, rgba(122, 255, 215, 0.25) 0%, rgba(102, 126, 234, 0.25) 100%)',
992
+ border: '1px solid rgba(122, 255, 215, 0.3)',
893
993
  color: '#7AFFD7',
894
994
  fontSize: '0.875rem',
895
- fontWeight: 600,
896
- marginBottom: '1.5rem',
995
+ fontWeight: 700,
996
+ letterSpacing: '0.5px',
997
+ marginBottom: '2rem',
998
+ boxShadow: '0 4px 16px rgba(122, 255, 215, 0.2)',
897
999
  }}
898
1000
  >
899
- LIVE PREVIEW
1001
+ <span style={{ fontSize: '18px' }}>✨</span>
1002
+ <span>LIVE PREVIEW</span>
900
1003
  </div>
901
- <h2 className="u-mb-4 u-text-white u-fw-bold" style={{ fontSize: '2.5rem' }}>
1004
+ <div
1005
+ style={{
1006
+ width: '96px',
1007
+ height: '96px',
1008
+ margin: '0 auto 24px',
1009
+ borderRadius: '24px',
1010
+ background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
1011
+ display: 'flex',
1012
+ alignItems: 'center',
1013
+ justifyContent: 'center',
1014
+ fontSize: '48px',
1015
+ boxShadow: '0 12px 32px rgba(102, 126, 234, 0.4)',
1016
+ }}
1017
+ >
1018
+
1019
+ </div>
1020
+ <h2
1021
+ className="u-mb-4 u-fw-bold"
1022
+ style={{
1023
+ fontSize: '2.75rem',
1024
+ background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
1025
+ WebkitBackgroundClip: 'text',
1026
+ WebkitTextFillColor: 'transparent',
1027
+ backgroundClip: 'text',
1028
+ letterSpacing: '-1px',
1029
+ }}
1030
+ >
902
1031
  AtomixGlass
903
1032
  </h2>
904
1033
  <p
905
- className="u-mb-6 u-opacity-90"
906
- style={{ fontSize: '1.125rem', lineHeight: 1.6 }}
1034
+ className="u-mb-6"
1035
+ style={{
1036
+ fontSize: '1.125rem',
1037
+ lineHeight: 1.7,
1038
+ color: 'rgba(255, 255, 255, 0.9)',
1039
+ maxWidth: '600px',
1040
+ margin: '0 auto 2rem',
1041
+ }}
907
1042
  >
908
1043
  Adjust the controls on the left to see real-time changes. Each parameter
909
1044
  affects the visual appearance and performance characteristics of the glass
@@ -71,7 +71,7 @@ export const LiquidGlass: Story = {
71
71
  <h2
72
72
  style={{
73
73
  margin: '0 0 16px 0',
74
- fontSize: '36px',
74
+ fontSize: '38px',
75
75
  fontWeight: 700,
76
76
  background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
77
77
  WebkitBackgroundClip: 'text',
@@ -84,14 +84,14 @@ export const LiquidGlass: Story = {
84
84
  </h2>
85
85
  <p
86
86
  style={{
87
- margin: '0 0 28px 0',
88
- fontSize: '17px',
89
- lineHeight: 1.7,
90
- color: 'rgba(255, 255, 255, 0.85)',
87
+ margin: '0 0 32px 0',
88
+ fontSize: '18px',
89
+ lineHeight: 1.8,
90
+ color: 'rgba(255, 255, 255, 0.9)',
91
91
  }}
92
92
  >
93
93
  Experience fluid, time-based animations with multi-layered organic distortion and
94
- chromatic aberration effects that create living glass.
94
+ chromatic aberration effects that create living, breathing glass.
95
95
  </p>
96
96
  <div
97
97
  style={{
@@ -192,7 +192,7 @@ export const AppleFluid: Story = {
192
192
  <h2
193
193
  style={{
194
194
  margin: '0 0 16px 0',
195
- fontSize: '36px',
195
+ fontSize: '38px',
196
196
  fontWeight: 700,
197
197
  background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
198
198
  WebkitBackgroundClip: 'text',
@@ -205,14 +205,14 @@ export const AppleFluid: Story = {
205
205
  </h2>
206
206
  <p
207
207
  style={{
208
- margin: '0 0 28px 0',
209
- fontSize: '17px',
210
- lineHeight: 1.7,
211
- color: 'rgba(255, 255, 255, 0.85)',
208
+ margin: '0 0 32px 0',
209
+ fontSize: '18px',
210
+ lineHeight: 1.8,
211
+ color: 'rgba(255, 255, 255, 0.9)',
212
212
  }}
213
213
  >
214
214
  Apple-inspired fluid dynamics with vortex effects and high-quality 5-octave noise. Mouse
215
- interactions create mesmerizing flow patterns.
215
+ interactions create mesmerizing, organic flow patterns.
216
216
  </p>
217
217
  <div
218
218
  style={{
@@ -313,7 +313,7 @@ export const PremiumGlass: Story = {
313
313
  <h2
314
314
  style={{
315
315
  margin: '0 0 16px 0',
316
- fontSize: '36px',
316
+ fontSize: '38px',
317
317
  fontWeight: 700,
318
318
  background: 'linear-gradient(135deg, #fff 0%, rgba(255,255,255,0.8) 100%)',
319
319
  WebkitBackgroundClip: 'text',
@@ -326,14 +326,14 @@ export const PremiumGlass: Story = {
326
326
  </h2>
327
327
  <p
328
328
  style={{
329
- margin: '0 0 28px 0',
330
- fontSize: '17px',
331
- lineHeight: 1.7,
332
- color: 'rgba(255, 255, 255, 0.85)',
329
+ margin: '0 0 32px 0',
330
+ fontSize: '18px',
331
+ lineHeight: 1.8,
332
+ color: 'rgba(255, 255, 255, 0.9)',
333
333
  }}
334
334
  >
335
335
  Advanced refraction with multi-layer depth effects and edge-aware rendering. The optimal
336
- balance of quality and performance.
336
+ balance of quality and performance for production applications.
337
337
  </p>
338
338
  <div
339
339
  style={{
@@ -175,9 +175,7 @@ export const BackgroundWrapper = ({
175
175
  height: height,
176
176
  width: width,
177
177
  backgroundColor: !bgImage ? '#1a1a2e' : undefined, // Fallback color if no image
178
- background: bgImage
179
- ? `url(${bgImage}) ${finalOverlayOpacity && ',' + finalOverlayColor}`
180
- : undefined,
178
+ background: bgImage ? `url(${bgImage})` : undefined,
181
179
  backgroundSize: 'cover',
182
180
  backgroundPosition: 'center',
183
181
  backgroundAttachment: 'fixed',
@@ -189,8 +187,32 @@ export const BackgroundWrapper = ({
189
187
  ...style,
190
188
  }}
191
189
  >
192
-
193
- {children}
190
+ {/* Overlay */}
191
+ {(finalOverlayOpacity > 0 || overlay) && (
192
+ <div
193
+ style={{
194
+ position: 'absolute',
195
+ inset: 0,
196
+ backgroundColor: finalOverlayColor,
197
+ opacity: finalOverlayOpacity,
198
+ borderRadius: borderRadius,
199
+ pointerEvents: 'none',
200
+ }}
201
+ />
202
+ )}
203
+ <div
204
+ style={{
205
+ position: 'relative',
206
+ width: '100%',
207
+ height: '100%',
208
+ display: 'flex',
209
+ alignItems: 'center',
210
+ justifyContent: 'center',
211
+ color: 'white',
212
+ }}
213
+ >
214
+ {children}
215
+ </div>
194
216
  </div>
195
217
  );
196
218
  };
@@ -109,9 +109,14 @@ export const Breadcrumb: React.FC<BreadcrumbProps> = ({
109
109
  <li key={index} className={itemClasses} style={item.style}>
110
110
  {item.href && !item.active ? (
111
111
  LinkComponent ? (
112
- <LinkComponent {...(linkProps as React.ComponentProps<React.ElementType>)}>
113
- {linkContent}
114
- </LinkComponent>
112
+ (() => {
113
+ const Component = LinkComponent as React.ComponentType<any>;
114
+ return (
115
+ <Component {...(linkProps as React.ComponentProps<React.ElementType>)}>
116
+ {linkContent}
117
+ </Component>
118
+ );
119
+ })()
115
120
  ) : (
116
121
  <a {...(linkProps as React.ComponentProps<'a'>)}>{linkContent}</a>
117
122
  )