@shohojdhara/atomix 0.5.0 → 0.5.2
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/atomix.config.ts +12 -0
- package/build-tools/webpack-loader.js +5 -4
- package/dist/atomix.css +230 -83
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +1 -1
- package/dist/atomix.min.css.map +1 -1
- package/dist/build-tools/webpack-loader.js +5 -4
- package/dist/charts.d.ts +24 -23
- package/dist/charts.js +271 -369
- package/dist/charts.js.map +1 -1
- package/dist/config.d.ts +624 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/core.d.ts +3 -2
- package/dist/core.js +342 -382
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +4 -6
- package/dist/forms.js +233 -334
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +11 -2
- package/dist/heavy.js +406 -445
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +109 -65
- package/dist/index.esm.js +654 -748
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +621 -717
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/layout.js +59 -60
- package/dist/layout.js.map +1 -1
- package/dist/theme.js +4 -4
- package/dist/theme.js.map +1 -1
- package/package.json +24 -9
- package/scripts/atomix-cli.js +15 -1
- package/scripts/cli/__tests__/complexity-utils.test.js +24 -0
- package/scripts/cli/__tests__/detector.test.js +50 -0
- package/scripts/cli/__tests__/template-engine.test.js +23 -0
- package/scripts/cli/__tests__/test-setup.js +1 -133
- package/scripts/cli/commands/doctor.js +15 -3
- package/scripts/cli/commands/generate.js +113 -51
- package/scripts/cli/internal/ai-engine.js +30 -10
- package/scripts/cli/internal/complexity-utils.js +60 -0
- package/scripts/cli/internal/component-validator.js +49 -16
- package/scripts/cli/internal/generator.js +89 -36
- package/scripts/cli/internal/hook-generator.js +5 -2
- package/scripts/cli/internal/itcss-generator.js +16 -12
- package/scripts/cli/templates/next-templates.js +81 -30
- package/scripts/cli/templates/storybook-templates.js +12 -2
- package/scripts/cli/utils/detector.js +45 -7
- package/scripts/cli/utils/diagnostics.js +78 -0
- package/scripts/cli/utils/telemetry.js +13 -0
- package/src/components/Accordion/Accordion.stories.tsx +4 -0
- package/src/components/AtomixGlass/AtomixGlass.tsx +188 -128
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +63 -91
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +153 -201
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +9 -6
- package/src/components/AtomixGlass/glass-utils.ts +51 -1
- package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +52 -46
- package/src/components/AtomixGlass/stories/Examples.stories.tsx +573 -236
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +88 -41
- package/src/components/AtomixGlass/stories/argTypes.ts +19 -19
- package/src/components/AtomixGlass/stories/shared-components.tsx +7 -12
- package/src/components/AtomixGlass/stories/types.ts +3 -3
- package/src/components/Button/Button.tsx +114 -57
- package/src/components/Callout/Callout.tsx +4 -4
- package/src/components/Chart/ChartRenderer.tsx +1 -1
- package/src/components/Chart/DonutChart.tsx +11 -8
- package/src/components/EdgePanel/EdgePanel.tsx +119 -115
- package/src/components/Form/Select.tsx +4 -4
- package/src/components/List/List.tsx +4 -4
- package/src/components/Navigation/SideMenu/SideMenu.tsx +6 -6
- package/src/components/PhotoViewer/PhotoViewerImage.tsx +1 -1
- package/src/components/ProductReview/ProductReview.tsx +4 -2
- package/src/components/Rating/Rating.tsx +4 -2
- package/src/components/SectionIntro/SectionIntro.tsx +4 -2
- package/src/components/Steps/Steps.tsx +1 -1
- package/src/components/Tabs/Tabs.tsx +5 -5
- package/src/components/Testimonial/Testimonial.tsx +4 -2
- package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
- package/src/layouts/CssGrid/CssGrid.stories.tsx +464 -0
- package/src/layouts/CssGrid/CssGrid.tsx +215 -0
- package/src/layouts/CssGrid/index.ts +8 -0
- package/src/layouts/CssGrid/scripts/CssGrid.js +284 -0
- package/src/layouts/CssGrid/scripts/index.js +43 -0
- package/src/layouts/Grid/scripts/Container.js +139 -0
- package/src/layouts/Grid/scripts/Grid.js +184 -0
- package/src/layouts/Grid/scripts/GridCol.js +273 -0
- package/src/layouts/Grid/scripts/Row.js +154 -0
- package/src/layouts/Grid/scripts/index.js +48 -0
- package/src/layouts/MasonryGrid/MasonryGrid.tsx +71 -59
- package/src/lib/composables/atomix-glass/useGlassSize.ts +1 -1
- package/src/lib/composables/useAccordion.ts +5 -5
- package/src/lib/composables/useAtomixGlass.ts +111 -74
- package/src/lib/composables/useAtomixGlassStyles.ts +0 -2
- package/src/lib/composables/useBarChart.ts +2 -2
- package/src/lib/composables/useChart.ts +3 -2
- package/src/lib/composables/useChartToolbar.ts +48 -66
- package/src/lib/composables/useDataTable.ts +1 -1
- package/src/lib/composables/useDatePicker.ts +2 -2
- package/src/lib/composables/useEdgePanel.ts +45 -54
- package/src/lib/composables/useHeroBackgroundSlider.ts +5 -5
- package/src/lib/composables/usePhotoViewer.ts +2 -3
- package/src/lib/composables/usePieChart.ts +1 -1
- package/src/lib/composables/usePopover.ts +151 -139
- package/src/lib/composables/useSideMenu.ts +28 -41
- package/src/lib/composables/useSlider.ts +2 -6
- package/src/lib/composables/useTooltip.ts +2 -2
- package/src/lib/config/index.ts +39 -0
- package/src/lib/constants/components.ts +1 -0
- package/src/lib/theme/devtools/Comparator.tsx +1 -1
- package/src/lib/theme/devtools/Inspector.tsx +1 -1
- package/src/lib/theme/devtools/LiveEditor.tsx +1 -1
- package/src/lib/theme/runtime/ThemeProvider.tsx +1 -1
- package/src/lib/types/components.ts +1 -0
- package/src/styles/01-settings/_index.scss +1 -0
- package/src/styles/01-settings/_settings.atomix-glass.scss +174 -0
- package/src/styles/01-settings/_settings.masonry-grid.scss +42 -6
- package/src/styles/02-tools/_tools.glass.scss +6 -0
- package/src/styles/05-objects/_objects.masonry-grid.scss +162 -24
- package/src/styles/06-components/_components.atomix-glass.scss +160 -99
- package/scripts/cli/__tests__/README.md +0 -81
- package/scripts/cli/__tests__/basic.test.js +0 -116
- package/scripts/cli/__tests__/clean.test.js +0 -278
- package/scripts/cli/__tests__/component-generator.test.js +0 -332
- package/scripts/cli/__tests__/component-validator.test.js +0 -433
- package/scripts/cli/__tests__/generator.test.js +0 -613
- package/scripts/cli/__tests__/glass-motion.test.js +0 -256
- package/scripts/cli/__tests__/integration.test.js +0 -938
- package/scripts/cli/__tests__/migrate.test.js +0 -74
- package/scripts/cli/__tests__/security.test.js +0 -206
- package/scripts/cli/__tests__/theme-bridge.test.js +0 -507
- package/scripts/cli/__tests__/token-manager.test.js +0 -251
- package/scripts/cli/__tests__/token-provider.test.js +0 -361
- package/scripts/cli/__tests__/utils.test.js +0 -165
- package/src/components/AtomixGlass/stories/AnimationTests.stories.tsx +0 -95
- package/src/components/AtomixGlass/stories/CardExamples.stories.tsx +0 -212
- package/src/components/AtomixGlass/stories/Customization.stories.tsx +0 -131
- package/src/components/AtomixGlass/stories/DashboardExamples.stories.tsx +0 -348
- package/src/components/AtomixGlass/stories/EcommerceExamples.stories.tsx +0 -410
- package/src/components/AtomixGlass/stories/FormExamples.stories.tsx +0 -436
- package/src/components/AtomixGlass/stories/HeroExamples.stories.tsx +0 -264
- package/src/components/AtomixGlass/stories/InteractivePlayground.stories.tsx +0 -247
- package/src/components/AtomixGlass/stories/MobileUIExamples.stories.tsx +0 -418
- package/src/components/AtomixGlass/stories/ModalExamples.stories.tsx +0 -402
- package/src/components/AtomixGlass/stories/Modes.stories.tsx +0 -1082
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +0 -497
- package/src/components/AtomixGlass/stories/Performance.stories.tsx +0 -103
- package/src/components/AtomixGlass/stories/PresetGallery.stories.tsx +0 -335
- package/src/components/AtomixGlass/stories/Shaders.stories.tsx +0 -395
- package/src/components/AtomixGlass/stories/WidgetExamples.stories.tsx +0 -441
- package/src/components/TypedButton/TypedButton.stories.tsx +0 -59
- package/src/components/TypedButton/TypedButton.tsx +0 -39
- package/src/components/TypedButton/index.ts +0 -2
- package/src/lib/composables/useBreadcrumb.ts +0 -81
- package/src/lib/composables/useChartInteractions.ts +0 -123
- package/src/lib/composables/useChartPerformance.ts +0 -347
- package/src/lib/composables/useDropdown.ts +0 -338
- package/src/lib/composables/useModal.ts +0 -110
- package/src/lib/composables/useTypedButton.ts +0 -66
- package/src/lib/hooks/usePerformanceMonitor.ts +0 -148
- package/src/lib/utils/displacement-generator.ts +0 -92
- package/src/lib/utils/memoryMonitor.ts +0 -191
- package/src/styles/01-settings/_settings.testtypecheck.scss +0 -53
- package/src/styles/01-settings/_settings.typedbutton.scss +0 -53
- package/src/styles/06-components/_components.testbutton.scss +0 -212
- package/src/styles/06-components/_components.testtypecheck.scss +0 -212
- package/src/styles/06-components/_components.typedbutton.scss +0 -212
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// AtomixGlass Settings
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Default values for glass component styling
|
|
4
|
+
// These can be overridden at any level via CSS custom properties
|
|
5
|
+
|
|
6
|
+
@use 'sass:map';
|
|
7
|
+
@use 'settings.spacing' as *;
|
|
8
|
+
@use 'settings.config' as config;
|
|
9
|
+
@use 'settings.border-radius' as *;
|
|
10
|
+
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Border Radius
|
|
13
|
+
// ============================================================================
|
|
14
|
+
$glass-radius: var(#{config.$prefix}radius-md, 0.75rem) !default;
|
|
15
|
+
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Position
|
|
18
|
+
// ============================================================================
|
|
19
|
+
$glass-position: absolute !default;
|
|
20
|
+
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Border Width
|
|
23
|
+
// ============================================================================
|
|
24
|
+
$glass-border-width: var(#{config.$prefix}spacing-0-5, 0.125rem) !default;
|
|
25
|
+
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Z-Index Layers
|
|
28
|
+
// ============================================================================
|
|
29
|
+
$glass-base-z-index: 0 !default;
|
|
30
|
+
$glass-z-index-background: 0 !default;
|
|
31
|
+
$glass-z-index-overlay: 1 !default;
|
|
32
|
+
$glass-z-index-content: 2 !default;
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Opacity Values
|
|
36
|
+
// ============================================================================
|
|
37
|
+
$glass-hover-1-opacity: 0 !default;
|
|
38
|
+
$glass-hover-2-opacity: 0 !default;
|
|
39
|
+
$glass-hover-3-opacity: 0 !default;
|
|
40
|
+
$glass-base-opacity: 0.6 !default;
|
|
41
|
+
$glass-overlay-opacity: 0.35 !default;
|
|
42
|
+
$glass-overlay-highlight-opacity: 0.25 !default;
|
|
43
|
+
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Border Opacity
|
|
46
|
+
// ============================================================================
|
|
47
|
+
$glass-border-1-opacity: 0.18 !default;
|
|
48
|
+
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Over-Light Mode Opacity
|
|
51
|
+
// ============================================================================
|
|
52
|
+
$glass-over-light-dark-opacity: 0.5 !default;
|
|
53
|
+
$glass-over-light-black-opacity: 0.25 !default;
|
|
54
|
+
|
|
55
|
+
// ============================================================================
|
|
56
|
+
// Gradient Colors - Hover 1 (White mode)
|
|
57
|
+
// ============================================================================
|
|
58
|
+
$glass-hover-1-start-color: rgba(255, 255, 255, 0.18) !default;
|
|
59
|
+
$glass-hover-1-end-color: rgba(255, 255, 255, 0) !default;
|
|
60
|
+
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Gradient Colors - Hover 1 (Dark/Over-light mode)
|
|
63
|
+
// ============================================================================
|
|
64
|
+
$glass-hover-1-black-start: 0.12 !default;
|
|
65
|
+
$glass-hover-1-black-mid: 0.06 !default;
|
|
66
|
+
$glass-hover-1-black-stop: 60% !default;
|
|
67
|
+
$glass-hover-1-black-end: 100% !default;
|
|
68
|
+
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Gradient Colors - Hover 2 (White mode)
|
|
71
|
+
// ============================================================================
|
|
72
|
+
$glass-hover-2-start-color: rgba(0, 0, 0, 0.12) !default;
|
|
73
|
+
$glass-hover-2-end-color: rgba(0, 0, 0, 0) !default;
|
|
74
|
+
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Gradient Colors - Hover 2 (Dark/Over-light mode)
|
|
77
|
+
// ============================================================================
|
|
78
|
+
$glass-hover-2-black-start: 0.08 !default;
|
|
79
|
+
$glass-hover-2-black-mid: 0.04 !default;
|
|
80
|
+
$glass-hover-2-black-stop: 60% !default;
|
|
81
|
+
$glass-hover-2-black-end: 100% !default;
|
|
82
|
+
|
|
83
|
+
// ============================================================================
|
|
84
|
+
// Gradient Colors - Hover 3 (White mode)
|
|
85
|
+
// ============================================================================
|
|
86
|
+
$glass-hover-3-start-color: rgba(255, 255, 255, 0.06) !default;
|
|
87
|
+
$glass-hover-3-end-color: rgba(255, 255, 255, 0) !default;
|
|
88
|
+
|
|
89
|
+
// ============================================================================
|
|
90
|
+
// Gradient Colors - Hover 3 (Dark/Over-light mode)
|
|
91
|
+
// ============================================================================
|
|
92
|
+
$glass-hover-3-black-start: 0.06 !default;
|
|
93
|
+
$glass-hover-3-black-mid: 0.03 !default;
|
|
94
|
+
$glass-hover-3-black-stop: 60% !default;
|
|
95
|
+
$glass-hover-3-black-end: 100% !default;
|
|
96
|
+
|
|
97
|
+
// ============================================================================
|
|
98
|
+
// Base Layer (White mode)
|
|
99
|
+
// ============================================================================
|
|
100
|
+
$glass-base-start-color: rgba(255, 255, 255, 0.08) !default;
|
|
101
|
+
$glass-base-end-color: rgba(255, 255, 255, 0.02) !default;
|
|
102
|
+
$glass-base-white-opacity: 0.08 !default;
|
|
103
|
+
|
|
104
|
+
// ============================================================================
|
|
105
|
+
// Base Layer (Dark/Over-light mode)
|
|
106
|
+
// ============================================================================
|
|
107
|
+
$glass-base-black-start: 0.08 !default;
|
|
108
|
+
$glass-base-black-mid: 0.06 !default;
|
|
109
|
+
$glass-base-black-end: 0.02 !default;
|
|
110
|
+
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Overlay Layer (White mode)
|
|
113
|
+
// ============================================================================
|
|
114
|
+
$glass-overlay-start-color: rgba(255, 255, 255, 0.12) !default;
|
|
115
|
+
$glass-overlay-end-color: rgba(255, 255, 255, 0) !default;
|
|
116
|
+
$glass-overlay-white-opacity: 0.12 !default;
|
|
117
|
+
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Overlay Layer (Dark/Over-light mode)
|
|
120
|
+
// ============================================================================
|
|
121
|
+
$glass-overlay-black-start: 0.1 !default;
|
|
122
|
+
$glass-overlay-black-mid: 0.05 !default;
|
|
123
|
+
$glass-overlay-black-stop: 40% !default;
|
|
124
|
+
$glass-overlay-black-end: 0 !default;
|
|
125
|
+
|
|
126
|
+
// ============================================================================
|
|
127
|
+
// Overlay Highlight
|
|
128
|
+
// ============================================================================
|
|
129
|
+
$glass-highlight-start-color: rgba(255, 255, 255, 0.24) !default;
|
|
130
|
+
$glass-highlight-end-color: rgba(255, 255, 255, 0) !default;
|
|
131
|
+
$glass-highlight-opacity-multiplier: 1.1 !default;
|
|
132
|
+
|
|
133
|
+
// ============================================================================
|
|
134
|
+
// Border Shadow
|
|
135
|
+
// ============================================================================
|
|
136
|
+
$glass-border-color: rgba(255, 255, 255, 0.45) !default;
|
|
137
|
+
$glass-inner-shadow-color: rgba(255, 255, 255, 0.18) !default;
|
|
138
|
+
$glass-outer-shadow-color: rgba(0, 0, 0, 0.28) !default;
|
|
139
|
+
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// Backdrop Filter
|
|
142
|
+
// ============================================================================
|
|
143
|
+
$glass-backdrop-filter: blur(30px) saturate(140%) brightness(110%) !default;
|
|
144
|
+
|
|
145
|
+
// ============================================================================
|
|
146
|
+
// Transition
|
|
147
|
+
// ============================================================================
|
|
148
|
+
$glass-transition: var(#{config.$prefix}transition-base) !default;
|
|
149
|
+
$glass-transition-duration: 0.3s !default;
|
|
150
|
+
$glass-easing: cubic-bezier(0.23, 1, 0.32, 1) !default;
|
|
151
|
+
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// Blend Modes
|
|
154
|
+
// ============================================================================
|
|
155
|
+
$glass-hover-blend-mode: overlay !default;
|
|
156
|
+
$glass-base-blend-mode: soft-light !default;
|
|
157
|
+
$glass-overlay-blend-mode: overlay !default;
|
|
158
|
+
$glass-overlay-highlight-blend-mode: screen !default;
|
|
159
|
+
$glass-border-backdrop-blend-mode: overlay !default;
|
|
160
|
+
$glass-border-1-blend-mode: screen !default;
|
|
161
|
+
$glass-border-2-blend-mode: overlay !default;
|
|
162
|
+
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// Background Layer Colors
|
|
165
|
+
// ============================================================================
|
|
166
|
+
$glass-background-dark-color: var(#{config.$prefix}gray-9, #1f2937) !default;
|
|
167
|
+
$glass-background-black-color: var(#{config.$prefix}black, #000000) !default;
|
|
168
|
+
|
|
169
|
+
// ============================================================================
|
|
170
|
+
// Border Backdrop
|
|
171
|
+
// ============================================================================
|
|
172
|
+
$glass-border-backdrop-blur: 30px !default;
|
|
173
|
+
$glass-border-backdrop-saturate: 140% !default;
|
|
174
|
+
$glass-border-backdrop-brightness: 110% !default;
|
|
@@ -1,17 +1,53 @@
|
|
|
1
1
|
@use 'settings.config' as config;
|
|
2
2
|
@use 'settings.breakpoints' as breakpoints;
|
|
3
|
+
@use 'settings.design-tokens' as tokens;
|
|
4
|
+
@use 'settings.colors' as colors;
|
|
3
5
|
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
// === MASONRY GRID DESIGN TOKENS ===
|
|
7
|
+
// Integrated with Atomix design system using CSS custom properties
|
|
8
|
+
|
|
9
|
+
// Core spacing and layout tokens
|
|
10
|
+
$masonry-grid-gap: var(--#{config.$prefix}spacing-16) !default;
|
|
11
|
+
$masonry-grid-gap-sm: var(--#{config.$prefix}spacing-8) !default;
|
|
12
|
+
$masonry-grid-gap-lg: var(--#{config.$prefix}spacing-24) !default;
|
|
13
|
+
$masonry-grid-gap-xl: var(--#{config.$prefix}spacing-32) !default;
|
|
14
|
+
|
|
15
|
+
// Responsive column configuration using design system breakpoints
|
|
8
16
|
$masonry-grid-columns-xs: 1 !default;
|
|
9
17
|
$masonry-grid-columns-sm: 2 !default;
|
|
10
18
|
$masonry-grid-columns-md: 3 !default;
|
|
11
19
|
$masonry-grid-columns-lg: 4 !default;
|
|
12
20
|
$masonry-grid-columns-xl: 4 !default;
|
|
13
21
|
$masonry-grid-columns-xxl: 5 !default;
|
|
14
|
-
$masonry-grid-item-transition: all 0.3s ease-in-out !default;
|
|
15
22
|
|
|
16
|
-
//
|
|
23
|
+
// Animation and transition tokens
|
|
24
|
+
$masonry-grid-item-transition:
|
|
25
|
+
opacity var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base),
|
|
26
|
+
top var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base),
|
|
27
|
+
left var(--#{config.$prefix}transition-duration-base) var(--#{config.$prefix}transition-timing-base) !default;
|
|
28
|
+
|
|
29
|
+
$masonry-grid-item-animation-duration: var(--#{config.$prefix}transition-duration-base) !default;
|
|
30
|
+
$masonry-grid-item-animation-timing: var(--#{config.$prefix}transition-timing-base) !default;
|
|
31
|
+
|
|
32
|
+
// Loading state tokens
|
|
33
|
+
$masonry-grid-loading-indicator-size: var(--#{config.$prefix}spacing-24) !default;
|
|
34
|
+
$masonry-grid-loading-indicator-border-width: var(--#{config.$prefix}border-width-2) !default;
|
|
35
|
+
$masonry-grid-loading-indicator-color: var(--#{config.$prefix}brand-border-subtle) !default;
|
|
36
|
+
|
|
37
|
+
// Dark mode specific tokens (will automatically switch with design system)
|
|
17
38
|
$masonry-grid-item-bg-dark: var(--#{config.$prefix}gray-9) !default;
|
|
39
|
+
$masonry-grid-loading-overlay-dark: var(--#{config.$prefix}gray-20) !default;
|
|
40
|
+
|
|
41
|
+
// Accessibility and focus management
|
|
42
|
+
$masonry-grid-focus-ring-width: var(--#{config.$prefix}focus-ring-width) !default;
|
|
43
|
+
$masonry-grid-focus-ring-color: var(--#{config.$prefix}focus-ring-color) !default;
|
|
44
|
+
$masonry-grid-focus-ring-offset: var(--#{config.$prefix}focus-ring-offset) !default;
|
|
45
|
+
|
|
46
|
+
// Mobile-first responsive design tokens
|
|
47
|
+
$masonry-grid-min-height-mobile: var(--#{config.$prefix}spacing-200) !default;
|
|
48
|
+
$masonry-grid-min-height-desktop: var(--#{config.$prefix}spacing-100) !default;
|
|
49
|
+
|
|
50
|
+
// Z-index layering
|
|
51
|
+
$masonry-grid-z-index-base: var(--#{config.$prefix}z-index-1) !default;
|
|
52
|
+
$masonry-grid-z-index-loading: var(--#{config.$prefix}z-index-10) !default;
|
|
53
|
+
$masonry-grid-z-index-focus: var(--#{config.$prefix}z-index-5) !default;
|
|
@@ -1,41 +1,116 @@
|
|
|
1
1
|
@use '../01-settings/settings.config' as config;
|
|
2
2
|
@use '../01-settings/settings.masonry-grid' as masonry;
|
|
3
3
|
@use '../01-settings/settings.breakpoints' as breakpoints;
|
|
4
|
+
@use '../01-settings/settings.design-tokens' as tokens;
|
|
4
5
|
@use '../02-tools/tools.rem' as *;
|
|
6
|
+
@use '../02-tools/tools.media-queries' as mq;
|
|
5
7
|
@use 'sass:math';
|
|
6
8
|
|
|
9
|
+
// === MODERN CSS GRID FALLBACK IMPLEMENTATION ===
|
|
10
|
+
// Provides graceful degradation when JavaScript is disabled
|
|
11
|
+
.o-masonry-grid--css-fallback {
|
|
12
|
+
display: grid;
|
|
13
|
+
gap: masonry.$masonry-grid-gap;
|
|
14
|
+
// Use auto-fit with minmax for responsive columns
|
|
15
|
+
grid-template-columns: repeat(auto-fit, minmax(var(--atomix-masonry-min-column-width, 250px), 1fr));
|
|
16
|
+
|
|
17
|
+
// Mobile-first responsive adjustments
|
|
18
|
+
@include mq.media-up('sm') {
|
|
19
|
+
gap: masonry.$masonry-grid-gap-sm;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@include mq.media-up('md') {
|
|
23
|
+
gap: masonry.$masonry-grid-gap;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@include mq.media-up('lg') {
|
|
27
|
+
gap: masonry.$masonry-grid-gap-lg;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.o-masonry-grid__item {
|
|
31
|
+
// CSS Grid items don't need position: absolute
|
|
32
|
+
position: static;
|
|
33
|
+
opacity: 1;
|
|
34
|
+
visibility: visible;
|
|
35
|
+
width: 100%;
|
|
36
|
+
|
|
37
|
+
// Enhanced accessibility for CSS Grid
|
|
38
|
+
&:focus {
|
|
39
|
+
outline: masonry.$masonry-grid-focus-ring-width solid masonry.$masonry-grid-focus-ring-color;
|
|
40
|
+
outline-offset: masonry.$masonry-grid-focus-ring-offset;
|
|
41
|
+
z-index: masonry.$masonry-grid-z-index-focus;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
7
46
|
.o-masonry-grid {
|
|
8
47
|
$root: &;
|
|
9
48
|
|
|
10
|
-
//
|
|
49
|
+
// Mobile-first base styles with design system tokens
|
|
11
50
|
position: relative;
|
|
12
51
|
width: 100%;
|
|
13
|
-
min-height:
|
|
52
|
+
min-height: masonry.$masonry-grid-min-height-mobile;
|
|
14
53
|
|
|
15
|
-
//
|
|
54
|
+
// Enhanced focus management for accessibility
|
|
55
|
+
&:focus-within {
|
|
56
|
+
.o-masonry-grid__item:focus {
|
|
57
|
+
outline: masonry.$masonry-grid-focus-ring-width solid masonry.$masonry-grid-focus-ring-color;
|
|
58
|
+
outline-offset: masonry.$masonry-grid-focus-ring-offset;
|
|
59
|
+
z-index: masonry.$masonry-grid-z-index-focus;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Animation variant using design system transitions
|
|
16
64
|
&--animate {
|
|
17
65
|
.o-masonry-grid__item {
|
|
18
|
-
transition:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
66
|
+
transition: masonry.$masonry-grid-item-transition;
|
|
67
|
+
// Modern CSS custom property for fine-grained animation control
|
|
68
|
+
@supports (transition-behavior: allow-discrete) {
|
|
69
|
+
transition-behavior: allow-discrete;
|
|
70
|
+
}
|
|
22
71
|
}
|
|
23
72
|
}
|
|
24
73
|
|
|
25
|
-
// Item styles
|
|
74
|
+
// Item styles with enhanced accessibility and design system integration
|
|
26
75
|
&__item {
|
|
27
76
|
box-sizing: border-box;
|
|
28
77
|
width: 100%;
|
|
78
|
+
// Design system color tokens for background
|
|
79
|
+
background-color: var(--#{config.$prefix}body-bg);
|
|
80
|
+
|
|
81
|
+
// Enhanced focus states with design system tokens
|
|
82
|
+
&:focus {
|
|
83
|
+
outline: masonry.$masonry-grid-focus-ring-width solid masonry.$masonry-grid-focus-ring-color;
|
|
84
|
+
outline-offset: masonry.$masonry-grid-focus-ring-offset;
|
|
85
|
+
z-index: masonry.$masonry-grid-z-index-focus;
|
|
86
|
+
|
|
87
|
+
// Subtle scale effect for better visual feedback
|
|
88
|
+
transform: scale(1.02);
|
|
89
|
+
transition: transform var(--#{config.$prefix}transition-duration-fast) var(--#{config.$prefix}transition-timing-base);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// High contrast mode support
|
|
93
|
+
@media (prefers-contrast: high) {
|
|
94
|
+
&:focus {
|
|
95
|
+
outline-width: calc(#{masonry.$masonry-grid-focus-ring-width} * 2);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
29
98
|
|
|
30
99
|
// Prevent FOUC (Flash of Unstyled Content)
|
|
31
100
|
&:not([style*='position: absolute']) {
|
|
32
101
|
opacity: 0;
|
|
33
102
|
visibility: hidden;
|
|
103
|
+
// Use CSS Custom Property for progressive enhancement
|
|
104
|
+
@supports (view-transition-name: masonry-item) {
|
|
105
|
+
view-transition-name: masonry-item;
|
|
106
|
+
}
|
|
34
107
|
}
|
|
35
108
|
}
|
|
36
109
|
|
|
37
|
-
// Loading states
|
|
110
|
+
// Loading states with modern design system colors
|
|
38
111
|
&__item-loading {
|
|
112
|
+
position: relative;
|
|
113
|
+
|
|
39
114
|
&::before {
|
|
40
115
|
content: '';
|
|
41
116
|
position: absolute;
|
|
@@ -43,54 +118,117 @@
|
|
|
43
118
|
left: 0;
|
|
44
119
|
width: 100%;
|
|
45
120
|
height: 100%;
|
|
46
|
-
background
|
|
47
|
-
|
|
48
|
-
|
|
121
|
+
// Design system loading state background
|
|
122
|
+
background: var(--#{config.$prefix}gray-10);
|
|
123
|
+
z-index: masonry.$masonry-grid-z-index-loading;
|
|
124
|
+
border-radius: var(--#{config.$prefix}border-radius-sm);
|
|
125
|
+
|
|
126
|
+
// Smooth fade-in animation
|
|
127
|
+
animation: masonry-loading-fade-in 0.5s ease-out forwards;
|
|
49
128
|
}
|
|
50
129
|
|
|
51
130
|
img {
|
|
52
131
|
opacity: 0;
|
|
132
|
+
// CSS @property for smoother opacity transitions
|
|
133
|
+
@supports (property: opacity) and (animation-timeline: view()) {
|
|
134
|
+
@property --masonry-img-opacity {
|
|
135
|
+
syntax: '<number>';
|
|
136
|
+
inherits: false;
|
|
137
|
+
initial-value: 0;
|
|
138
|
+
}
|
|
139
|
+
opacity: var(--masonry-img-opacity);
|
|
140
|
+
}
|
|
53
141
|
}
|
|
54
142
|
}
|
|
55
143
|
|
|
56
|
-
//
|
|
57
|
-
&__item-loaded
|
|
58
|
-
|
|
144
|
+
// Enhanced loaded state with modern CSS features
|
|
145
|
+
&__item-loaded {
|
|
146
|
+
img {
|
|
147
|
+
// Modern CSS animation with design system tokens
|
|
148
|
+
animation: masonry-item-fade-in masonry.$masonry-grid-item-animation-duration masonry.$masonry-grid-item-animation-timing forwards;
|
|
149
|
+
|
|
150
|
+
// CSS @property for precise opacity control
|
|
151
|
+
@supports (property: opacity) and (animation-timeline: view()) {
|
|
152
|
+
@property --masonry-img-opacity {
|
|
153
|
+
syntax: '<number>';
|
|
154
|
+
inherits: false;
|
|
155
|
+
initial-value: 0;
|
|
156
|
+
}
|
|
157
|
+
opacity: var(--masonry-img-opacity);
|
|
158
|
+
animation: masonry-item-fade-in-advanced masonry.$masonry-grid-item-animation-duration masonry.$masonry-grid-item-animation-timing forwards;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
59
161
|
}
|
|
60
162
|
|
|
61
|
-
//
|
|
163
|
+
// Modern progressive loading indicator
|
|
62
164
|
&--loading-images {
|
|
63
165
|
position: relative;
|
|
64
166
|
|
|
65
167
|
&::after {
|
|
66
168
|
content: '';
|
|
67
169
|
position: absolute;
|
|
68
|
-
bottom:
|
|
69
|
-
right:
|
|
70
|
-
width:
|
|
71
|
-
height:
|
|
72
|
-
border:
|
|
170
|
+
bottom: var(--#{config.$prefix}spacing-16);
|
|
171
|
+
right: var(--#{config.$prefix}spacing-16);
|
|
172
|
+
width: masonry.$masonry-grid-loading-indicator-size;
|
|
173
|
+
height: masonry.$masonry-grid-loading-indicator-size;
|
|
174
|
+
border: masonry.$masonry-grid-loading-indicator-border-width solid rgba(0, 0, 0, 0.1);
|
|
73
175
|
border-radius: 50%;
|
|
74
|
-
border-top-color:
|
|
176
|
+
border-top-color: masonry.$masonry-grid-loading-indicator-color;
|
|
75
177
|
animation: masonry-spinner 0.8s linear infinite;
|
|
76
|
-
z-index:
|
|
178
|
+
z-index: masonry.$masonry-grid-z-index-loading;
|
|
77
179
|
pointer-events: none;
|
|
180
|
+
|
|
181
|
+
// Dark mode support
|
|
182
|
+
@media (prefers-color-scheme: dark) {
|
|
183
|
+
border-color: rgba(255, 255, 255, 0.1);
|
|
184
|
+
border-top-color: var(--#{config.$prefix}brand-border-subtle-dark);
|
|
185
|
+
}
|
|
78
186
|
}
|
|
79
187
|
}
|
|
80
188
|
|
|
81
|
-
//
|
|
189
|
+
// Responsive adjustments for desktop
|
|
190
|
+
@include mq.media-up('md') {
|
|
191
|
+
min-height: masonry.$masonry-grid-min-height-desktop;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Modern animations with CSS custom properties
|
|
82
195
|
@keyframes masonry-spinner {
|
|
83
196
|
to {
|
|
84
197
|
transform: rotate(360deg);
|
|
85
198
|
}
|
|
86
199
|
}
|
|
87
200
|
|
|
201
|
+
@keyframes masonry-loading-fade-in {
|
|
202
|
+
from {
|
|
203
|
+
opacity: 0;
|
|
204
|
+
transform: scale(0.95);
|
|
205
|
+
}
|
|
206
|
+
to {
|
|
207
|
+
opacity: 1;
|
|
208
|
+
transform: scale(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
88
212
|
@keyframes masonry-item-fade-in {
|
|
89
213
|
from {
|
|
90
214
|
opacity: 0;
|
|
215
|
+
transform: translateY(20px);
|
|
91
216
|
}
|
|
92
217
|
to {
|
|
93
218
|
opacity: 1;
|
|
219
|
+
transform: translateY(0);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Advanced animation with CSS @property for smooth transitions
|
|
224
|
+
@keyframes masonry-item-fade-in-advanced {
|
|
225
|
+
from {
|
|
226
|
+
--masonry-img-opacity: 0;
|
|
227
|
+
transform: translateY(20px) scale(0.95);
|
|
228
|
+
}
|
|
229
|
+
to {
|
|
230
|
+
--masonry-img-opacity: 1;
|
|
231
|
+
transform: translateY(0) scale(1);
|
|
94
232
|
}
|
|
95
233
|
}
|
|
96
234
|
}
|