beathers 5.7.6 → 5.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.prettierrc.js +10 -8
  2. package/CHANGELOG +305 -274
  3. package/css/beathers.min.css +2 -2
  4. package/css/beathers.min.css.map +1 -1
  5. package/docs/colors.md +250 -250
  6. package/docs/grid-system.md +130 -130
  7. package/docs/shaping.md +272 -272
  8. package/docs/typography.md +124 -124
  9. package/package.json +107 -105
  10. package/readme.md +301 -301
  11. package/scripts/commands/build.js +4 -4
  12. package/scripts/commands/clean.d.ts +2 -0
  13. package/scripts/commands/clean.d.ts.map +1 -0
  14. package/scripts/commands/clean.js +22 -0
  15. package/scripts/commands/fonts.d.ts.map +1 -1
  16. package/scripts/commands/fonts.js +4 -3
  17. package/scripts/commands/index.js +8 -8
  18. package/scripts/commands/init.js +1 -1
  19. package/scripts/commands/version-update.d.ts +2 -0
  20. package/scripts/commands/version-update.d.ts.map +1 -0
  21. package/scripts/commands/version-update.js +122 -0
  22. package/scripts/commands/version.js +1 -1
  23. package/scripts/helpers/BuildScssVariables.d.ts +1 -1
  24. package/scripts/helpers/BuildScssVariables.d.ts.map +1 -1
  25. package/scripts/helpers/BuildScssVariables.js +20 -10
  26. package/scripts/helpers/LoadUserConfigs.js +1 -1
  27. package/scripts/helpers/ReadDefaultValues.js +20 -20
  28. package/scripts/types.d.ts +1 -1
  29. package/scripts/types.d.ts.map +1 -1
  30. package/scss/_variables.scss +19 -19
  31. package/scss/beathers.min.scss +15 -14
  32. package/scss/functions/_colors.scss +242 -230
  33. package/scss/functions/_mediaQueries.scss +140 -136
  34. package/scss/functions/_others.scss +113 -79
  35. package/scss/functions/_typographic.scss +133 -129
  36. package/scss/functions/_validations.scss +293 -251
  37. package/scss/settings/_configs.scss +270 -270
  38. package/scss/settings/_defaults.scss +209 -214
  39. package/scss/settings/_index.scss +90 -90
  40. package/scss/style/_button.scss +103 -101
  41. package/scss/style/_colors.scss +156 -146
  42. package/scss/style/_dialog.scss +147 -146
  43. package/scss/style/_glass.scss +98 -80
  44. package/scss/style/_grid.scss +121 -95
  45. package/scss/style/_loader.scss +74 -62
  46. package/scss/style/_resets.scss +176 -168
  47. package/scss/style/_shaping.scss +561 -439
  48. package/scss/style/_typographic.scss +400 -345
@@ -1,230 +1,242 @@
1
- @use 'sass:color';
2
- @use 'sass:math';
3
- @use 'sass:list';
4
- @use 'sass:map';
5
- @use '../settings/configs' as configs;
6
- @use '../settings/index' as settings;
7
- @use '../variables' as vars;
8
- @use '../settings/defaults' as defs;
9
- @use '../functions/validations' as val;
10
-
11
- // Definitions
12
- $colors: if(vars.$colors != (), vars.$colors, defs.$colors);
13
- $opacities: if(vars.$opacities != (), vars.$opacities, defs.$opacities);
14
- $useColorsLightMode: if(vars.$useColorsLightMode != null, vars.$useColorsLightMode, settings.$useColorsLightMode);
15
- $useColorsDarkMode: if(vars.$useColorsDarkMode != null, vars.$useColorsDarkMode, settings.$useColorsDarkMode);
16
- $useColorsOpacities: if(vars.$useColorsOpacities != null, vars.$useColorsOpacities, settings.$useColorsOpacities);
17
-
18
- // Color Convertors ----- ----- ----- -----
19
- //
20
- // @function hexToRgba
21
- // --------------------------------------
22
- // Converts a hex color value to RGBA format
23
- //
24
- // @param {Color} $color - The hex color to convert (e.g. '#ffffff' or '#fff')
25
- // @param {Number} $opacity - Optional opacity value between 0 and 1 (default: 1)
26
- // @return {Color} - The color in rgba() format
27
- //
28
- // @example scss
29
- // color: hexToRgba('#ffffff');
30
- // // Returns rgba(255, 255, 255, 1)
31
- // color: hexToRgba('#ffffff', 0.5);
32
- // // Returns rgba(255, 255, 255, 0.5)
33
- // color: hexToRgba('#ffffff80');
34
- // // Returns rgba(255, 255, 255, 0.5)
35
- //
36
- @function hexToRgba($color, $opacity: 1, $debugIn: null) {
37
- // Validate parameters
38
- $checkedColor: val.hexColor('color', $color, 'hexToRgba().#{$debugIn}');
39
- $checkedOpacity: val.opacity($opacity, 'hexToRgba().#{$debugIn}');
40
-
41
- @return rgba(
42
- color.channel($checkedColor, 'red', $space: rgb),
43
- color.channel($checkedColor, 'green', $space: rgb),
44
- color.channel($checkedColor, 'blue', $space: rgb),
45
- $checkedOpacity
46
- );
47
- }
48
-
49
- // Use Color ----- ----- ----- -----
50
- //
51
- // @function useColor
52
- // --------------------------------------
53
- // Retrieves a color from any color map with optional variant and opacity
54
- //
55
- // @param {String} $color - The color key to retrieve from the map
56
- // @param {String} $mode - Optional mode, must be 'light' or 'dark' (default: 'light')
57
- // @param {Number} $opacity - Optional opacity value between 0 and 100 (default: 100)
58
- // @param {Map} $map - Optional color map to use (defaults to $colors)
59
- // @return {Color} - The color value, possibly with applied opacity
60
- // @throws {Error} - If mode is provided but isn't 'light' or 'dark'
61
- // @throws {Error} - If opacity is provided but isn't a number between 0 and 100
62
- //
63
- // @example scss
64
- // // Using default color map ($colors)
65
- // color: useColor('primary', 'light', 0.5);
66
- // // Returns the light variant of primary color with 50% opacity
67
- //
68
- // // Using a custom color map
69
- // color: useColor('secondary', 'dark', null, $customMap);
70
- // // Returns the dark variant of secondary color from custom map
71
- //
72
- @function useColor($color, $mode: 'light', $opacity: 100) {
73
- // Validate parameters
74
- $checkedMode: val.colorMode($mode, 'useColor()');
75
- $checkedOpacity: val.colorOpacity($opacity, 'useColor()');
76
-
77
- @if $color {
78
- $value: map.get($color, $mode);
79
-
80
- @if $checkedOpacity {
81
- @return hexToRgba($value, math.div($opacity, 100), 'useColor().#{$value}');
82
- } @else {
83
- @return $value;
84
- }
85
- } @else {
86
- @return null;
87
- }
88
- }
89
-
90
- @function useColorWithMap($color, $mode: 'light', $opacity: 100, $map: $colors) {
91
- // Validate parameters
92
- $checkedMap: val.map($map, 'useColorWithMap().map');
93
-
94
- $colorValue: map.get($checkedMap, $color);
95
- @return useColor($colorValue, $mode, $opacity);
96
- }
97
-
98
- // @mixin useColorProperty
99
- // --------------------------------------
100
- // Applies color properties with theme variant support while handling light/dark themes
101
- // and creating appropriate CSS selectors for different use cases.
102
- //
103
- // @param {String} $colorClass - The CSS class name to apply the color to (e.g., 'color-1', 'bg\:color-1')
104
- // @param {String|Null} $class - The CSS class prefix (e.g., 'bg', 'border', null for 'color')
105
- // @param {String} $property - The CSS property to set (e.g., 'color', 'background-color')
106
- // @param {Map} $color - The color map with light/dark variants
107
- // @param {Map} $map - The parent color map containing all colors
108
- // @param {Number} $opacity - Optional opacity value between 0-100 (default: 100)
109
- // @throws {Error} - If provided parameters fail validation through val.* functions
110
- //
111
- // @example scss
112
- // // Apply primary color as text color with 50% opacity
113
- // @include useColorProperty("color-1", null, "color", $primaryColor, $colorsMap, 50);
114
- //
115
- // // Apply primary color as background with full opacity
116
- // @include useColorProperty("bg\:color-1", "bg", "background-color", $primaryColor, $colorsMap);
117
- //
118
- // Generated Selectors:
119
- // Each call to this mixin generates three CSS selectors to support different theming approaches:
120
- //
121
- // 1. Parent/child relationship: `.light .className`, `.dark .className`
122
- // For theme inheritance from parent elements
123
- // Example: <div class="light"><span class="color-1">Themed text</span></div>
124
- //
125
- // 2. Modifier class: `.className.light`, `.className.dark`
126
- // For direct theme application to the element itself
127
- // Example: <span class="color-1 light">Themed text</span>
128
- //
129
- // 3. Prefixed class: `.light\:className`, `.dark\:className`
130
- // For utility-first CSS approaches
131
- // Example: <span class="light\:color-1">Themed text</span>
132
- //
133
- // Note: When light and dark variants are identical, a single class without theme
134
- // modifiers is generated to reduce CSS output size.
135
- @mixin useColorProperty($colorClass, $class, $property, $color, $map, $opacity: 100) {
136
- // Validate parameters
137
- $checkedClass: val.colorClass($class, 'useColorProperty().class');
138
- $checkedProperty: val.colorProperty($property, 'useColorProperty().property');
139
- $checkedMap: val.map($map, 'useColorProperty().map');
140
- $checkedOpacity: val.colorOpacity($opacity, 'useColorProperty().opacity');
141
- $checkedLight: val.mapItem($color, 'light', 'light/dark', 'useColorProperty().color');
142
- $checkedDark: val.mapItem($color, 'dark', 'light/dark', 'useColorProperty().color');
143
-
144
- $light: map.get($color, 'light');
145
- $dark: map.get($color, 'dark');
146
-
147
- $checkedLightValue: val.hexColor('#{$colorClass}.light', $light, 'root-colors()');
148
- $checkedDarkValue: val.hexColor('#{$colorClass}.dark', $dark, 'root-colors()');
149
-
150
- @if $light and $dark and $dark != $light {
151
- @if ($useColorsLightMode) {
152
- .light .#{$colorClass},
153
- .#{$colorClass}.light,
154
- .light\:#{$colorClass} {
155
- #{$property}: useColor($color, 'light', $opacity);
156
- }
157
- }
158
-
159
- @if ($useColorsDarkMode) {
160
- .dark .#{$colorClass},
161
- .#{$colorClass}.dark,
162
- .dark\:#{$colorClass} {
163
- #{$property}: useColor($color, 'dark', $opacity);
164
- }
165
- }
166
- } @else {
167
- .#{$colorClass} {
168
- #{$property}: useColor($color, if($light, 'light', 'dark'), $opacity);
169
- }
170
- }
171
- }
172
-
173
- // Use Colors Map ----- ----- ----- -----
174
- //
175
- // @mixin useColorsMap
176
- // --------------------------------------
177
- // Creates color utility classes using useColor() function for theme variant handling
178
- // @param {Map} $map - The color map to use (e.g., $colors)
179
- // @param {Boolean} $withOpacity - Whether to generate opacity variants (default: true)
180
- // @throws {Error} - If $map is not a valid map
181
- //
182
- // @example scss
183
- // @include useColorsMap($themeColors);
184
- // // Creates all color classes with theme support
185
- // // Generated classes include:
186
- // // .color-[colorName], .bg-color-[colorName], .border-color-[colorName]
187
- // // With theme variants like .light, .dark
188
- // // With optional opacity variants like :50, :75
189
- // // With pseudo-class variants like :hover, :focus
190
- //
191
- @mixin useColorsMap($map: $colors, $withOpacity: true) {
192
- // Validate parameters
193
- $checkedMap: val.map($map, 'useColorsMap()');
194
- $checkedWithOpacity: val.boolean($withOpacity, 'useColorsMap()');
195
-
196
- @each $color, $modes in $checkedMap {
197
- @if $color {
198
- @each $class, $property in configs.$colorsPropertiesMap {
199
- $mainClass: if($class, '#{$class}#{\:}color-#{$color}', 'color-#{$color}');
200
-
201
- @include useColorProperty($mainClass, $class, $property, $modes, $map);
202
-
203
- @if $checkedWithOpacity and $useColorsOpacities {
204
- @each $opacity in $opacities {
205
- @include useColorProperty('#{$mainClass}#{\:}#{$opacity}', $class, $property, $modes, $map, $opacity);
206
- }
207
- }
208
-
209
- @each $pseudoClass, $pseudo in configs.$colorsPseudoMap {
210
- @if $pseudoClass != 'placeholder' or ($pseudoClass == 'placeholder' and $class == null) {
211
- @include useColorProperty('#{$mainClass}#{\:}#{$pseudoClass}#{$pseudo}', $class, $property, $modes, $map);
212
-
213
- @if $checkedWithOpacity and $useColorsOpacities {
214
- @each $opacity in $opacities {
215
- @include useColorProperty(
216
- '#{$mainClass}#{\:}#{$opacity}#{\:}#{$pseudoClass}#{$pseudo}',
217
- $class,
218
- $property,
219
- $modes,
220
- $map,
221
- $opacity
222
- );
223
- }
224
- }
225
- }
226
- }
227
- }
228
- }
229
- }
230
- }
1
+ @use 'sass:color';
2
+ @use 'sass:math';
3
+ @use 'sass:list';
4
+ @use 'sass:map';
5
+ @use '../settings/configs' as configs;
6
+ @use '../settings/index' as settings;
7
+ @use '../variables' as vars;
8
+ @use '../settings/defaults' as defs;
9
+ @use '../functions/validations' as val;
10
+
11
+ // Definitions
12
+ $colors: if(
13
+ sass(vars.$colors != null): vars.$colors; else: defs.$colors
14
+ );
15
+ $opacities: if(
16
+ sass(vars.$opacities != null): vars.$opacities; else: defs.$opacities
17
+ );
18
+ $useColorsLightMode: if(
19
+ sass(vars.$useColorsLightMode != null): vars.$useColorsLightMode; else: settings.$useColorsLightMode
20
+ );
21
+ $useColorsDarkMode: if(
22
+ sass(vars.$useColorsDarkMode != null): vars.$useColorsDarkMode; else: settings.$useColorsDarkMode
23
+ );
24
+ $useColorsOpacities: if(
25
+ sass(vars.$useColorsOpacities != null): vars.$useColorsOpacities; else: settings.$useColorsOpacities
26
+ );
27
+
28
+ // Color Convertors ----- ----- ----- -----
29
+ //
30
+ // @function hexToRgba
31
+ // --------------------------------------
32
+ // Converts a hex color value to RGBA format
33
+ //
34
+ // @param {Color} $color - The hex color to convert (e.g. '#ffffff' or '#fff')
35
+ // @param {Number} $opacity - Optional opacity value between 0 and 1 (default: 1)
36
+ // @return {Color} - The color in rgba() format
37
+ //
38
+ // @example scss
39
+ // color: hexToRgba('#ffffff');
40
+ // // Returns rgba(255, 255, 255, 1)
41
+ // color: hexToRgba('#ffffff', 0.5);
42
+ // // Returns rgba(255, 255, 255, 0.5)
43
+ // color: hexToRgba('#ffffff80');
44
+ // // Returns rgba(255, 255, 255, 0.5)
45
+ //
46
+ @function hexToRgba($color, $opacity: 1, $debugIn: null) {
47
+ // Validate parameters
48
+ $checkedColor: val.hexColor('color', $color, 'hexToRgba().#{$debugIn}');
49
+ $checkedOpacity: val.opacity($opacity, 'hexToRgba().#{$debugIn}');
50
+
51
+ @return rgba(
52
+ color.channel($checkedColor, 'red', $space: rgb),
53
+ color.channel($checkedColor, 'green', $space: rgb),
54
+ color.channel($checkedColor, 'blue', $space: rgb),
55
+ $checkedOpacity
56
+ );
57
+ }
58
+
59
+ // Use Color ----- ----- ----- -----
60
+ //
61
+ // @function useColor
62
+ // --------------------------------------
63
+ // Retrieves a color from any color map with optional variant and opacity
64
+ //
65
+ // @param {String} $color - The color key to retrieve from the map
66
+ // @param {String} $mode - Optional mode, must be 'light' or 'dark' (default: 'light')
67
+ // @param {Number} $opacity - Optional opacity value between 0 and 100 (default: 100)
68
+ // @param {Map} $map - Optional color map to use (defaults to $colors)
69
+ // @return {Color} - The color value, possibly with applied opacity
70
+ // @throws {Error} - If mode is provided but isn't 'light' or 'dark'
71
+ // @throws {Error} - If opacity is provided but isn't a number between 0 and 100
72
+ //
73
+ // @example scss
74
+ // // Using default color map ($colors)
75
+ // color: useColor('primary', 'light', 0.5);
76
+ // // Returns the light variant of primary color with 50% opacity
77
+ //
78
+ // // Using a custom color map
79
+ // color: useColor('secondary', 'dark', null, $customMap);
80
+ // // Returns the dark variant of secondary color from custom map
81
+ //
82
+ @function useColor($color, $mode: 'light', $opacity: 100) {
83
+ // Validate parameters
84
+ $checkedMode: val.colorMode($mode, 'useColor()');
85
+ $checkedOpacity: val.colorOpacity($opacity, 'useColor()');
86
+
87
+ @if $color {
88
+ $value: map.get($color, $mode);
89
+
90
+ @if $checkedOpacity {
91
+ @return hexToRgba($value, math.div($opacity, 100), 'useColor().#{$value}');
92
+ } @else {
93
+ @return $value;
94
+ }
95
+ } @else {
96
+ @return null;
97
+ }
98
+ }
99
+
100
+ @function useColorWithMap($color, $mode: 'light', $opacity: 100, $map: $colors) {
101
+ // Validate parameters
102
+ $checkedMap: val.map($map, 'useColorWithMap().map');
103
+
104
+ $colorValue: map.get($checkedMap, $color);
105
+ @return useColor($colorValue, $mode, $opacity);
106
+ }
107
+
108
+ // @mixin useColorProperty
109
+ // --------------------------------------
110
+ // Applies color properties with theme variant support while handling light/dark themes
111
+ // and creating appropriate CSS selectors for different use cases.
112
+ //
113
+ // @param {String} $colorClass - The CSS class name to apply the color to (e.g., 'color-1', 'bg\:color-1')
114
+ // @param {String|Null} $class - The CSS class prefix (e.g., 'bg', 'border', null for 'color')
115
+ // @param {String} $property - The CSS property to set (e.g., 'color', 'background-color')
116
+ // @param {Map} $color - The color map with light/dark variants
117
+ // @param {Map} $map - The parent color map containing all colors
118
+ // @param {Number} $opacity - Optional opacity value between 0-100 (default: 100)
119
+ // @throws {Error} - If provided parameters fail validation through val.* functions
120
+ //
121
+ // @example scss
122
+ // // Apply primary color as text color with 50% opacity
123
+ // @include useColorProperty("color-1", null, "color", $primaryColor, $colorsMap, 50);
124
+ //
125
+ // // Apply primary color as background with full opacity
126
+ // @include useColorProperty("bg\:color-1", "bg", "background-color", $primaryColor, $colorsMap);
127
+ //
128
+ // Generated Selectors:
129
+ // Each call to this mixin generates three CSS selectors to support different theming approaches:
130
+ //
131
+ // 1. Parent/child relationship: `.light .className`, `.dark .className`
132
+ // For theme inheritance from parent elements
133
+ // Example: <div class="light"><span class="color-1">Themed text</span></div>
134
+ //
135
+ // 2. Modifier class: `.className.light`, `.className.dark`
136
+ // For direct theme application to the element itself
137
+ // Example: <span class="color-1 light">Themed text</span>
138
+ //
139
+ // 3. Prefixed class: `.light\:className`, `.dark\:className`
140
+ // For utility-first CSS approaches
141
+ // Example: <span class="light\:color-1">Themed text</span>
142
+ //
143
+ // Note: When light and dark variants are identical, a single class without theme
144
+ // modifiers is generated to reduce CSS output size.
145
+ @mixin useColorProperty($colorClass, $class, $property, $color, $map, $opacity: 100) {
146
+ // Validate parameters
147
+ $checkedClass: val.colorClass($class, 'useColorProperty().class');
148
+ $checkedProperty: val.colorProperty($property, 'useColorProperty().property');
149
+ $checkedMap: val.map($map, 'useColorProperty().map');
150
+ $checkedOpacity: val.colorOpacity($opacity, 'useColorProperty().opacity');
151
+ $checkedLight: val.mapItem($color, 'light', 'light/dark', 'useColorProperty().color');
152
+ $checkedDark: val.mapItem($color, 'dark', 'light/dark', 'useColorProperty().color');
153
+
154
+ $light: map.get($color, 'light');
155
+ $dark: map.get($color, 'dark');
156
+
157
+ $checkedLightValue: val.hexColor('#{$colorClass}.light', $light, 'root-colors()');
158
+ $checkedDarkValue: val.hexColor('#{$colorClass}.dark', $dark, 'root-colors()');
159
+
160
+ @if $light and $dark and $dark != $light {
161
+ @if ($useColorsLightMode) {
162
+ .light .#{$colorClass},
163
+ .#{$colorClass}.light,
164
+ .light\:#{$colorClass} {
165
+ #{$property}: useColor($color, 'light', $opacity);
166
+ }
167
+ }
168
+
169
+ @if ($useColorsDarkMode) {
170
+ .dark .#{$colorClass},
171
+ .#{$colorClass}.dark,
172
+ .dark\:#{$colorClass} {
173
+ #{$property}: useColor($color, 'dark', $opacity);
174
+ }
175
+ }
176
+ } @else {
177
+ .#{$colorClass} {
178
+ #{$property}: useColor($color, if(sass($light): 'light' ; else: 'dark'), $opacity);
179
+ }
180
+ }
181
+ }
182
+
183
+ // Use Colors Map ----- ----- ----- -----
184
+ //
185
+ // @mixin useColorsMap
186
+ // --------------------------------------
187
+ // Creates color utility classes using useColor() function for theme variant handling
188
+ // @param {Map} $map - The color map to use (e.g., $colors)
189
+ // @param {Boolean} $withOpacity - Whether to generate opacity variants (default: true)
190
+ // @throws {Error} - If $map is not a valid map
191
+ //
192
+ // @example scss
193
+ // @include useColorsMap($themeColors);
194
+ // // Creates all color classes with theme support
195
+ // // Generated classes include:
196
+ // // .color-[colorName], .bg-color-[colorName], .border-color-[colorName]
197
+ // // With theme variants like .light, .dark
198
+ // // With optional opacity variants like :50, :75
199
+ // // With pseudo-class variants like :hover, :focus
200
+ //
201
+ @mixin useColorsMap($map: $colors, $withOpacity: true) {
202
+ // Validate parameters
203
+ $checkedMap: val.map($map, 'useColorsMap()');
204
+ $checkedWithOpacity: val.boolean($withOpacity, 'useColorsMap()');
205
+
206
+ @each $color, $modes in $checkedMap {
207
+ @if $color {
208
+ @each $class, $property in configs.$colorsPropertiesMap {
209
+ $mainClass: if(
210
+ sass($class): '#{$class}#{\:}color-#{$color}' ; else: 'color-#{$color}'
211
+ );
212
+
213
+ @include useColorProperty($mainClass, $class, $property, $modes, $map);
214
+
215
+ @if $checkedWithOpacity and $useColorsOpacities {
216
+ @each $opacity in $opacities {
217
+ @include useColorProperty('#{$mainClass}#{\:}#{$opacity}', $class, $property, $modes, $map, $opacity);
218
+ }
219
+ }
220
+
221
+ @each $pseudoClass, $pseudo in configs.$colorsPseudoMap {
222
+ @if $pseudoClass != 'placeholder' or ($pseudoClass == 'placeholder' and $class == null) {
223
+ @include useColorProperty('#{$mainClass}#{\:}#{$pseudoClass}#{$pseudo}', $class, $property, $modes, $map);
224
+
225
+ @if $checkedWithOpacity and $useColorsOpacities {
226
+ @each $opacity in $opacities {
227
+ @include useColorProperty(
228
+ '#{$mainClass}#{\:}#{$opacity}#{\:}#{$pseudoClass}#{$pseudo}',
229
+ $class,
230
+ $property,
231
+ $modes,
232
+ $map,
233
+ $opacity
234
+ );
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
242
+ }