@shohojdhara/atomix 0.3.15 → 0.4.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 (245) hide show
  1. package/build-tools/index.d.ts +31 -30
  2. package/build-tools/package.json +4 -21
  3. package/dist/atomix.css +20924 -2611
  4. package/dist/atomix.css.map +1 -1
  5. package/dist/atomix.min.css +76 -2
  6. package/dist/atomix.min.css.map +1 -1
  7. package/dist/build-tools/index.d.ts +31 -30
  8. package/dist/build-tools/package.json +4 -21
  9. package/dist/charts.js.map +1 -1
  10. package/dist/core.js.map +1 -1
  11. package/dist/forms.js.map +1 -1
  12. package/dist/heavy.js.map +1 -1
  13. package/dist/index.d.ts +144 -18
  14. package/dist/index.esm.js +110 -55
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/index.js +110 -55
  17. package/dist/index.js.map +1 -1
  18. package/dist/index.min.js +1 -1
  19. package/dist/index.min.js.map +1 -1
  20. package/dist/layout.js.map +1 -1
  21. package/dist/theme.d.ts +9 -9
  22. package/dist/theme.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/components/Accordion/Accordion.stories.tsx +32 -23
  25. package/src/components/Accordion/Accordion.test.tsx +70 -50
  26. package/src/components/Accordion/Accordion.tsx +99 -94
  27. package/src/components/AtomixGlass/AtomixGlass.test.tsx +1 -1
  28. package/src/components/AtomixGlass/GlassFilter.tsx +9 -16
  29. package/src/components/AtomixGlass/glass-utils.ts +4 -3
  30. package/src/components/AtomixGlass/shader-utils.ts +128 -52
  31. package/src/components/AtomixGlass/stories/Playground.stories.tsx +1 -1
  32. package/src/components/AtomixGlass/stories/Shaders.stories.tsx +1 -1
  33. package/src/components/Avatar/Avatar.stories.tsx +45 -62
  34. package/src/components/Avatar/Avatar.tsx +58 -56
  35. package/src/components/Badge/Badge.stories.tsx +20 -9
  36. package/src/components/Badge/Badge.test.tsx +41 -41
  37. package/src/components/Badge/Badge.tsx +64 -62
  38. package/src/components/Block/Block.stories.tsx +14 -4
  39. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +9 -8
  40. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -60
  41. package/src/components/Button/Button.stories.tsx +13 -22
  42. package/src/components/Button/Button.test.tsx +97 -81
  43. package/src/components/Button/Button.tsx +46 -14
  44. package/src/components/Button/ButtonGroup.stories.tsx +37 -32
  45. package/src/components/Button/ButtonGroup.tsx +4 -15
  46. package/src/components/Callout/Callout.stories.tsx +109 -16
  47. package/src/components/Card/Card.stories.tsx +67 -36
  48. package/src/components/Card/Card.tsx +30 -14
  49. package/src/components/Chart/AreaChart.tsx +1 -1
  50. package/src/components/Chart/CandlestickChart.tsx +23 -16
  51. package/src/components/Chart/Chart.stories.tsx +4 -9
  52. package/src/components/Chart/Chart.tsx +40 -44
  53. package/src/components/Chart/ChartRenderer.tsx +39 -12
  54. package/src/components/Chart/ChartToolbar.tsx +21 -5
  55. package/src/components/Chart/DonutChart.tsx +1 -1
  56. package/src/components/Chart/FunnelChart.tsx +4 -1
  57. package/src/components/Chart/GaugeChart.tsx +3 -1
  58. package/src/components/Chart/HeatmapChart.tsx +50 -37
  59. package/src/components/Chart/LineChart.tsx +3 -2
  60. package/src/components/Chart/MultiAxisChart.tsx +24 -16
  61. package/src/components/Chart/RadarChart.tsx +19 -17
  62. package/src/components/Chart/ScatterChart.tsx +29 -21
  63. package/src/components/ColorModeToggle/ColorModeToggle.stories.tsx +6 -2
  64. package/src/components/ColorModeToggle/ColorModeToggle.tsx +15 -3
  65. package/src/components/Countdown/Countdown.stories.tsx +7 -7
  66. package/src/components/DataTable/DataTable.stories.tsx +43 -38
  67. package/src/components/DataTable/DataTable.test.tsx +26 -148
  68. package/src/components/DataTable/DataTable.tsx +485 -456
  69. package/src/components/DatePicker/DatePicker.stories.tsx +32 -47
  70. package/src/components/DatePicker/DatePicker.tsx +31 -26
  71. package/src/components/Dropdown/Dropdown.stories.tsx +2 -5
  72. package/src/components/Dropdown/Dropdown.tsx +313 -299
  73. package/src/components/EdgePanel/EdgePanel.stories.tsx +6 -19
  74. package/src/components/EdgePanel/EdgePanel.tsx +1 -3
  75. package/src/components/Footer/Footer.stories.tsx +21 -16
  76. package/src/components/Footer/Footer.tsx +130 -128
  77. package/src/components/Footer/FooterLink.tsx +2 -2
  78. package/src/components/Form/Checkbox.test.tsx +49 -49
  79. package/src/components/Form/Checkbox.tsx +108 -100
  80. package/src/components/Form/Form.stories.tsx +2 -10
  81. package/src/components/Form/Input.stories.tsx +22 -39
  82. package/src/components/Form/Input.test.tsx +38 -44
  83. package/src/components/Form/Radio.stories.tsx +6 -12
  84. package/src/components/Form/Radio.tsx +68 -66
  85. package/src/components/Form/Select.tsx +184 -182
  86. package/src/components/Form/Textarea.test.tsx +27 -32
  87. package/src/components/Hero/Hero.stories.tsx +56 -23
  88. package/src/components/Hero/Hero.tsx +201 -55
  89. package/src/components/Icon/index.ts +7 -1
  90. package/src/components/List/List.tsx +19 -23
  91. package/src/components/Modal/Modal.stories.tsx +2 -1
  92. package/src/components/Modal/Modal.tsx +130 -127
  93. package/src/components/Navigation/Menu/MegaMenu.tsx +70 -70
  94. package/src/components/Navigation/Nav/NavDropdown.tsx +1 -5
  95. package/src/components/Navigation/SideMenu/SideMenu.stories.tsx +128 -28
  96. package/src/components/Navigation/SideMenu/SideMenu.tsx +5 -7
  97. package/src/components/Navigation/SideMenu/SideMenuItem.tsx +4 -5
  98. package/src/components/Pagination/Pagination.stories.tsx +7 -4
  99. package/src/components/Pagination/Pagination.tsx +199 -202
  100. package/src/components/PhotoViewer/PhotoViewer.tsx +4 -1
  101. package/src/components/Popover/Popover.stories.tsx +99 -192
  102. package/src/components/Popover/Popover.tsx +41 -37
  103. package/src/components/Progress/Progress.stories.tsx +35 -44
  104. package/src/components/River/River.stories.tsx +2 -1
  105. package/src/components/SectionIntro/SectionIntro.stories.tsx +71 -71
  106. package/src/components/Slider/Slider.stories.tsx +12 -4
  107. package/src/components/Spinner/Spinner.stories.tsx +3 -1
  108. package/src/components/Spinner/Spinner.test.tsx +23 -23
  109. package/src/components/Spinner/Spinner.tsx +43 -46
  110. package/src/components/Steps/Steps.stories.tsx +8 -6
  111. package/src/components/Tabs/Tabs.stories.tsx +12 -9
  112. package/src/components/Tabs/Tabs.tsx +74 -72
  113. package/src/components/Toggle/Toggle.stories.tsx +27 -13
  114. package/src/components/Toggle/Toggle.test.tsx +65 -70
  115. package/src/components/Toggle/Toggle.tsx +4 -1
  116. package/src/components/Tooltip/Tooltip.stories.tsx +24 -20
  117. package/src/components/Tooltip/Tooltip.tsx +104 -106
  118. package/src/components/Upload/Upload.stories.tsx +129 -127
  119. package/src/components/Upload/Upload.tsx +287 -283
  120. package/src/components/VideoPlayer/VideoPlayer.tsx +6 -1
  121. package/src/components/index.ts +13 -2
  122. package/src/layouts/Grid/Grid.stories.tsx +9 -3
  123. package/src/layouts/MasonryGrid/MasonryGrid.tsx +5 -1
  124. package/src/lib/__tests__/theme-tools.test.ts +32 -6
  125. package/src/lib/composables/shared-mouse-tracker.ts +13 -14
  126. package/src/lib/composables/useAtomixGlass.ts +106 -49
  127. package/src/lib/composables/useChartExport.ts +1 -1
  128. package/src/lib/composables/useDataTable.ts +29 -17
  129. package/src/lib/composables/useHero.ts +58 -14
  130. package/src/lib/composables/useHeroBackgroundSlider.ts +2 -9
  131. package/src/lib/composables/useInput.ts +10 -8
  132. package/src/lib/composables/useSideMenu.ts +6 -5
  133. package/src/lib/composables/useTooltip.ts +1 -2
  134. package/src/lib/composables/useVideoPlayer.ts +44 -35
  135. package/src/lib/config/index.ts +154 -154
  136. package/src/lib/constants/cssVariables.ts +29 -29
  137. package/src/lib/hooks/__tests__/useComponentCustomization.test.ts +2 -6
  138. package/src/lib/hooks/index.ts +1 -1
  139. package/src/lib/hooks/useComponentCustomization.ts +11 -17
  140. package/src/lib/hooks/usePerformanceMonitor.ts +6 -7
  141. package/src/lib/patterns/__tests__/slots.test.ts +1 -1
  142. package/src/lib/patterns/index.ts +1 -1
  143. package/src/lib/patterns/slots.tsx +8 -13
  144. package/src/lib/storybook/InteractiveDemo.tsx +13 -18
  145. package/src/lib/storybook/PreviewContainer.tsx +1 -1
  146. package/src/lib/storybook/VariantsGrid.tsx +3 -7
  147. package/src/lib/storybook/index.ts +1 -1
  148. package/src/lib/theme/adapters/cssVariableMapper.ts +47 -74
  149. package/src/lib/theme/adapters/index.ts +3 -9
  150. package/src/lib/theme/adapters/themeAdapter.ts +41 -26
  151. package/src/lib/theme/config/index.ts +1 -1
  152. package/src/lib/theme/config/types.ts +2 -2
  153. package/src/lib/theme/config/validator.ts +10 -5
  154. package/src/lib/theme/constants/constants.ts +2 -2
  155. package/src/lib/theme/constants/index.ts +1 -2
  156. package/src/lib/theme/core/__tests__/createTheme.test.ts +20 -22
  157. package/src/lib/theme/core/composeTheme.ts +32 -26
  158. package/src/lib/theme/core/createTheme.ts +1 -1
  159. package/src/lib/theme/core/createThemeObject.ts +308 -301
  160. package/src/lib/theme/core/index.ts +3 -3
  161. package/src/lib/theme/devtools/CLI.ts +106 -104
  162. package/src/lib/theme/devtools/Comparator.tsx +50 -32
  163. package/src/lib/theme/devtools/DesignTokensCustomizer.stories.tsx +50 -48
  164. package/src/lib/theme/devtools/DesignTokensCustomizer.tsx +257 -63
  165. package/src/lib/theme/devtools/Inspector.tsx +75 -60
  166. package/src/lib/theme/devtools/LiveEditor.tsx +97 -76
  167. package/src/lib/theme/devtools/Preview.tsx +150 -106
  168. package/src/lib/theme/devtools/ThemeValidator.ts +29 -21
  169. package/src/lib/theme/devtools/index.ts +3 -9
  170. package/src/lib/theme/devtools/useHistory.ts +23 -21
  171. package/src/lib/theme/errors/errors.ts +12 -11
  172. package/src/lib/theme/errors/index.ts +2 -7
  173. package/src/lib/theme/generators/generateCSS.ts +9 -13
  174. package/src/lib/theme/generators/generateCSSNested.ts +1 -6
  175. package/src/lib/theme/generators/generateCSSVariables.ts +673 -630
  176. package/src/lib/theme/generators/index.ts +1 -4
  177. package/src/lib/theme/i18n/index.ts +1 -1
  178. package/src/lib/theme/i18n/rtl.ts +13 -13
  179. package/src/lib/theme/index.ts +7 -16
  180. package/src/lib/theme/runtime/ThemeApplicator.ts +4 -4
  181. package/src/lib/theme/runtime/ThemeContext.tsx +1 -1
  182. package/src/lib/theme/runtime/ThemeErrorBoundary.tsx +19 -23
  183. package/src/lib/theme/runtime/ThemeProvider.tsx +230 -239
  184. package/src/lib/theme/runtime/__tests__/ThemeProvider.integration.test.tsx +1 -1
  185. package/src/lib/theme/runtime/__tests__/ThemeProvider.test.tsx +24 -29
  186. package/src/lib/theme/runtime/index.ts +2 -5
  187. package/src/lib/theme/runtime/useTheme.ts +18 -18
  188. package/src/lib/theme/runtime/useThemeTokens.ts +22 -22
  189. package/src/lib/theme/test/testTheme.ts +15 -16
  190. package/src/lib/theme/tokens/index.ts +2 -7
  191. package/src/lib/theme/tokens/tokens.ts +25 -24
  192. package/src/lib/theme/types.ts +428 -411
  193. package/src/lib/theme/utils/__tests__/themeValidation.test.ts +3 -3
  194. package/src/lib/theme/utils/componentTheming.ts +18 -18
  195. package/src/lib/theme/utils/domUtils.ts +277 -289
  196. package/src/lib/theme/utils/index.ts +1 -2
  197. package/src/lib/theme/utils/injectCSS.ts +10 -14
  198. package/src/lib/theme/utils/naming.ts +20 -16
  199. package/src/lib/theme/utils/themeHelpers.ts +10 -12
  200. package/src/lib/theme/utils/themeUtils.ts +85 -86
  201. package/src/lib/theme/utils/themeValidation.ts +82 -33
  202. package/src/lib/theme-tools.ts +8 -6
  203. package/src/lib/types/components.ts +172 -71
  204. package/src/lib/types/partProps.ts +1 -1
  205. package/src/lib/utils/__tests__/csv.test.ts +1 -1
  206. package/src/lib/utils/componentUtils.ts +8 -12
  207. package/src/lib/utils/csv.ts +3 -1
  208. package/src/lib/utils/dataTableExport.ts +1 -5
  209. package/src/lib/utils/fontPreloader.ts +10 -19
  210. package/src/lib/utils/icons.ts +4 -1
  211. package/src/lib/utils/index.ts +2 -6
  212. package/src/lib/utils/memoryMonitor.ts +10 -8
  213. package/src/lib/utils/themeNaming.ts +2 -2
  214. package/src/styles/01-settings/_index.scss +0 -1
  215. package/src/styles/01-settings/_settings.colors.scss +8 -8
  216. package/src/styles/01-settings/_settings.design-tokens.scss +61 -50
  217. package/src/styles/01-settings/_settings.navbar.scss +1 -1
  218. package/src/styles/01-settings/_settings.spacing.scss +3 -4
  219. package/src/styles/01-settings/_settings.tooltip.scss +1 -1
  220. package/src/styles/01-settings/_settings.typography.scss +1 -1
  221. package/src/styles/02-tools/_tools.button.scss +51 -21
  222. package/src/styles/02-tools/_tools.utility-api.scss +30 -18
  223. package/src/styles/03-generic/_generic.root.scss +4 -3
  224. package/src/styles/06-components/_components.atomix-glass.scss +13 -9
  225. package/src/styles/06-components/_components.button.scss +16 -4
  226. package/src/styles/06-components/_components.callout.scss +27 -21
  227. package/src/styles/06-components/_components.card.scss +5 -14
  228. package/src/styles/06-components/_components.chart.scss +22 -19
  229. package/src/styles/06-components/_components.checkbox.scss +3 -1
  230. package/src/styles/06-components/_components.color-mode-toggle.scss +3 -1
  231. package/src/styles/06-components/_components.edge-panel.scss +9 -2
  232. package/src/styles/06-components/_components.footer.scss +1 -1
  233. package/src/styles/06-components/_components.side-menu.scss +5 -5
  234. package/src/styles/06-components/_components.toggle.scss +18 -0
  235. package/src/styles/06-components/_index.scss +1 -1
  236. package/src/styles/06-components/old.chart.styles.scss +0 -2
  237. package/src/styles/99-utilities/_utilities.border.scss +69 -27
  238. package/src/styles/99-utilities/_utilities.display.scss +1 -1
  239. package/src/styles/99-utilities/_utilities.opacity.scss +10 -0
  240. package/src/styles/99-utilities/_utilities.position.scss +16 -9
  241. package/src/styles/99-utilities/_utilities.scss +1 -1
  242. package/src/styles/99-utilities/_utilities.sizes.scss +47 -18
  243. package/src/styles/99-utilities/_utilities.spacing.scss +118 -66
  244. package/src/styles/99-utilities/_utilities.text-gradient.scss +30 -30
  245. package/src/styles/99-utilities/_utilities.text.scss +67 -46
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Theme Naming Utility
3
- *
3
+ *
4
4
  * Provides consistent naming conventions for CSS classes, CSS variables,
5
5
  * and JavaScript properties throughout the theme system.
6
6
  */
@@ -36,7 +36,7 @@ export class ThemeNaming {
36
36
  * @param str - String to convert
37
37
  */
38
38
  static kebabToCamel(str: string): string {
39
- return str.replace(/-([a-z])/g, (g) => g[1]?.toUpperCase() ?? '');
39
+ return str.replace(/-([a-z])/g, g => g[1]?.toUpperCase() ?? '');
40
40
  }
41
41
 
42
42
  /**
@@ -65,4 +65,3 @@
65
65
  @forward './settings.upload';
66
66
  @forward './settings.video-player';
67
67
  @forward './settings.z-layers';
68
-
@@ -13,15 +13,15 @@ $color-contrast-light: #ffffff !default;
13
13
 
14
14
  // Primitives Primary Colors (Purple Scale)
15
15
  $primary-1: #f5f3ff !default;
16
- $primary-2: #ede9fe !default;
17
- $primary-3: #ddd6fe !default;
18
- $primary-4: #c4b5fd !default;
19
- $primary-5: #a78bfa !default;
16
+ $primary-2: #ede9fe !default;
17
+ $primary-3: #ddd6fe !default;
18
+ $primary-4: #c4b5fd !default;
19
+ $primary-5: #a78bfa !default;
20
20
  $primary-6: #8b5cf6 !default; // Balanced primary - main brand color (WCAG AA compliant)
21
- $primary-7: #7c3aed !default;
22
- $primary-8: #6d28d9 !default;
23
- $primary-9: #5b21b6 !default;
24
- $primary-10: #4c1d95 !default;
21
+ $primary-7: #7c3aed !default;
22
+ $primary-8: #6d28d9 !default;
23
+ $primary-9: #5b21b6 !default;
24
+ $primary-10: #4c1d95 !default;
25
25
 
26
26
  // Primitives Red Colors
27
27
  $red-1: #fef2f2 !default;
@@ -7,7 +7,6 @@
7
7
  @use 'settings.breakpoints' as breakpoints;
8
8
  @use 'settings.config' as config;
9
9
 
10
-
11
10
  // Color maps
12
11
 
13
12
  $theme-colors-text: (
@@ -23,7 +22,7 @@ $theme-colors-text: (
23
22
  'info': $info-text,
24
23
  'light': $light-text,
25
24
  'dark': $dark-text,
26
- ) !default;
25
+ ) !default;
27
26
 
28
27
  $theme-colors-text-dark: (
29
28
  'primary': $primary-text-dark,
@@ -38,7 +37,7 @@ $theme-colors-text-dark: (
38
37
  'info': $info-text-dark,
39
38
  'light': $light-text-dark,
40
39
  'dark': $dark-text-dark,
41
- ) !default;
40
+ ) !default;
42
41
 
43
42
  $theme-colors-bg-subtle: (
44
43
  'primary': $primary-bg,
@@ -52,7 +51,7 @@ $theme-colors-bg-subtle: (
52
51
  'info': $info-bg,
53
52
  'light': $light-bg,
54
53
  'dark': $dark-bg,
55
- ) !default;
54
+ ) !default;
56
55
 
57
56
  $theme-colors-bg-subtle-dark: (
58
57
  'primary': $primary-bg-dark,
@@ -66,7 +65,7 @@ $theme-colors-bg-subtle-dark: (
66
65
  'info': $info-bg-dark,
67
66
  'light': $light-bg-dark,
68
67
  'dark': $dark-bg-dark,
69
- ) !default;
68
+ ) !default;
70
69
 
71
70
  $theme-colors-border-subtle: (
72
71
  'primary': $primary-border,
@@ -78,7 +77,7 @@ $theme-colors-border-subtle: (
78
77
  'brand': $brand-border,
79
78
  'light': $light-border,
80
79
  'dark': $dark-border,
81
- ) !default;
80
+ ) !default;
82
81
 
83
82
  $theme-colors-border-subtle-dark: (
84
83
  'primary': $primary-border-dark,
@@ -90,7 +89,7 @@ $theme-colors-border-subtle-dark: (
90
89
  'brand': $brand-border-dark,
91
90
  'light': $light-border-dark,
92
91
  'dark': $dark-border-dark,
93
- ) !default;
92
+ ) !default;
94
93
 
95
94
  // Main theme colors map
96
95
  $theme-colors: (
@@ -102,7 +101,7 @@ $theme-colors: (
102
101
  'error': $error,
103
102
  'light': $light,
104
103
  'dark': $dark,
105
- ) !default;
104
+ ) !default;
106
105
 
107
106
  $theme-colors-dark: (
108
107
  'primary': $primary-dark,
@@ -113,7 +112,7 @@ $theme-colors-dark: (
113
112
  'success': $success-dark,
114
113
  'warning': $warning-dark,
115
114
  'info': $info-dark,
116
- ) !default;
115
+ ) !default;
117
116
 
118
117
  $theme-colors-hover: (
119
118
  'primary': $primary-hover,
@@ -124,7 +123,7 @@ $theme-colors-hover: (
124
123
  'success': $success-hover,
125
124
  'warning': $warning-hover,
126
125
  'info': $info-hover,
127
- ) !default;
126
+ ) !default;
128
127
 
129
128
  $theme-colors-hover-dark: (
130
129
  'primary': $primary-hover-dark,
@@ -135,7 +134,7 @@ $theme-colors-hover-dark: (
135
134
  'success': $success-hover-dark,
136
135
  'warning': $warning-hover-dark,
137
136
  'info': $info-hover-dark,
138
- ) !default;
137
+ ) !default;
139
138
 
140
139
  $grays: (
141
140
  '1': $gray-1,
@@ -148,7 +147,7 @@ $grays: (
148
147
  '8': $gray-8,
149
148
  '9': $gray-9,
150
149
  '10': $gray-10,
151
- ) !default;
150
+ ) !default;
152
151
 
153
152
  $primarys: (
154
153
  '1': $primary-1,
@@ -161,7 +160,7 @@ $primarys: (
161
160
  '8': $primary-8,
162
161
  '9': $primary-9,
163
162
  '10': $primary-10,
164
- ) !default;
163
+ ) !default;
165
164
 
166
165
  // Typography Maps
167
166
 
@@ -177,7 +176,7 @@ $theme-font-size: (
177
176
  'h4': $h4-font-size,
178
177
  'h5': $h5-font-size,
179
178
  'h6': $h6-font-size,
180
- ) !default;
179
+ ) !default;
181
180
 
182
181
  $theme-font-weight: (
183
182
  'light': $font-weight-light,
@@ -187,7 +186,7 @@ $theme-font-weight: (
187
186
  'bold': $font-weight-bold,
188
187
  'heavy': $font-weight-heavy,
189
188
  'black': $font-weight-black,
190
- ) !default;
189
+ ) !default;
191
190
 
192
191
  // Utilities maps
193
192
  //
@@ -202,11 +201,14 @@ $theme-font-weight: (
202
201
 
203
202
  $utilities-colors: $theme-colors !default;
204
203
 
205
- $utilities-text-colors: map.merge($utilities-colors,
206
- ('black': $black,
207
- 'white': $white,
208
- 'body': $body-color,
209
- )) !default;
204
+ $utilities-text-colors: map.merge(
205
+ $utilities-colors,
206
+ (
207
+ 'black': $black,
208
+ 'white': $white,
209
+ 'body': $body-color,
210
+ )
211
+ ) !default;
210
212
 
211
213
  $utilities-text-emphasis-colors: (
212
214
  'primary-emphasis': var(--#{config.$prefix}primary-text-emphasis),
@@ -221,14 +223,17 @@ $utilities-text-emphasis-colors: (
221
223
  'error-emphasis': var(--#{config.$prefix}error-text-emphasis),
222
224
  'light-emphasis': var(--#{config.$prefix}light-text-emphasis),
223
225
  'dark-emphasis': var(--#{config.$prefix}dark-text-emphasis),
224
- ) !default;
226
+ ) !default;
225
227
 
226
228
  // scss-docs-start utilities-bg-colors
227
- $utilities-bg-colors: map.merge($utilities-colors,
228
- ('black': $black,
229
- 'white': $white,
230
- 'body': var(--#{config.$prefix}body-bg),
231
- )) !default;
229
+ $utilities-bg-colors: map.merge(
230
+ $utilities-colors,
231
+ (
232
+ 'black': $black,
233
+ 'white': $white,
234
+ 'body': var(--#{config.$prefix}body-bg),
235
+ )
236
+ ) !default;
232
237
 
233
238
  $utilities-bg-subtle: (
234
239
  'primary-subtle': var(--#{config.$prefix}primary-bg-subtle),
@@ -242,13 +247,16 @@ $utilities-bg-subtle: (
242
247
  'error-subtle': var(--#{config.$prefix}error-bg-subtle),
243
248
  'light-subtle': var(--#{config.$prefix}light-bg-subtle),
244
249
  'dark-subtle': var(--#{config.$prefix}dark-bg-subtle),
245
- ) !default;
250
+ ) !default;
246
251
 
247
252
  // scss-docs-start utilities-border-colors
248
- $utilities-border-colors: map.merge($utilities-colors,
249
- ('black': $black,
250
- 'white': $white,
251
- )) !default;
253
+ $utilities-border-colors: map.merge(
254
+ $utilities-colors,
255
+ (
256
+ 'black': $black,
257
+ 'white': $white,
258
+ )
259
+ ) !default;
252
260
 
253
261
  $utilities-border-subtle: (
254
262
  'primary-subtle': var(--#{config.$prefix}primary-border-subtle),
@@ -260,13 +268,16 @@ $utilities-border-subtle: (
260
268
  'brand-subtle': var(--#{config.$prefix}brand-border-subtle),
261
269
  'light-subtle': var(--#{config.$prefix}light-border-subtle),
262
270
  'dark-subtle': var(--#{config.$prefix}dark-border-subtle),
263
- ) !default;
271
+ ) !default;
264
272
 
265
273
  // scss-docs-start utilities-links-underline
266
- $utilities-links-underline: map.merge($utilities-colors,
267
- ('black': $black,
268
- 'white': $white,
269
- )) !default;
274
+ $utilities-links-underline: map.merge(
275
+ $utilities-colors,
276
+ (
277
+ 'black': $black,
278
+ 'white': $white,
279
+ )
280
+ ) !default;
270
281
 
271
282
  $shadows: (
272
283
  'shadow': var(--#{config.$prefix}box-shadow),
@@ -275,7 +286,7 @@ $shadows: (
275
286
  'shadow-lg': var(--#{config.$prefix}box-shadow-lg),
276
287
  'shadow-xl': var(--#{config.$prefix}box-shadow-xl),
277
288
  'shadow-inset': var(--#{config.$prefix}box-shadow-inset),
278
- ) !default;
289
+ ) !default;
279
290
 
280
291
  $shadows-dark: (
281
292
  'shadow': var(--#{config.$prefix}box-shadow-dark),
@@ -284,7 +295,7 @@ $shadows-dark: (
284
295
  'shadow-lg': var(--#{config.$prefix}box-shadow-lg-dark),
285
296
  'shadow-xl': var(--#{config.$prefix}box-shadow-xl-dark),
286
297
  'shadow-inset': var(--#{config.$prefix}box-shadow-inset-dark),
287
- ) !default;
298
+ ) !default;
288
299
 
289
300
  $gradient-colors: (
290
301
  'primary': $gradient-primary,
@@ -321,7 +332,7 @@ $reds: (
321
332
  '8': $red-8,
322
333
  '9': $red-9,
323
334
  '10': $red-10,
324
- ) !default;
335
+ ) !default;
325
336
 
326
337
  // Green scale (1-10)
327
338
  $greens: (
@@ -335,7 +346,7 @@ $greens: (
335
346
  '8': $green-8,
336
347
  '9': $green-9,
337
348
  '10': $green-10,
338
- ) !default;
349
+ ) !default;
339
350
 
340
351
  // Blue scale (1-10)
341
352
  $blues: (
@@ -349,7 +360,7 @@ $blues: (
349
360
  '8': $blue-8,
350
361
  '9': $blue-9,
351
362
  '10': $blue-10,
352
- ) !default;
363
+ ) !default;
353
364
 
354
365
  // Yellow scale (1-10)
355
366
  $yellows: (
@@ -363,14 +374,14 @@ $yellows: (
363
374
  '8': $yellow-8,
364
375
  '9': $yellow-9,
365
376
  '10': $yellow-10,
366
- ) !default;
377
+ ) !default;
367
378
 
368
379
  // Line Height Maps
369
380
  $line-heights: (
370
381
  'base': $line-height-base,
371
382
  'sm': $line-height-sm,
372
383
  'lg': $line-height-lg,
373
- ) !default;
384
+ ) !default;
374
385
 
375
386
  // Extended Font Size Map
376
387
  $font-sizes-extended: (
@@ -388,7 +399,7 @@ $font-sizes-extended: (
388
399
  'h5': $h5-font-size,
389
400
  'h6': $h6-font-size,
390
401
  'display-1': $display-1,
391
- ) !default;
402
+ ) !default;
392
403
 
393
404
  // Letter Spacing Map
394
405
  $letter-spacings: (
@@ -398,33 +409,33 @@ $letter-spacings: (
398
409
  'h4': $h4-letter-spaceing,
399
410
  'h5': $h5-letter-spaceing,
400
411
  'h6': $h6-letter-spaceing,
401
- ) !default;
412
+ ) !default;
402
413
 
403
414
  // Transition & Animation Maps
404
415
  $transitions: (
405
416
  'fast': animations.$transition-fast,
406
417
  'base': animations.$transition-base,
407
418
  'slow': animations.$transition-slow,
408
- ) !default;
419
+ ) !default;
409
420
 
410
421
  $transition-durations: (
411
422
  'fast': 0.15s,
412
423
  'base': 0.3s,
413
424
  'slow': 0.5s,
414
425
  'slower': 0.7s,
415
- ) !default;
426
+ ) !default;
416
427
 
417
428
  $easings: (
418
429
  'base': animations.$easing,
419
430
  'ease-in-out': cubic-bezier(0.4, 0, 0.2, 1),
420
- 'ease-out': cubic-bezier(0.0, 0, 0.2, 1),
431
+ 'ease-out': cubic-bezier(0, 0, 0.2, 1),
421
432
  'ease-in': cubic-bezier(0.4, 0, 1, 1),
422
433
  'ease-linear': linear,
423
- ) !default;
434
+ ) !default;
424
435
 
425
436
  // Focus Ring Tokens
426
437
  $focus-ring: (
427
438
  'width': 3px,
428
439
  'offset': 2px,
429
440
  'opacity': 0.25,
430
- ) !default;
441
+ ) !default;
@@ -24,7 +24,7 @@ $navbar-brand-font-weight: $font-weight-bold !default;
24
24
  $navbar-brand-color: var(--#{$prefix}body-color) !default;
25
25
 
26
26
  // Mobile toggler
27
- $navbar-toggler-size: 2rem !default;
27
+ $navbar-toggler-size: 2rem !default;
28
28
  $navbar-toggler-color: var(--#{$prefix}body-color) !default;
29
29
  $navbar-toggler-bg: transparent !default;
30
30
  $navbar-toggler-border: 0 !default;
@@ -71,11 +71,10 @@ $spacing-sizes: (
71
71
  //320px
72
72
  90: 22.5rem,
73
73
  //360px
74
- 200: 50rem,
75
- //800px
76
- ) !default;
74
+ 200: 50rem, //800px
75
+ ) !default;
77
76
 
78
77
  $spacing-important: false !default;
79
78
  $enable-negative-margins: false !default;
80
79
 
81
- $negative-spacers: if($enable-negative-margins, negativify-map($spacing-sizes), null) !default;
80
+ $negative-spacers: if($enable-negative-margins, negativify-map($spacing-sizes), null) !default;
@@ -18,4 +18,4 @@ $tooltip-border-width: null !default;
18
18
  $tooltip-border-color: null !default;
19
19
  $tooltip-box-shadow: null !default;
20
20
 
21
- $tooltip-arrow-size: map.get($spacing-sizes, 3) !default; //12px
21
+ $tooltip-arrow-size: map.get($spacing-sizes, 3) !default; //12px
@@ -92,4 +92,4 @@ $h5-letter-spaceing: -0.5px !default;
92
92
  $h6-letter-spaceing: -0.5px !default;
93
93
 
94
94
  $paragraph-margin-bottom: 0 !default;
95
- $body-text-align: null !default;
95
+ $body-text-align: null !default;
@@ -33,11 +33,23 @@
33
33
  --#{config.$prefix}btn-bg: var(--#{config.$prefix}#{$color}, #{$background});
34
34
  --#{config.$prefix}btn-border-color: var(--#{config.$prefix}#{$color}, #{$border});
35
35
  --#{config.$prefix}btn-hover-color: #{$btn-text-hover-color};
36
- --#{config.$prefix}btn-hover-bg: var(--#{config.$prefix}#{$color}-hover, #{color.scale($background, $lightness: -15%)});
37
- --#{config.$prefix}btn-hover-border-color: var(--#{config.$prefix}#{$color}-hover, #{color.scale($border, $lightness: -10%)});
36
+ --#{config.$prefix}btn-hover-bg: var(
37
+ --#{config.$prefix}#{$color}-hover,
38
+ #{color.scale($background, $lightness: -15%)}
39
+ );
40
+ --#{config.$prefix}btn-hover-border-color: var(
41
+ --#{config.$prefix}#{$color}-hover,
42
+ #{color.scale($border, $lightness: -10%)}
43
+ );
38
44
  --#{config.$prefix}btn-active-color: var(--#{config.$prefix}white, #{colors.$white});
39
- --#{config.$prefix}btn-active-bg: var(--#{config.$prefix}#{$color}-hover, #{color.scale($background, $lightness: -20%)});
40
- --#{config.$prefix}btn-active-border-color: var(--#{config.$prefix}#{$color}-hover, #{color.scale($border, $lightness: -25%)});
45
+ --#{config.$prefix}btn-active-bg: var(
46
+ --#{config.$prefix}#{$color}-hover,
47
+ #{color.scale($background, $lightness: -20%)}
48
+ );
49
+ --#{config.$prefix}btn-active-border-color: var(
50
+ --#{config.$prefix}#{$color}-hover,
51
+ #{color.scale($border, $lightness: -25%)}
52
+ );
41
53
  --#{config.$prefix}btn-disabled-color: var(--#{config.$prefix}white, #{colors.$white});
42
54
  --#{config.$prefix}btn-disabled-bg: var(--#{config.$prefix}#{$color}, #{$background});
43
55
  --#{config.$prefix}btn-disabled-border-color: var(--#{config.$prefix}#{$color}, #{$border});
@@ -54,34 +66,52 @@
54
66
  ) {
55
67
  $btn-color: var(--#{config.$prefix}#{$color}, #{map.get(tokens.$theme-colors, $color)});
56
68
  $btn-hover-color: if(
57
- $color-hover,
58
- var(--#{config.$prefix}#{$color-hover}, #{map.get(tokens.$theme-colors, $color-hover)}),
69
+ $color-hover,
70
+ var(--#{config.$prefix}#{$color-hover}, #{map.get(tokens.$theme-colors, $color-hover)}),
59
71
  var(--#{config.$prefix}white, #{colors.$white})
60
72
  );
61
73
  $btn-hover-bg: if(
62
- $hover-background,
63
- var(--#{config.$prefix}#{$hover-background}, #{map.get(tokens.$theme-colors, $hover-background)}),
64
- var(--#{config.$prefix}#{$color}-hover, #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -15%)})
74
+ $hover-background,
75
+ var(
76
+ --#{config.$prefix}#{$hover-background},
77
+ #{map.get(tokens.$theme-colors, $hover-background)}
78
+ ),
79
+ var(
80
+ --#{config.$prefix}#{$color}-hover,
81
+ #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -15%)}
82
+ )
65
83
  );
66
84
  $btn-hover-border: if(
67
- $hover-border,
68
- var(--#{config.$prefix}#{$hover-border}, #{map.get(tokens.$theme-colors, $hover-border)}),
69
- var(--#{config.$prefix}#{$color}-hover, #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -10%)})
85
+ $hover-border,
86
+ var(--#{config.$prefix}#{$hover-border}, #{map.get(tokens.$theme-colors, $hover-border)}),
87
+ var(
88
+ --#{config.$prefix}#{$color}-hover,
89
+ #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -10%)}
90
+ )
70
91
  );
71
92
  $btn-active-color: if(
72
- $color-hover,
73
- var(--#{config.$prefix}#{$color-hover}, #{map.get(tokens.$theme-colors, $color-hover)}),
93
+ $color-hover,
94
+ var(--#{config.$prefix}#{$color-hover}, #{map.get(tokens.$theme-colors, $color-hover)}),
74
95
  var(--#{config.$prefix}white, #{colors.$white})
75
96
  );
76
97
  $btn-active-bg: if(
77
- $active-background,
78
- var(--#{config.$prefix}#{$active-background}, #{map.get(tokens.$theme-colors, $active-background)}),
79
- var(--#{config.$prefix}#{$color}-hover, #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -20%)})
98
+ $active-background,
99
+ var(
100
+ --#{config.$prefix}#{$active-background},
101
+ #{map.get(tokens.$theme-colors, $active-background)}
102
+ ),
103
+ var(
104
+ --#{config.$prefix}#{$color}-hover,
105
+ #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -20%)}
106
+ )
80
107
  );
81
108
  $btn-active-border: if(
82
- $active-border,
83
- var(--#{config.$prefix}#{$active-border}, #{map.get(tokens.$theme-colors, $active-border)}),
84
- var(--#{config.$prefix}#{$color}-hover, #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -25%)})
109
+ $active-border,
110
+ var(--#{config.$prefix}#{$active-border}, #{map.get(tokens.$theme-colors, $active-border)}),
111
+ var(
112
+ --#{config.$prefix}#{$color}-hover,
113
+ #{color.scale(map.get(tokens.$theme-colors, $color), $lightness: -25%)}
114
+ )
85
115
  );
86
116
 
87
117
  --#{config.$prefix}btn-color: #{$btn-color};
@@ -104,4 +134,4 @@
104
134
  --#{config.$prefix}btn-padding-x: #{$padding-x};
105
135
  --#{config.$prefix}btn-font-size: #{$font-size};
106
136
  --#{config.$prefix}btn-border-radius: #{$border-radius};
107
- }
137
+ }
@@ -11,6 +11,7 @@
11
11
  @use 'sass:meta';
12
12
  @use '../01-settings/settings.config' as *;
13
13
  @use '../01-settings/settings.breakpoints' as *;
14
+ @use 'tools.breakpoints' as *;
14
15
 
15
16
  // Default config for utilities
16
17
  $utility-defaults: (
@@ -62,9 +63,10 @@ $utility-defaults: (
62
63
 
63
64
  @if map.get($utility, class) == null {
64
65
  // Generate class with property name as class
66
+ // Responsive infix goes between prefix and value: .u-prefix-{bp}-{value}
65
67
  $class-name: if(
66
68
  $key,
67
- '#{$property-class}-#{$escaped-key}#{$local-infix}',
69
+ '#{$property-class}#{$local-infix}-#{$escaped-key}',
68
70
  '#{$property-class}#{$local-infix}'
69
71
  );
70
72
 
@@ -77,13 +79,15 @@ $utility-defaults: (
77
79
  @each $property in $properties {
78
80
  #{$property}: $value if(map.get($utility, rtl), null, !important);
79
81
  }
80
- } @else {
82
+ } @else if $value != null {
83
+ // Guard: only emit property declaration if value is not null
81
84
  #{$property-class}: $value if(map.get($utility, rtl), null, !important);
82
85
  }
83
-
86
+
84
87
  // Add local CSS variables if specified
85
- @if map.get($utility, local-vars) {
86
- @each $local-var-name, $local-var-value in map.get($utility, local-vars) {
88
+ $local-vars: map.get($utility, local-vars);
89
+ @if $local-vars and list.length($local-vars) > 0 {
90
+ @each $local-var-name, $local-var-value in $local-vars {
87
91
  --#{$local-var-name}: #{$local-var-value};
88
92
  }
89
93
  }
@@ -93,6 +97,7 @@ $utility-defaults: (
93
97
  $base-class: map.get($utility, class);
94
98
  $modifier: if($key, '-#{$escaped-key}', '');
95
99
 
100
+ // Responsive infix goes between class and modifier: .u-class-{bp}-{value}
96
101
  .#{$base-class}#{$local-infix}#{$modifier} {
97
102
  @if $css-var and $properties {
98
103
  // Handle CSS variable generation with properties
@@ -108,13 +113,15 @@ $utility-defaults: (
108
113
  @each $property in $properties {
109
114
  #{$property}: $value if(map.get($utility, rtl), null, !important);
110
115
  }
111
- } @else {
116
+ } @else if $value != null {
117
+ // Guard: only emit property declaration if value is not null
112
118
  #{$base-class}: $value if(map.get($utility, rtl), null, !important);
113
119
  }
114
-
120
+
115
121
  // Add local CSS variables if specified
116
- @if map.get($utility, local-vars) {
117
- @each $local-var-name, $local-var-value in map.get($utility, local-vars) {
122
+ $local-vars: map.get($utility, local-vars);
123
+ @if $local-vars and list.length($local-vars) > 0 {
124
+ @each $local-var-name, $local-var-value in $local-vars {
118
125
  --#{$local-var-name}: #{$local-var-value};
119
126
  }
120
127
  }
@@ -129,7 +136,7 @@ $utility-defaults: (
129
136
 
130
137
  @if $responsive {
131
138
  @each $breakpoint in map.keys($breakpoints) {
132
- $infix: call($breakpoint-infix-generator, $breakpoint);
139
+ $infix: meta.call($breakpoint-infix-generator, $breakpoint);
133
140
 
134
141
  @include media-breakpoint-up($breakpoint) {
135
142
  @include generate-utility($utility, $infix);
@@ -147,11 +154,9 @@ $utility-defaults: (
147
154
  $breakpoint-infix-generator: null
148
155
  ) {
149
156
  // Set default breakpoint infix generator if not provided
150
- $breakpoint-infix-generator: if(
151
- $breakpoint-infix-generator,
152
- $breakpoint-infix-generator,
153
- get-breakpoint-infix
154
- );
157
+ @if not $breakpoint-infix-generator {
158
+ $breakpoint-infix-generator: meta.get-function('breakpoint-infix');
159
+ }
155
160
 
156
161
  @each $utility, $config in $utilities {
157
162
  // Merge default config
@@ -167,6 +172,7 @@ $utility-defaults: (
167
172
  rtl: map.get($config, rtl),
168
173
  css-var: map.get($config, css-var),
169
174
  local-vars: map.get($config, local-vars),
175
+ responsive: map.get($config, responsive),
170
176
  );
171
177
 
172
178
  @include generate-responsive-utilities(
@@ -174,14 +180,20 @@ $utility-defaults: (
174
180
  $breakpoints,
175
181
  $breakpoint-infix-generator
176
182
  );
183
+
184
+ // Generate print utilities if requested
185
+ @if map.get($config, print) == true {
186
+ @media print {
187
+ @include generate-utility($utility-map);
188
+ }
189
+ }
177
190
  }
178
191
  }
179
192
  }
180
193
 
181
194
  // Helper function to get breakpoint infix
182
- @function get-breakpoint-infix($breakpoint) {
183
- @return if($breakpoint == null, '', '-#{$breakpoint}');
184
- }
195
+ // Uses breakpoint-infix from _tools.breakpoints.scss
196
+ // Returns '' for the smallest breakpoint (xs), '-sm', '-md', etc. for others
185
197
 
186
198
  // Helper function to escape keys for safe CSS class names
187
199
  @function _escape-key($key) {
@@ -117,7 +117,9 @@
117
117
  --#{config.$prefix}border-radius-lg: #{border-radius.$border-radius-lg};
118
118
  --#{config.$prefix}border-radius-xl: #{border-radius.$border-radius-xl};
119
119
  --#{config.$prefix}border-radius-xxl: #{border-radius.$border-radius-xxl};
120
- --#{config.$prefix}border-radius-2xl: var(--#{config.$prefix}border-radius-xxl); // Deprecated in v5.3.0 for consistency
120
+ --#{config.$prefix}border-radius-2xl: var(
121
+ --#{config.$prefix}border-radius-xxl
122
+ ); // Deprecated in v5.3.0 for consistency
121
123
  --#{config.$prefix}border-radius-3xl: #{border-radius.$border-radius-3xl};
122
124
  --#{config.$prefix}border-radius-4xl: #{border-radius.$border-radius-4xl};
123
125
  --#{config.$prefix}border-radius-pill: #{border-radius.$border-radius-pill};
@@ -212,7 +214,6 @@
212
214
  @each $property, $value in color-maps.$focus-ring {
213
215
  --#{config.$prefix}focus-ring-#{$property}: #{$value};
214
216
  }
215
-
216
217
  }
217
218
 
218
219
  // Dark mode overrides
@@ -276,4 +277,4 @@
276
277
  --#{config.$prefix}form-valid-border-color: #{colors.$form-valid-border-color-dark};
277
278
  --#{config.$prefix}form-invalid-color: #{colors.$form-invalid-color-dark};
278
279
  --#{config.$prefix}form-invalid-border-color: #{colors.$form-invalid-border-color-dark};
279
- }
280
+ }