@shohojdhara/atomix 0.4.8 → 0.5.0

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 (177) hide show
  1. package/atomix.config.ts +58 -1
  2. package/dist/atomix.css +148 -120
  3. package/dist/atomix.css.map +1 -1
  4. package/dist/atomix.min.css +1 -1
  5. package/dist/atomix.min.css.map +1 -1
  6. package/dist/charts.d.ts +33 -0
  7. package/dist/charts.js +1227 -122
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.d.ts +33 -10
  10. package/dist/core.js +1052 -41
  11. package/dist/core.js.map +1 -1
  12. package/dist/forms.d.ts +33 -0
  13. package/dist/forms.js +2086 -1035
  14. package/dist/forms.js.map +1 -1
  15. package/dist/heavy.d.ts +42 -1
  16. package/dist/heavy.js +1620 -600
  17. package/dist/heavy.js.map +1 -1
  18. package/dist/index.d.ts +441 -270
  19. package/dist/index.esm.js +1900 -638
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +1935 -670
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.min.js +1 -1
  24. package/dist/index.min.js.map +1 -1
  25. package/package.json +6 -3
  26. package/scripts/atomix-cli.js +148 -4
  27. package/scripts/cli/__tests__/basic.test.js +3 -2
  28. package/scripts/cli/__tests__/clean.test.js +278 -0
  29. package/scripts/cli/__tests__/component-validator.test.js +433 -0
  30. package/scripts/cli/__tests__/generator.test.js +613 -0
  31. package/scripts/cli/__tests__/glass-motion.test.js +256 -0
  32. package/scripts/cli/__tests__/integration.test.js +719 -108
  33. package/scripts/cli/__tests__/migrate.test.js +74 -0
  34. package/scripts/cli/__tests__/security.test.js +206 -0
  35. package/scripts/cli/__tests__/test-setup.js +3 -1
  36. package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
  37. package/scripts/cli/__tests__/token-provider.test.js +361 -0
  38. package/scripts/cli/__tests__/utils.test.js +5 -5
  39. package/scripts/cli/commands/benchmark.js +105 -0
  40. package/scripts/cli/commands/build-theme.js +4 -1
  41. package/scripts/cli/commands/clean.js +109 -0
  42. package/scripts/cli/commands/doctor.js +88 -0
  43. package/scripts/cli/commands/generate.js +135 -14
  44. package/scripts/cli/commands/init.js +45 -18
  45. package/scripts/cli/commands/migrate.js +106 -0
  46. package/scripts/cli/commands/sync-tokens.js +206 -0
  47. package/scripts/cli/commands/theme-bridge.js +248 -0
  48. package/scripts/cli/commands/tokens.js +157 -0
  49. package/scripts/cli/commands/validate.js +194 -0
  50. package/scripts/cli/internal/ai-engine.js +156 -0
  51. package/scripts/cli/internal/component-validator.js +443 -0
  52. package/scripts/cli/internal/config-loader.js +162 -0
  53. package/scripts/cli/internal/filesystem.js +102 -2
  54. package/scripts/cli/internal/generator.js +359 -39
  55. package/scripts/cli/internal/glass-generator.js +398 -0
  56. package/scripts/cli/internal/hook-generator.js +369 -0
  57. package/scripts/cli/internal/hooks.js +61 -0
  58. package/scripts/cli/internal/itcss-generator.js +565 -0
  59. package/scripts/cli/internal/motion-generator.js +679 -0
  60. package/scripts/cli/internal/template-engine.js +301 -0
  61. package/scripts/cli/internal/theme-bridge.js +664 -0
  62. package/scripts/cli/internal/tokens/engine.js +122 -0
  63. package/scripts/cli/internal/tokens/provider.js +34 -0
  64. package/scripts/cli/internal/tokens/providers/figma.js +50 -0
  65. package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
  66. package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
  67. package/scripts/cli/internal/tokens/token-provider.js +443 -0
  68. package/scripts/cli/internal/tokens/token-validator.js +513 -0
  69. package/scripts/cli/internal/validator.js +276 -0
  70. package/scripts/cli/internal/wizard.js +60 -6
  71. package/scripts/cli/mappings.js +23 -0
  72. package/scripts/cli/migration-tools.js +164 -94
  73. package/scripts/cli/plugins/style-dictionary.js +46 -0
  74. package/scripts/cli/templates/README.md +525 -95
  75. package/scripts/cli/templates/common-templates.js +40 -14
  76. package/scripts/cli/templates/components/react-component.ts +282 -0
  77. package/scripts/cli/templates/config/project-config.ts +112 -0
  78. package/scripts/cli/templates/hooks/use-component.ts +477 -0
  79. package/scripts/cli/templates/index.js +19 -4
  80. package/scripts/cli/templates/index.ts +171 -0
  81. package/scripts/cli/templates/next-templates.js +72 -0
  82. package/scripts/cli/templates/react-templates.js +70 -126
  83. package/scripts/cli/templates/scss-templates.js +35 -35
  84. package/scripts/cli/templates/stories/storybook-story.ts +241 -0
  85. package/scripts/cli/templates/styles/scss-component.ts +255 -0
  86. package/scripts/cli/templates/tests/vitest-test.ts +229 -0
  87. package/scripts/cli/templates/token-templates.js +337 -1
  88. package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
  89. package/scripts/cli/templates/types/component-types.ts +145 -0
  90. package/scripts/cli/templates/utils/testing-utils.ts +144 -0
  91. package/scripts/cli/templates/vanilla-templates.js +39 -0
  92. package/scripts/cli/token-manager.js +8 -2
  93. package/scripts/cli/utils/cache-manager.js +240 -0
  94. package/scripts/cli/utils/detector.js +46 -0
  95. package/scripts/cli/utils/diagnostics.js +289 -0
  96. package/scripts/cli/utils/error.js +45 -3
  97. package/scripts/cli/utils/helpers.js +24 -0
  98. package/scripts/cli/utils/logger.js +1 -1
  99. package/scripts/cli/utils/security.js +302 -0
  100. package/scripts/cli/utils/telemetry.js +115 -0
  101. package/scripts/cli/utils/validation.js +4 -38
  102. package/scripts/cli/utils.js +46 -0
  103. package/src/components/Accordion/Accordion.stories.tsx +0 -18
  104. package/src/components/Accordion/Accordion.test.tsx +0 -17
  105. package/src/components/Accordion/Accordion.tsx +0 -4
  106. package/src/components/AtomixGlass/AtomixGlass.tsx +102 -2
  107. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +125 -12
  108. package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
  109. package/src/components/AtomixGlass/README.md +25 -10
  110. package/src/components/AtomixGlass/animation-system.ts +578 -0
  111. package/src/components/AtomixGlass/shader-utils.ts +3 -0
  112. package/src/components/AtomixGlass/stories/AnimationFeatures.stories.tsx +653 -0
  113. package/src/components/AtomixGlass/stories/AnimationTests.stories.tsx +95 -0
  114. package/src/components/AtomixGlass/stories/CardExamples.stories.tsx +212 -0
  115. package/src/components/AtomixGlass/stories/DashboardExamples.stories.tsx +348 -0
  116. package/src/components/AtomixGlass/stories/EcommerceExamples.stories.tsx +410 -0
  117. package/src/components/AtomixGlass/stories/FormExamples.stories.tsx +436 -0
  118. package/src/components/AtomixGlass/stories/HeroExamples.stories.tsx +264 -0
  119. package/src/components/AtomixGlass/stories/InteractivePlayground.stories.tsx +247 -0
  120. package/src/components/AtomixGlass/stories/MobileUIExamples.stories.tsx +418 -0
  121. package/src/components/AtomixGlass/stories/ModalExamples.stories.tsx +402 -0
  122. package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
  123. package/src/components/AtomixGlass/stories/Playground.stories.tsx +658 -93
  124. package/src/components/AtomixGlass/stories/PresetGallery.stories.tsx +335 -0
  125. package/src/components/AtomixGlass/stories/WidgetExamples.stories.tsx +441 -0
  126. package/src/components/AtomixGlass/stories/argTypes.ts +384 -0
  127. package/src/components/AtomixGlass/stories/shared-components.tsx +91 -1
  128. package/src/components/AtomixGlass/stories/types.ts +127 -0
  129. package/src/components/Avatar/Avatar.tsx +1 -1
  130. package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
  131. package/src/components/Button/Button.stories.tsx +10 -0
  132. package/src/components/Button/Button.test.tsx +16 -11
  133. package/src/components/Button/Button.tsx +4 -4
  134. package/src/components/Card/Card.tsx +1 -1
  135. package/src/components/Dropdown/Dropdown.tsx +12 -12
  136. package/src/components/Form/Select.tsx +62 -3
  137. package/src/components/Modal/Modal.tsx +14 -3
  138. package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
  139. package/src/components/Slider/Slider.stories.tsx +3 -3
  140. package/src/components/Slider/Slider.tsx +38 -0
  141. package/src/components/Steps/Steps.tsx +3 -3
  142. package/src/components/Tabs/Tabs.tsx +77 -8
  143. package/src/components/Testimonial/Testimonial.tsx +1 -1
  144. package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
  145. package/src/components/TypedButton/TypedButton.tsx +39 -0
  146. package/src/components/TypedButton/index.ts +2 -0
  147. package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
  148. package/src/lib/composables/index.ts +4 -7
  149. package/src/lib/composables/types.ts +45 -0
  150. package/src/lib/composables/useAccordion.ts +0 -7
  151. package/src/lib/composables/useAtomixGlass.ts +144 -5
  152. package/src/lib/composables/useChartExport.ts +3 -13
  153. package/src/lib/composables/useDropdown.ts +66 -0
  154. package/src/lib/composables/useFocusTrap.ts +80 -0
  155. package/src/lib/composables/usePerformanceMonitor.ts +448 -0
  156. package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
  157. package/src/lib/composables/useResponsiveGlass.ts +441 -0
  158. package/src/lib/composables/useTooltip.ts +16 -0
  159. package/src/lib/composables/useTypedButton.ts +66 -0
  160. package/src/lib/config/index.ts +62 -5
  161. package/src/lib/constants/components.ts +55 -0
  162. package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
  163. package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
  164. package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
  165. package/src/lib/types/components.ts +37 -11
  166. package/src/lib/types/glass.ts +35 -0
  167. package/src/lib/types/index.ts +1 -0
  168. package/src/lib/utils/displacement-generator.ts +1 -1
  169. package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
  170. package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
  171. package/src/styles/06-components/_components.testbutton.scss +212 -0
  172. package/src/styles/06-components/_components.testtypecheck.scss +212 -0
  173. package/src/styles/06-components/_components.typedbutton.scss +212 -0
  174. package/src/styles/99-utilities/_index.scss +1 -0
  175. package/src/styles/99-utilities/_utilities.text.scss +1 -1
  176. package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
  177. package/src/styles/06-components/old.chart.styles.scss +0 -2788
@@ -0,0 +1,212 @@
1
+ // TestButton Component Styles
2
+ // Generated by Atomix CLI
3
+ // ITCSS Layer: Components
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use '../../01-settings/settings.testbutton' as *;
8
+ @use '../../02-tools/mixins' as *;
9
+ @use '../../02-tools/functions' as *;
10
+
11
+ // Base Component Class
12
+ // =============================================================================
13
+
14
+ .c-testbutton {
15
+ // Layout
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ gap: var(--testbutton-gap);
20
+
21
+ // Spacing
22
+ padding: var(--testbutton-padding-y) var(--testbutton-padding-x);
23
+
24
+ // Typography
25
+ font-size: var(--testbutton-font-size);
26
+ font-weight: var(--testbutton-font-weight);
27
+ line-height: var(--testbutton-line-height);
28
+
29
+ // Appearance
30
+ border-radius: var(--testbutton-radius);
31
+ border: none;
32
+ cursor: pointer;
33
+
34
+ // Transition
35
+ transition: all var(--atomix-duration-fast) var(--atomix-easing-smooth);
36
+
37
+ // Focus
38
+ &:focus-visible {
39
+ outline: none;
40
+ box-shadow: var(--testbutton-focus-ring);
41
+ }
42
+
43
+ // Disabled state
44
+ &:disabled {
45
+ opacity: var(--testbutton-disabled-opacity);
46
+ cursor: not-allowed;
47
+ pointer-events: none;
48
+ }
49
+ }
50
+
51
+ // Variants
52
+ // =============================================================================
53
+
54
+ @if true {
55
+ .c-testbutton--variant-primary {
56
+ background-color: var(--testbutton-primary);
57
+ color: var(--atomix-color-white);
58
+
59
+ &:hover:not(:disabled) {
60
+ background-color: var(--testbutton-primary-hover);
61
+ }
62
+
63
+ &:active:not(:disabled) {
64
+ background-color: var(--testbutton-primary-active);
65
+ }
66
+ }
67
+
68
+ .c-testbutton--variant-secondary {
69
+ background-color: var(--atomix-color-neutral-100);
70
+ color: var(--atomix-color-neutral-900);
71
+
72
+ &:hover:not(:disabled) {
73
+ background-color: var(--atomix-color-neutral-200);
74
+ }
75
+ }
76
+
77
+ .c-testbutton--variant-outline {
78
+ background-color: transparent;
79
+ border: 1px solid var(--atomix-color-neutral-300);
80
+ color: var(--atomix-color-neutral-700);
81
+
82
+ &:hover:not(:disabled) {
83
+ border-color: var(--atomix-color-neutral-400);
84
+ background-color: var(--atomix-color-neutral-50);
85
+ }
86
+ }
87
+ }
88
+
89
+ // Glassmorphism Variant
90
+ // =============================================================================
91
+
92
+ .c-testbutton--glass {
93
+ background: rgba(255, 255, 255, 0.1);
94
+ backdrop-filter: blur(10px) saturate(200%);
95
+ border: 1px solid rgba(255, 255, 255, 0.2);
96
+
97
+ @media (prefers-reduced-transparency: reduce) {
98
+ background: rgba(255, 255, 255, 0.8);
99
+ backdrop-filter: none;
100
+ }
101
+
102
+ &:hover:not(:disabled) {
103
+ background: rgba(255, 255, 255, 0.15);
104
+ }
105
+ }
106
+
107
+ // Animation Variants
108
+ // =============================================================================
109
+
110
+ @if true {
111
+ // Fade In Animation
112
+ .c-testbutton--animate-fade-in {
113
+ animation: atomix-fade-in var(--atomix-duration-base) var(--atomix-easing-smooth);
114
+ }
115
+
116
+ // Slide In Up Animation
117
+ .c-testbutton--animate-slide-in-up {
118
+ animation: atomix-slide-in-up var(--atomix-duration-slow) var(--atomix-easing-smooth);
119
+ }
120
+
121
+ // Scale In Animation
122
+ .c-testbutton--animate-scale-in {
123
+ animation: atomix-scale-in var(--atomix-duration-base) var(--atomix-easing-smooth);
124
+ }
125
+
126
+ // Pulse Animation (for loading states)
127
+ .c-testbutton--animate-pulse {
128
+ animation: atomix-pulse 2s var(--atomix-easing-smooth) infinite;
129
+ }
130
+
131
+ // Shimmer Animation (for skeleton loaders)
132
+ .c-testbutton--animate-shimmer {
133
+ animation: atomix-shimmer 2s linear infinite;
134
+ background: linear-gradient(
135
+ 90deg,
136
+ var(--atomix-color-neutral-100) 0%,
137
+ var(--atomix-color-neutral-200) 50%,
138
+ var(--atomix-color-neutral-100) 100%
139
+ );
140
+ background-size: 200% 100%;
141
+ }
142
+ }
143
+
144
+ // Motion Preferences
145
+ // =============================================================================
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ .c-testbutton,
149
+ .c-testbutton * {
150
+ animation-duration: 0.01ms !important;
151
+ animation-iteration-count: 1 !important;
152
+ transition-duration: 0.01ms !important;
153
+ }
154
+ }
155
+
156
+ // Sizes
157
+ // =============================================================================
158
+
159
+ @if true {
160
+ .c-testbutton--size-sm {
161
+ padding: calc(var(--testbutton-padding-y) * 0.75) calc(var(--testbutton-padding-x) * 0.75);
162
+ font-size: var(--atomix-font-size-sm);
163
+ }
164
+
165
+ .c-testbutton--size-md {
166
+ // Default size - no overrides needed
167
+ }
168
+
169
+ .c-testbutton--size-lg {
170
+ padding: calc(var(--testbutton-padding-y) * 1.25) calc(var(--testbutton-padding-x) * 1.25);
171
+ font-size: var(--atomix-font-size-lg);
172
+ }
173
+ }
174
+
175
+ // States
176
+ // =============================================================================
177
+
178
+ @if true {
179
+ .c-testbutton--state-loading {
180
+ position: relative;
181
+ pointer-events: none;
182
+
183
+ &::after {
184
+ content: '';
185
+ position: absolute;
186
+ inset: 0;
187
+ background: rgba(255, 255, 255, 0.3);
188
+ backdrop-filter: blur(2px);
189
+ }
190
+ }
191
+
192
+ .c-testbutton--state-glass {
193
+ background-color: rgba(255, 255, 255, 0.1);
194
+ backdrop-filter: blur(10px);
195
+ border: 1px solid rgba(255, 255, 255, 0.2);
196
+ }
197
+ }
198
+
199
+ // Responsive Overrides
200
+ // =============================================================================
201
+
202
+ @include atomix-media-breakpoint-up(md) {
203
+ .c-testbutton {
204
+ // Tablet-specific adjustments if needed
205
+ }
206
+ }
207
+
208
+ @include atomix-media-breakpoint-up(lg) {
209
+ .c-testbutton {
210
+ // Desktop-specific adjustments if needed
211
+ }
212
+ }
@@ -0,0 +1,212 @@
1
+ // TestTypeCheck Component Styles
2
+ // Generated by Atomix CLI
3
+ // ITCSS Layer: Components
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use '../../01-settings/settings.testtypecheck' as *;
8
+ @use '../../02-tools/mixins' as *;
9
+ @use '../../02-tools/functions' as *;
10
+
11
+ // Base Component Class
12
+ // =============================================================================
13
+
14
+ .c-testtypecheck {
15
+ // Layout
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ gap: var(--testtypecheck-gap);
20
+
21
+ // Spacing
22
+ padding: var(--testtypecheck-padding-y) var(--testtypecheck-padding-x);
23
+
24
+ // Typography
25
+ font-size: var(--testtypecheck-font-size);
26
+ font-weight: var(--testtypecheck-font-weight);
27
+ line-height: var(--testtypecheck-line-height);
28
+
29
+ // Appearance
30
+ border-radius: var(--testtypecheck-radius);
31
+ border: none;
32
+ cursor: pointer;
33
+
34
+ // Transition
35
+ transition: all var(--atomix-duration-fast) var(--atomix-easing-smooth);
36
+
37
+ // Focus
38
+ &:focus-visible {
39
+ outline: none;
40
+ box-shadow: var(--testtypecheck-focus-ring);
41
+ }
42
+
43
+ // Disabled state
44
+ &:disabled {
45
+ opacity: var(--testtypecheck-disabled-opacity);
46
+ cursor: not-allowed;
47
+ pointer-events: none;
48
+ }
49
+ }
50
+
51
+ // Variants
52
+ // =============================================================================
53
+
54
+ @if true {
55
+ .c-testtypecheck--variant-primary {
56
+ background-color: var(--testtypecheck-primary);
57
+ color: var(--atomix-color-white);
58
+
59
+ &:hover:not(:disabled) {
60
+ background-color: var(--testtypecheck-primary-hover);
61
+ }
62
+
63
+ &:active:not(:disabled) {
64
+ background-color: var(--testtypecheck-primary-active);
65
+ }
66
+ }
67
+
68
+ .c-testtypecheck--variant-secondary {
69
+ background-color: var(--atomix-color-neutral-100);
70
+ color: var(--atomix-color-neutral-900);
71
+
72
+ &:hover:not(:disabled) {
73
+ background-color: var(--atomix-color-neutral-200);
74
+ }
75
+ }
76
+
77
+ .c-testtypecheck--variant-outline {
78
+ background-color: transparent;
79
+ border: 1px solid var(--atomix-color-neutral-300);
80
+ color: var(--atomix-color-neutral-700);
81
+
82
+ &:hover:not(:disabled) {
83
+ border-color: var(--atomix-color-neutral-400);
84
+ background-color: var(--atomix-color-neutral-50);
85
+ }
86
+ }
87
+ }
88
+
89
+ // Glassmorphism Variant
90
+ // =============================================================================
91
+
92
+ .c-testtypecheck--glass {
93
+ background: rgba(255, 255, 255, 0.1);
94
+ backdrop-filter: blur(10px) saturate(200%);
95
+ border: 1px solid rgba(255, 255, 255, 0.2);
96
+
97
+ @media (prefers-reduced-transparency: reduce) {
98
+ background: rgba(255, 255, 255, 0.8);
99
+ backdrop-filter: none;
100
+ }
101
+
102
+ &:hover:not(:disabled) {
103
+ background: rgba(255, 255, 255, 0.15);
104
+ }
105
+ }
106
+
107
+ // Animation Variants
108
+ // =============================================================================
109
+
110
+ @if true {
111
+ // Fade In Animation
112
+ .c-testtypecheck--animate-fade-in {
113
+ animation: atomix-fade-in var(--atomix-duration-base) var(--atomix-easing-smooth);
114
+ }
115
+
116
+ // Slide In Up Animation
117
+ .c-testtypecheck--animate-slide-in-up {
118
+ animation: atomix-slide-in-up var(--atomix-duration-slow) var(--atomix-easing-smooth);
119
+ }
120
+
121
+ // Scale In Animation
122
+ .c-testtypecheck--animate-scale-in {
123
+ animation: atomix-scale-in var(--atomix-duration-base) var(--atomix-easing-smooth);
124
+ }
125
+
126
+ // Pulse Animation (for loading states)
127
+ .c-testtypecheck--animate-pulse {
128
+ animation: atomix-pulse 2s var(--atomix-easing-smooth) infinite;
129
+ }
130
+
131
+ // Shimmer Animation (for skeleton loaders)
132
+ .c-testtypecheck--animate-shimmer {
133
+ animation: atomix-shimmer 2s linear infinite;
134
+ background: linear-gradient(
135
+ 90deg,
136
+ var(--atomix-color-neutral-100) 0%,
137
+ var(--atomix-color-neutral-200) 50%,
138
+ var(--atomix-color-neutral-100) 100%
139
+ );
140
+ background-size: 200% 100%;
141
+ }
142
+ }
143
+
144
+ // Motion Preferences
145
+ // =============================================================================
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ .c-testtypecheck,
149
+ .c-testtypecheck * {
150
+ animation-duration: 0.01ms !important;
151
+ animation-iteration-count: 1 !important;
152
+ transition-duration: 0.01ms !important;
153
+ }
154
+ }
155
+
156
+ // Sizes
157
+ // =============================================================================
158
+
159
+ @if true {
160
+ .c-testtypecheck--size-sm {
161
+ padding: calc(var(--testtypecheck-padding-y) * 0.75) calc(var(--testtypecheck-padding-x) * 0.75);
162
+ font-size: var(--atomix-font-size-sm);
163
+ }
164
+
165
+ .c-testtypecheck--size-md {
166
+ // Default size - no overrides needed
167
+ }
168
+
169
+ .c-testtypecheck--size-lg {
170
+ padding: calc(var(--testtypecheck-padding-y) * 1.25) calc(var(--testtypecheck-padding-x) * 1.25);
171
+ font-size: var(--atomix-font-size-lg);
172
+ }
173
+ }
174
+
175
+ // States
176
+ // =============================================================================
177
+
178
+ @if true {
179
+ .c-testtypecheck--state-loading {
180
+ position: relative;
181
+ pointer-events: none;
182
+
183
+ &::after {
184
+ content: '';
185
+ position: absolute;
186
+ inset: 0;
187
+ background: rgba(255, 255, 255, 0.3);
188
+ backdrop-filter: blur(2px);
189
+ }
190
+ }
191
+
192
+ .c-testtypecheck--state-glass {
193
+ background-color: rgba(255, 255, 255, 0.1);
194
+ backdrop-filter: blur(10px);
195
+ border: 1px solid rgba(255, 255, 255, 0.2);
196
+ }
197
+ }
198
+
199
+ // Responsive Overrides
200
+ // =============================================================================
201
+
202
+ @include atomix-media-breakpoint-up(md) {
203
+ .c-testtypecheck {
204
+ // Tablet-specific adjustments if needed
205
+ }
206
+ }
207
+
208
+ @include atomix-media-breakpoint-up(lg) {
209
+ .c-testtypecheck {
210
+ // Desktop-specific adjustments if needed
211
+ }
212
+ }
@@ -0,0 +1,212 @@
1
+ // TypedButton Component Styles
2
+ // Generated by Atomix CLI
3
+ // ITCSS Layer: Components
4
+ // =============================================================================
5
+
6
+ @use 'sass:map';
7
+ @use '../../01-settings/settings.typedbutton' as *;
8
+ @use '../../02-tools/mixins' as *;
9
+ @use '../../02-tools/functions' as *;
10
+
11
+ // Base Component Class
12
+ // =============================================================================
13
+
14
+ .c-typedbutton {
15
+ // Layout
16
+ display: inline-flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ gap: var(--typedbutton-gap);
20
+
21
+ // Spacing
22
+ padding: var(--typedbutton-padding-y) var(--typedbutton-padding-x);
23
+
24
+ // Typography
25
+ font-size: var(--typedbutton-font-size);
26
+ font-weight: var(--typedbutton-font-weight);
27
+ line-height: var(--typedbutton-line-height);
28
+
29
+ // Appearance
30
+ border-radius: var(--typedbutton-radius);
31
+ border: none;
32
+ cursor: pointer;
33
+
34
+ // Transition
35
+ transition: all var(--atomix-duration-fast) var(--atomix-easing-smooth);
36
+
37
+ // Focus
38
+ &:focus-visible {
39
+ outline: none;
40
+ box-shadow: var(--typedbutton-focus-ring);
41
+ }
42
+
43
+ // Disabled state
44
+ &:disabled {
45
+ opacity: var(--typedbutton-disabled-opacity);
46
+ cursor: not-allowed;
47
+ pointer-events: none;
48
+ }
49
+ }
50
+
51
+ // Variants
52
+ // =============================================================================
53
+
54
+ @if true {
55
+ .c-typedbutton--variant-primary {
56
+ background-color: var(--typedbutton-primary);
57
+ color: var(--atomix-color-white);
58
+
59
+ &:hover:not(:disabled) {
60
+ background-color: var(--typedbutton-primary-hover);
61
+ }
62
+
63
+ &:active:not(:disabled) {
64
+ background-color: var(--typedbutton-primary-active);
65
+ }
66
+ }
67
+
68
+ .c-typedbutton--variant-secondary {
69
+ background-color: var(--atomix-color-neutral-100);
70
+ color: var(--atomix-color-neutral-900);
71
+
72
+ &:hover:not(:disabled) {
73
+ background-color: var(--atomix-color-neutral-200);
74
+ }
75
+ }
76
+
77
+ .c-typedbutton--variant-outline {
78
+ background-color: transparent;
79
+ border: 1px solid var(--atomix-color-neutral-300);
80
+ color: var(--atomix-color-neutral-700);
81
+
82
+ &:hover:not(:disabled) {
83
+ border-color: var(--atomix-color-neutral-400);
84
+ background-color: var(--atomix-color-neutral-50);
85
+ }
86
+ }
87
+ }
88
+
89
+ // Glassmorphism Variant
90
+ // =============================================================================
91
+
92
+ .c-typedbutton--glass {
93
+ background: rgba(255, 255, 255, 0.1);
94
+ backdrop-filter: blur(10px) saturate(200%);
95
+ border: 1px solid rgba(255, 255, 255, 0.2);
96
+
97
+ @media (prefers-reduced-transparency: reduce) {
98
+ background: rgba(255, 255, 255, 0.8);
99
+ backdrop-filter: none;
100
+ }
101
+
102
+ &:hover:not(:disabled) {
103
+ background: rgba(255, 255, 255, 0.15);
104
+ }
105
+ }
106
+
107
+ // Animation Variants
108
+ // =============================================================================
109
+
110
+ @if true {
111
+ // Fade In Animation
112
+ .c-typedbutton--animate-fade-in {
113
+ animation: atomix-fade-in var(--atomix-duration-base) var(--atomix-easing-smooth);
114
+ }
115
+
116
+ // Slide In Up Animation
117
+ .c-typedbutton--animate-slide-in-up {
118
+ animation: atomix-slide-in-up var(--atomix-duration-slow) var(--atomix-easing-smooth);
119
+ }
120
+
121
+ // Scale In Animation
122
+ .c-typedbutton--animate-scale-in {
123
+ animation: atomix-scale-in var(--atomix-duration-base) var(--atomix-easing-smooth);
124
+ }
125
+
126
+ // Pulse Animation (for loading states)
127
+ .c-typedbutton--animate-pulse {
128
+ animation: atomix-pulse 2s var(--atomix-easing-smooth) infinite;
129
+ }
130
+
131
+ // Shimmer Animation (for skeleton loaders)
132
+ .c-typedbutton--animate-shimmer {
133
+ animation: atomix-shimmer 2s linear infinite;
134
+ background: linear-gradient(
135
+ 90deg,
136
+ var(--atomix-color-neutral-100) 0%,
137
+ var(--atomix-color-neutral-200) 50%,
138
+ var(--atomix-color-neutral-100) 100%
139
+ );
140
+ background-size: 200% 100%;
141
+ }
142
+ }
143
+
144
+ // Motion Preferences
145
+ // =============================================================================
146
+
147
+ @media (prefers-reduced-motion: reduce) {
148
+ .c-typedbutton,
149
+ .c-typedbutton * {
150
+ animation-duration: 0.01ms !important;
151
+ animation-iteration-count: 1 !important;
152
+ transition-duration: 0.01ms !important;
153
+ }
154
+ }
155
+
156
+ // Sizes
157
+ // =============================================================================
158
+
159
+ @if true {
160
+ .c-typedbutton--size-sm {
161
+ padding: calc(var(--typedbutton-padding-y) * 0.75) calc(var(--typedbutton-padding-x) * 0.75);
162
+ font-size: var(--atomix-font-size-sm);
163
+ }
164
+
165
+ .c-typedbutton--size-md {
166
+ // Default size - no overrides needed
167
+ }
168
+
169
+ .c-typedbutton--size-lg {
170
+ padding: calc(var(--typedbutton-padding-y) * 1.25) calc(var(--typedbutton-padding-x) * 1.25);
171
+ font-size: var(--atomix-font-size-lg);
172
+ }
173
+ }
174
+
175
+ // States
176
+ // =============================================================================
177
+
178
+ @if true {
179
+ .c-typedbutton--state-loading {
180
+ position: relative;
181
+ pointer-events: none;
182
+
183
+ &::after {
184
+ content: '';
185
+ position: absolute;
186
+ inset: 0;
187
+ background: rgba(255, 255, 255, 0.3);
188
+ backdrop-filter: blur(2px);
189
+ }
190
+ }
191
+
192
+ .c-typedbutton--state-glass {
193
+ background-color: rgba(255, 255, 255, 0.1);
194
+ backdrop-filter: blur(10px);
195
+ border: 1px solid rgba(255, 255, 255, 0.2);
196
+ }
197
+ }
198
+
199
+ // Responsive Overrides
200
+ // =============================================================================
201
+
202
+ @include atomix-media-breakpoint-up(md) {
203
+ .c-typedbutton {
204
+ // Tablet-specific adjustments if needed
205
+ }
206
+ }
207
+
208
+ @include atomix-media-breakpoint-up(lg) {
209
+ .c-typedbutton {
210
+ // Desktop-specific adjustments if needed
211
+ }
212
+ }
@@ -19,6 +19,7 @@
19
19
  @forward 'utilities.visibility';
20
20
  @forward 'utilities.visually-hidden';
21
21
  @forward 'utilities.z-index';
22
+ @forward 'utilities.touch-target';
22
23
 
23
24
  // Forward the main utilities generator
24
25
  @forward 'utilities';
@@ -9,7 +9,7 @@ $utilities-text: (
9
9
  'font-size': (
10
10
  rfs: true,
11
11
  property: font-size,
12
- class: u-fs,
12
+ class: u-text,
13
13
  values: map.merge(
14
14
  color-maps.$font-sizes-extended,
15
15
  (
@@ -0,0 +1,36 @@
1
+ @use '../02-tools/tools.breakpoints' as *;
2
+ @use '../01-settings/settings.config' as config;
3
+
4
+ /**
5
+ * Touch Target Optimization
6
+ * Ensures interactive elements have a minimum touch target size of 44px
7
+ * as per WCAG 2.1 Success Criterion 2.5.5 (Target Size).
8
+ */
9
+
10
+ .u-touch-target {
11
+ @include media-breakpoint-down(md) {
12
+ min-height: 44px;
13
+ min-width: 44px;
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ }
18
+ }
19
+
20
+ // Apply to common interactive elements automatically on mobile
21
+ @include media-breakpoint-down(md) {
22
+ .c-btn--sm,
23
+ .c-form-check-input,
24
+ .c-form-select-sm,
25
+ .c-form-control-sm {
26
+ min-height: 44px;
27
+ min-width: 44px;
28
+ }
29
+
30
+ // Checkbox/Radio labels should also be part of the touch target
31
+ .c-form-check {
32
+ min-height: 44px;
33
+ display: flex;
34
+ align-items: center;
35
+ }
36
+ }