@shohojdhara/atomix 0.3.0 → 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 (95) hide show
  1. package/dist/atomix.css +309 -105
  2. package/dist/atomix.min.css +3 -5
  3. package/dist/index.d.ts +804 -53
  4. package/dist/index.esm.js +16367 -16413
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/index.js +16275 -16336
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.min.js +1 -1
  9. package/dist/index.min.js.map +1 -1
  10. package/dist/themes/applemix.css +309 -105
  11. package/dist/themes/applemix.min.css +5 -7
  12. package/dist/themes/boomdevs.css +202 -10
  13. package/dist/themes/boomdevs.min.css +3 -5
  14. package/dist/themes/esrar.css +309 -105
  15. package/dist/themes/esrar.min.css +4 -6
  16. package/dist/themes/flashtrade.css +310 -105
  17. package/dist/themes/flashtrade.min.css +5 -7
  18. package/dist/themes/mashroom.css +300 -96
  19. package/dist/themes/mashroom.min.css +4 -6
  20. package/dist/themes/shaj-default.css +300 -96
  21. package/dist/themes/shaj-default.min.css +4 -6
  22. package/package.json +1 -1
  23. package/src/components/AtomixGlass/AtomixGlass.test.tsx +21 -32
  24. package/src/components/AtomixGlass/AtomixGlass.tsx +55 -42
  25. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +205 -57
  26. package/src/components/AtomixGlass/GlassFilter.tsx +22 -8
  27. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +221 -0
  28. package/src/components/AtomixGlass/atomixGLass.old.tsx +0 -3
  29. package/src/components/AtomixGlass/shader-utils.ts +8 -0
  30. package/src/components/AtomixGlass/stories/AtomixGlass.stories.tsx +319 -100
  31. package/src/components/AtomixGlass/stories/Examples.stories.tsx +601 -105
  32. package/src/components/AtomixGlass/stories/Modes.stories.tsx +30 -12
  33. package/src/components/AtomixGlass/stories/Playground.stories.tsx +173 -38
  34. package/src/components/AtomixGlass/stories/ShaderVariants.stories.tsx +18 -18
  35. package/src/components/AtomixGlass/stories/shared-components.tsx +27 -5
  36. package/src/components/Button/Button.tsx +62 -17
  37. package/src/components/Callout/Callout.test.tsx +8 -14
  38. package/src/components/Card/Card.tsx +103 -1
  39. package/src/components/Card/index.ts +3 -2
  40. package/src/components/Icon/index.ts +1 -1
  41. package/src/components/Modal/Modal.stories.tsx +29 -38
  42. package/src/components/Modal/Modal.tsx +4 -4
  43. package/src/components/Navigation/SideMenu/SideMenu.tsx +49 -41
  44. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +63 -24
  45. package/src/components/Popover/Popover.tsx +1 -1
  46. package/src/components/VideoPlayer/VideoPlayer.stories.tsx +977 -400
  47. package/src/components/VideoPlayer/VideoPlayer.tsx +1 -6
  48. package/src/lib/composables/shared-mouse-tracker.ts +133 -0
  49. package/src/lib/composables/useAtomixGlass.ts +303 -115
  50. package/src/lib/theme/ThemeManager.integration.test.ts +124 -0
  51. package/src/lib/theme/ThemeManager.stories.tsx +13 -13
  52. package/src/lib/theme/ThemeManager.test.ts +4 -0
  53. package/src/lib/theme/ThemeManager.ts +203 -59
  54. package/src/lib/theme/ThemeProvider.tsx +183 -33
  55. package/src/lib/theme/composeTheme.ts +375 -0
  56. package/src/lib/theme/createTheme.test.ts +475 -0
  57. package/src/lib/theme/createTheme.ts +510 -0
  58. package/src/lib/theme/generateCSSVariables.ts +713 -0
  59. package/src/lib/theme/index.ts +67 -0
  60. package/src/lib/theme/themeUtils.ts +333 -0
  61. package/src/lib/theme/types.ts +337 -8
  62. package/src/lib/theme/useTheme.test.tsx +2 -1
  63. package/src/lib/theme/useTheme.ts +6 -22
  64. package/src/lib/types/components.ts +148 -59
  65. package/src/styles/01-settings/_index.scss +2 -2
  66. package/src/styles/01-settings/_settings.badge.scss +2 -2
  67. package/src/styles/01-settings/_settings.border-radius.scss +1 -1
  68. package/src/styles/01-settings/{_settings.maps.scss → _settings.design-tokens.scss} +163 -49
  69. package/src/styles/01-settings/_settings.modal.scss +1 -1
  70. package/src/styles/01-settings/_settings.spacing.scss +14 -13
  71. package/src/styles/03-generic/_generic.root.scss +131 -50
  72. package/src/styles/05-objects/_objects.block.scss +1 -1
  73. package/src/styles/06-components/_components.atomix-glass.scss +20 -22
  74. package/src/styles/06-components/_components.badge.scss +2 -2
  75. package/src/styles/06-components/_components.button.scss +1 -1
  76. package/src/styles/06-components/_components.callout.scss +1 -1
  77. package/src/styles/06-components/_components.card.scss +74 -2
  78. package/src/styles/06-components/_components.chart.scss +1 -1
  79. package/src/styles/06-components/_components.dropdown.scss +6 -0
  80. package/src/styles/06-components/_components.footer.scss +1 -1
  81. package/src/styles/06-components/_components.list-group.scss +1 -1
  82. package/src/styles/06-components/_components.list.scss +1 -1
  83. package/src/styles/06-components/_components.menu.scss +1 -1
  84. package/src/styles/06-components/_components.messages.scss +1 -1
  85. package/src/styles/06-components/_components.modal.scss +7 -2
  86. package/src/styles/06-components/_components.navbar.scss +1 -1
  87. package/src/styles/06-components/_components.popover.scss +10 -0
  88. package/src/styles/06-components/_components.product-review.scss +1 -1
  89. package/src/styles/06-components/_components.progress.scss +1 -1
  90. package/src/styles/06-components/_components.rating.scss +1 -1
  91. package/src/styles/06-components/_components.spinner.scss +1 -1
  92. package/src/styles/99-utilities/_utilities.background.scss +1 -1
  93. package/src/styles/99-utilities/_utilities.border.scss +1 -1
  94. package/src/styles/99-utilities/_utilities.link.scss +1 -1
  95. package/src/styles/99-utilities/_utilities.text.scss +1 -1
@@ -27,15 +27,15 @@ export interface GlassSize {
27
27
 
28
28
  /**
29
29
  * OverLight configuration - can be boolean, 'auto', or object with settings
30
- *
30
+ *
31
31
  * @example
32
32
  * // Boolean - explicit control
33
33
  * overLight={true}
34
- *
34
+ *
35
35
  * @example
36
36
  * // Auto-detection - automatically detects background brightness
37
37
  * overLight="auto"
38
- *
38
+ *
39
39
  * @example
40
40
  * // Object config - auto-detection with custom settings
41
41
  * overLight={{
@@ -46,22 +46,19 @@ export interface GlassSize {
46
46
  * saturationBoost: 1.5
47
47
  * }}
48
48
  */
49
- export type OverLightConfig =
50
- | boolean
51
- | 'auto'
52
- | OverLightObjectConfig;
49
+ export type OverLightConfig = boolean | 'auto' | OverLightObjectConfig;
53
50
 
54
51
  /**
55
52
  * OverLight object configuration
56
- *
53
+ *
57
54
  * When using object mode, the component will auto-detect background brightness
58
55
  * and apply the custom settings. All properties are optional and will use
59
56
  * sensible defaults if not provided.
60
- *
57
+ *
61
58
  * @example
62
59
  * // Minimal config - only threshold
63
60
  * overLight={{ threshold: 0.8 }}
64
- *
61
+ *
65
62
  * @example
66
63
  * // Full config with all properties
67
64
  * overLight={{
@@ -75,99 +72,99 @@ export type OverLightConfig =
75
72
  export interface OverLightObjectConfig {
76
73
  /**
77
74
  * Luminance threshold for auto-detection (0.1 - 1.0)
78
- *
75
+ *
79
76
  * Backgrounds with average luminance above this threshold will be
80
77
  * considered "light" and trigger overLight mode.
81
- *
78
+ *
82
79
  * @default 0.7
83
80
  * @minimum 0.1
84
81
  * @maximum 1.0
85
- *
82
+ *
86
83
  * @example
87
84
  * // More sensitive detection (triggers on lighter backgrounds)
88
85
  * threshold: 0.6
89
- *
86
+ *
90
87
  * @example
91
88
  * // Less sensitive detection (only very light backgrounds)
92
89
  * threshold: 0.85
93
90
  */
94
91
  threshold?: number;
95
-
92
+
96
93
  /**
97
94
  * Base opacity for overLight layers (0.1 - 1.0)
98
- *
95
+ *
99
96
  * Controls the opacity of the base and overlay layers when overLight
100
97
  * mode is active. This value is multiplied by hover/active intensity
101
98
  * multipliers for dynamic effects.
102
- *
99
+ *
103
100
  * @default 0.5 (dynamic, depends on hover/active state)
104
101
  * @minimum 0.1
105
102
  * @maximum 1.0
106
- *
103
+ *
107
104
  * @example
108
105
  * // Subtle overlay
109
106
  * opacity: 0.3
110
- *
107
+ *
111
108
  * @example
112
109
  * // Strong overlay
113
110
  * opacity: 0.7
114
111
  */
115
112
  opacity?: number;
116
-
113
+
117
114
  /**
118
115
  * Contrast enhancement multiplier (0.5 - 2.5)
119
- *
116
+ *
120
117
  * Increases the contrast of the glass effect for better visibility
121
118
  * on light backgrounds. Higher values create more dramatic effects.
122
- *
119
+ *
123
120
  * @default 1.4 (dynamic, includes mouse influence)
124
121
  * @minimum 0.5
125
122
  * @maximum 2.5
126
- *
123
+ *
127
124
  * @example
128
125
  * // Subtle contrast boost
129
126
  * contrast: 1.2
130
- *
127
+ *
131
128
  * @example
132
129
  * // High contrast for maximum visibility
133
130
  * contrast: 2.0
134
131
  */
135
132
  contrast?: number;
136
-
133
+
137
134
  /**
138
135
  * Brightness adjustment multiplier (0.5 - 2.0)
139
- *
136
+ *
140
137
  * Adjusts the overall brightness of the glass effect. Values above 1.0
141
138
  * brighten the effect, while values below 1.0 darken it.
142
- *
139
+ *
143
140
  * @default 0.85 (dynamic, includes mouse influence)
144
141
  * @minimum 0.5
145
142
  * @maximum 2.0
146
- *
143
+ *
147
144
  * @example
148
145
  * // Neutral brightness
149
146
  * brightness: 1.0
150
- *
147
+ *
151
148
  * @example
152
149
  * // Brighter effect
153
150
  * brightness: 1.2
154
151
  */
155
152
  brightness?: number;
156
-
153
+
157
154
  /**
158
155
  * Saturation boost multiplier (0.5 - 3.0)
159
- *
156
+ *
160
157
  * Enhances color saturation for more vibrant glass effects on light
161
158
  * backgrounds. This works in conjunction with the base saturation prop.
162
- *
159
+ *
163
160
  * @default 1.3 (dynamic, includes mouse influence)
164
161
  * @minimum 0.5
165
162
  * @maximum 3.0
166
- *
163
+ *
167
164
  * @example
168
165
  * // Moderate saturation boost
169
166
  * saturationBoost: 1.2
170
- *
167
+ *
171
168
  * @example
172
169
  * // High saturation for vivid effects
173
170
  * saturationBoost: 2.0
@@ -231,16 +228,16 @@ export interface AtomixGlassProps {
231
228
 
232
229
  /**
233
230
  * Debug mode for overLight detection and configuration
234
- *
231
+ *
235
232
  * When enabled, logs detailed information about:
236
233
  * - Auto-detection results (luminance values, threshold comparison)
237
234
  * - Final overLight configuration values
238
235
  * - Detection timing and performance
239
- *
236
+ *
240
237
  * Useful for debugging auto-detection issues and fine-tuning thresholds.
241
- *
238
+ *
242
239
  * @default false
243
- *
240
+ *
244
241
  * @example
245
242
  * <AtomixGlass overLight="auto" debugOverLight={true}>
246
243
  * Content
@@ -414,10 +411,22 @@ export interface ButtonProps extends BaseComponentProps {
414
411
  size?: Size;
415
412
 
416
413
  /**
417
- * Optional icon
414
+ * Optional icon (ReactNode)
418
415
  */
419
416
  icon?: ReactNode;
420
417
 
418
+ /**
419
+ * Icon name from Phosphor Icons (simplified icon prop)
420
+ * When provided, automatically creates an Icon component
421
+ * @example iconName="Rocket" iconSize="sm"
422
+ */
423
+ iconName?: string;
424
+
425
+ /**
426
+ * Icon size (used with iconName prop)
427
+ */
428
+ iconSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
429
+
421
430
  /**
422
431
  * Icon position (start or end)
423
432
  */
@@ -514,6 +523,17 @@ export interface ButtonProps extends BaseComponentProps {
514
523
  */
515
524
  tabIndex?: number;
516
525
 
526
+ /**
527
+ * Link URL - when provided, button renders as Next.js Link or anchor element
528
+ * Automatically wraps with Next.js Link if available, otherwise uses anchor
529
+ */
530
+ href?: string;
531
+
532
+ /**
533
+ * Link target attribute (used with href)
534
+ */
535
+ target?: '_blank' | '_self' | '_parent' | '_top';
536
+
517
537
  /**
518
538
  * Custom style for the button
519
539
  */
@@ -1217,21 +1237,6 @@ export interface SideMenuProps extends BaseComponentProps {
1217
1237
  */
1218
1238
  children: ReactNode;
1219
1239
 
1220
- /**
1221
- * Menu items
1222
- */
1223
- menuItems?: {
1224
- title?: ReactNode;
1225
- toggleIcon?: ReactNode;
1226
- items?: {
1227
- title?: ReactNode;
1228
- icon?: ReactNode;
1229
- href?: string;
1230
- onClick?: (event: React.MouseEvent) => void;
1231
- active?: boolean;
1232
- disabled?: boolean;
1233
- }[];
1234
- }[];
1235
1240
  /**
1236
1241
  * Whether the menu is open (for controlled component)
1237
1242
  */
@@ -1275,10 +1280,60 @@ export interface SideMenuProps extends BaseComponentProps {
1275
1280
  glass?: boolean | Omit<AtomixGlassProps, 'children'>;
1276
1281
 
1277
1282
  /**
1278
- * Optional custom link component (e.g., Next.js Link)
1283
+ * Optional custom link component (e.g., Next.js Link, React Router Link)
1279
1284
  * Will be passed to all SideMenuItem components
1285
+ *
1286
+ * @example
1287
+ * ```tsx
1288
+ * // Next.js
1289
+ * import Link from 'next/link';
1290
+ * <SideMenu LinkComponent={Link} />
1291
+ *
1292
+ * // React Router
1293
+ * import { Link } from 'react-router-dom';
1294
+ * <SideMenu LinkComponent={Link} />
1295
+ * ```
1296
+ */
1297
+ LinkComponent?: React.ComponentType<{
1298
+ href?: string;
1299
+ to?: string;
1300
+ children: React.ReactNode;
1301
+ className?: string;
1302
+ onClick?: (event: React.MouseEvent) => void;
1303
+ target?: string;
1304
+ rel?: string;
1305
+ 'aria-disabled'?: boolean;
1306
+ 'aria-current'?: string;
1307
+ tabIndex?: number;
1308
+ ref?: React.Ref<HTMLAnchorElement>;
1309
+ }>;
1310
+
1311
+ /**
1312
+ * Menu items
1280
1313
  */
1281
- LinkComponent?: React.ElementType;
1314
+ menuItems?: Array<{
1315
+ title?: ReactNode;
1316
+ toggleIcon?: ReactNode;
1317
+ items?: Array<{
1318
+ title?: ReactNode;
1319
+ icon?: ReactNode | undefined;
1320
+ href?: string | undefined;
1321
+ onClick?: (event: React.MouseEvent) => void | undefined;
1322
+ active?: boolean | undefined;
1323
+ disabled?: boolean | undefined;
1324
+ as?:
1325
+ | React.ComponentType<{
1326
+ href?: string;
1327
+ to?: string;
1328
+ children: React.ReactNode;
1329
+ className?: string;
1330
+ onClick?: (event: React.MouseEvent) => void;
1331
+ target?: string;
1332
+ rel?: string;
1333
+ }>
1334
+ | undefined;
1335
+ }>;
1336
+ }>;
1282
1337
  }
1283
1338
 
1284
1339
  /**
@@ -1331,9 +1386,33 @@ export interface SideMenuItemProps extends BaseComponentProps {
1331
1386
  rel?: string;
1332
1387
 
1333
1388
  /**
1334
- * Optional custom link component
1335
- */
1336
- LinkComponent?: React.ElementType;
1389
+ * Optional custom link component (e.g., Next.js Link, React Router Link)
1390
+ * If not provided, will use LinkComponent from parent SideMenu context
1391
+ *
1392
+ * @example
1393
+ * ```tsx
1394
+ * // Next.js
1395
+ * import Link from 'next/link';
1396
+ * <SideMenuItem href="/about" LinkComponent={Link}>About</SideMenuItem>
1397
+ *
1398
+ * // React Router
1399
+ * import { Link } from 'react-router-dom';
1400
+ * <SideMenuItem href="/about" LinkComponent={Link}>About</SideMenuItem>
1401
+ * ```
1402
+ */
1403
+ LinkComponent?: React.ComponentType<{
1404
+ href?: string;
1405
+ to?: string;
1406
+ children: React.ReactNode;
1407
+ className?: string;
1408
+ onClick?: (event: React.MouseEvent) => void;
1409
+ target?: string;
1410
+ rel?: string;
1411
+ 'aria-disabled'?: boolean;
1412
+ 'aria-current'?: string;
1413
+ tabIndex?: number;
1414
+ ref?: React.Ref<HTMLAnchorElement>;
1415
+ }>;
1337
1416
  }
1338
1417
 
1339
1418
  /**
@@ -3362,6 +3441,16 @@ export interface CardProps extends BaseComponentProps {
3362
3441
  */
3363
3442
  elevation?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
3364
3443
 
3444
+ /**
3445
+ * Enable hover effects (adds hover elevation and transition)
3446
+ */
3447
+ hoverable?: boolean;
3448
+
3449
+ /**
3450
+ * Elevation level on hover (only applies when hoverable is true)
3451
+ */
3452
+ hoverElevation?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
3453
+
3365
3454
  /**
3366
3455
  * Row layout (horizontal card)
3367
3456
  */
@@ -36,7 +36,7 @@
36
36
  @forward './settings.link';
37
37
  @forward './settings.list-group';
38
38
  @forward './settings.list';
39
- @forward './settings.maps';
39
+ @forward './settings.design-tokens';
40
40
  @forward './settings.menu';
41
41
  @forward './settings.messages';
42
42
  @forward './settings.modal';
@@ -64,4 +64,4 @@
64
64
  @forward './settings.typography';
65
65
  @forward './settings.upload';
66
66
  @forward './settings.video-player';
67
- @forward './settings.z-layers';
67
+ @forward './settings.z-layers';
@@ -6,8 +6,8 @@
6
6
  $badge-font-size: fonts.$font-size-xs !default;
7
7
  $badge-font-weight: fonts.$font-weight-normal !default;
8
8
 
9
- $badge-padding-x: map.get($spacing-sizes, 2.5) !default; //10px
10
- $badge-padding-y: map.get($spacing-sizes, 1.5) !default; //6px
9
+ $badge-padding-x: map.get($spacing-sizes, 'px-10') !default; //10px
10
+ $badge-padding-y: map.get($spacing-sizes, 'px-6') !default; //6px
11
11
  $badge-padding-y-sm: map.get($spacing-sizes, 1) !default; //4px
12
12
  $badge-padding-y-lg: map.get($spacing-sizes, 2) !default; //8px
13
13
 
@@ -4,7 +4,7 @@
4
4
  $border-radius: map.get($spacing-sizes, 2) !default; //8px
5
5
  $border-radius-sm: map.get($spacing-sizes, 1) !default; //4px
6
6
  $border-radius-md: map.get($spacing-sizes, 1) !default; //4px
7
- $border-radius-lg: map.get($spacing-sizes, 2.5) !default; //10px
7
+ $border-radius-lg: map.get($spacing-sizes, 'px-10') !default; //10px
8
8
  $border-radius-xl: map.get($spacing-sizes, 3) !default; //12px
9
9
  $border-radius-xxl: map.get($spacing-sizes, 4) !default; //16px
10
10
  $border-radius-3xl: map.get($spacing-sizes, 6) !default; //24px