beathers 5.0.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 (40) hide show
  1. package/dist/css/beathers-icons.min.css +1 -0
  2. package/dist/css/beathers-icons.min.css.map +1 -0
  3. package/dist/css/beathers.min.css +4 -0
  4. package/dist/css/beathers.min.css.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +2 -0
  7. package/dist/scripts/BuildScssVariables.d.ts +2 -0
  8. package/dist/scripts/BuildScssVariables.js +111 -0
  9. package/dist/scripts/BuildTheme.d.ts +1 -0
  10. package/dist/scripts/BuildTheme.js +99 -0
  11. package/dist/scripts/CallNewVariables.d.ts +1 -0
  12. package/dist/scripts/CallNewVariables.js +17 -0
  13. package/dist/scripts/LoadUserConfigs.d.ts +2 -0
  14. package/dist/scripts/LoadUserConfigs.js +42 -0
  15. package/dist/scripts/Merge.d.ts +2 -0
  16. package/dist/scripts/Merge.js +26 -0
  17. package/dist/scripts/ReadDefaultValues.d.ts +2 -0
  18. package/dist/scripts/ReadDefaultValues.js +168 -0
  19. package/dist/scripts/cli.d.ts +2 -0
  20. package/dist/scripts/cli.js +14 -0
  21. package/dist/scripts/types.d.ts +57 -0
  22. package/dist/scripts/types.js +1 -0
  23. package/package.json +84 -0
  24. package/readme.md +235 -0
  25. package/src/scss/_variables.scss +305 -0
  26. package/src/scss/beathers-icons.min.scss +265 -0
  27. package/src/scss/beathers.min.scss +13 -0
  28. package/src/scss/functions/_colors.scss +232 -0
  29. package/src/scss/functions/_mediaQueries.scss +128 -0
  30. package/src/scss/functions/_others.scss +83 -0
  31. package/src/scss/functions/_typographic.scss +125 -0
  32. package/src/scss/functions/_validations.scss +256 -0
  33. package/src/scss/settings/_configs.scss +366 -0
  34. package/src/scss/settings/_defaults.scss +251 -0
  35. package/src/scss/settings/_index.scss +68 -0
  36. package/src/scss/settings/_resets.scss +103 -0
  37. package/src/scss/style/_colors.scss +139 -0
  38. package/src/scss/style/_grid.scss +92 -0
  39. package/src/scss/style/_shaping.scss +372 -0
  40. package/src/scss/style/_typographic.scss +304 -0
@@ -0,0 +1,103 @@
1
+ @use "./configs" as configs;
2
+ @use "../settings/defaults" as vars;
3
+ @use "../functions/colors" as colors;
4
+ @use "../settings/index" as settings;
5
+
6
+ html {
7
+ scroll-behavior: smooth;
8
+ interpolate-size: allow-keywords;
9
+ }
10
+
11
+ body {
12
+ position: relative;
13
+ font-family: "regular";
14
+ overflow-x: hidden;
15
+ }
16
+
17
+ *,
18
+ ::before,
19
+ ::after {
20
+ margin: 0;
21
+ padding: 0;
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ :focus,
26
+ button:focus {
27
+ outline: unset !important;
28
+ box-shadow: unset !important;
29
+ }
30
+
31
+ ul {
32
+ margin: unset;
33
+ list-style: none;
34
+ padding: 0;
35
+
36
+ li {
37
+ margin-bottom: unset;
38
+ }
39
+ }
40
+
41
+ a {
42
+ text-decoration: unset;
43
+ }
44
+
45
+ @if settings.$useColors {
46
+ @if settings.$useColorsLightMode {
47
+ .light::selection {
48
+ background-color: colors.useColorWithMap("custom-2");
49
+ color: colors.useColorWithMap("white");
50
+ }
51
+ }
52
+ @if settings.$useColorsDarkMode {
53
+ .dark::selection {
54
+ background-color: colors.useColorWithMap("custom-2", "dark");
55
+ color: colors.useColorWithMap("black");
56
+ }
57
+ }
58
+ }
59
+
60
+ ::-webkit-scrollbar {
61
+ width: 6px;
62
+
63
+ &-track {
64
+ background-color: transparent;
65
+ border-radius: unset;
66
+ }
67
+ &-thumb {
68
+ border-radius: 100vw;
69
+ }
70
+ }
71
+ @if settings.$useColors {
72
+ @if settings.$useColorsLightMode {
73
+ .light::-webkit-scrollbar-thumb {
74
+ background: colors.useColorWithMap("third");
75
+ }
76
+ }
77
+ @if settings.$useColorsDarkMode {
78
+ .dark::-webkit-scrollbar-thumb {
79
+ background: colors.useColorWithMap("third", "dark");
80
+ }
81
+ }
82
+ }
83
+
84
+ @each $option, $properties in configs.$clearanceOptions {
85
+ @each $property, $value in $properties {
86
+ .i\:#{$option} {
87
+ #{$property}: $value !important;
88
+ }
89
+ .#{$option} {
90
+ #{$property}: $value;
91
+ }
92
+ }
93
+ }
94
+
95
+ @each $cursor in configs.$cursors {
96
+ .cursor#{\:}#{$cursor} {
97
+ cursor: #{$cursor};
98
+ }
99
+ }
100
+
101
+ .scroll-smooth {
102
+ scroll-behavior: smooth;
103
+ }
@@ -0,0 +1,139 @@
1
+ @use "sass:map";
2
+ @use "../settings/defaults" as vars;
3
+ @use "../functions/validations" as val;
4
+ @use "../settings/configs" as configs;
5
+ @use "../functions/colors" as colors;
6
+ @use "../settings/index" as settings;
7
+
8
+ // Colors System Module
9
+ // --------------------------
10
+ // This file is responsible for generating color utility classes and CSS variables
11
+ // based on the color maps defined in the variables file.
12
+ //
13
+ // Key features:
14
+ // 1. Generates color utility classes from the main colors map
15
+ // 2. Creates currentColor utility classes
16
+ // 3. Sets up CSS variables for all defined colors
17
+ //
18
+ // The color system supports:
19
+ // - Light and dark mode theming
20
+ // - Opacity variations
21
+ // - Pseudo-class variants (:hover, :focus, etc.)
22
+ //
23
+ // @requires ../functions/colors.scss - For color utility functions and mixins
24
+ // @requires ../settings/configs.scss - For configuration variables
25
+ // @requires ../functions/validations.scss - For validation utilities
26
+ // @requires ../settings/defaults.scss - For color definitions
27
+
28
+ @if settings.$useColors {
29
+ // Color Utility Classes
30
+ // --------------------
31
+ // Generate color utility classes from the main colors map.
32
+ // Uses the useColorsMap mixin from colors functions to create a comprehensive
33
+ // set of color utilities for all the colors defined in vars.$colors.
34
+ //
35
+ // Generated classes include:
36
+ // - .color-[colorName] - Sets text color
37
+ // - .bg-color-[colorName] - Sets background color
38
+ // - .border-color-[colorName] - Sets border color
39
+ //
40
+ // With light/dark theme variants:
41
+ // - Automatically applies correct color based on .light/.dark context
42
+ // - Supports direct class application with .color-[colorName].light
43
+ //
44
+ // With opacity variants (e.g., :50 for 50% opacity):
45
+ // - .color-[colorName]:50
46
+ // - .bg-color-[colorName]:75
47
+ //
48
+ // With pseudo-class variants:
49
+ // - .color-[colorName]:hover
50
+ // - .bg-color-[colorName]:focus
51
+ @include colors.useColorsMap();
52
+ }
53
+
54
+ @if settings.$useCurrentColors {
55
+ // CurrentColor Utility Classes
56
+ // ----------------------------
57
+ // Creates utility classes for applying the CSS `currentColor` value to various CSS properties
58
+ // as defined in the configs.$colorsPropertiesMap.
59
+ //
60
+ // For each property in the map (color, background-color, border-color, etc.):
61
+ // - Creates a base class (.{property}-current-color)
62
+ // - Creates pseudo-class variants for interaction states
63
+ //
64
+ // Examples:
65
+ // - .current-color { color: currentColor; }
66
+ // - .bg-current-color { background-color: currentColor; }
67
+ // - .border-current-color { border-color: currentColor; }
68
+ // - .current-color\:hover:hover { color: currentColor; }
69
+ // - .bg-current-color\:focus:focus { background-color: currentColor; }
70
+ //
71
+ // Usage:
72
+ // <div class="current-color bg-current-color:hover">
73
+ // This text uses currentColor and background changes to currentColor on hover
74
+ // </div>
75
+ @each $class, $property in configs.$colorsPropertiesMap {
76
+ $mainClass: if($class, "#{$class}#{\:}current-color", "current-color");
77
+
78
+ .#{$mainClass} {
79
+ #{$property}: currentColor;
80
+
81
+ @each $pseudoClass, $pseudo in configs.$colorsPseudoMap {
82
+ @if $pseudoClass != "placeholder" or ($pseudoClass == "placeholder" and $class == null) {
83
+ &#{\:}#{$pseudoClass}#{$pseudo} {
84
+ #{$property}: currentColor;
85
+ }
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ @if settings.$useRootColors {
93
+ // CSS Color Variables
94
+ // ------------------
95
+ // Generates CSS custom properties (variables) for all colors in the vars.$colors map.
96
+ // These variables can be used throughout the application to ensure color consistency.
97
+ //
98
+ // The implementation:
99
+ // 1. Iterates through each color in the vars.$colors map
100
+ // 2. Validates the color values through val.mapItem and val.hexColor functions
101
+ // 3. Determines if light and dark variants are the same
102
+ // 4. Creates appropriate CSS variables based on variant differences
103
+ //
104
+ // Format:
105
+ // - For colors with light/dark variants: --color-{name}-{variant}: {color-value}
106
+ // - For colors without variants: --color-{name}: {color-value}
107
+ //
108
+ // Examples:
109
+ // --color-main-light: #ffffff
110
+ // --color-main-dark: #1a1d21
111
+ // --color-accent: #3498db (when light and dark variants are the same)
112
+ //
113
+ // Usage:
114
+ // .my-element {
115
+ // background-color: var(--color-main-light);
116
+ // color: var(--color-accent);
117
+ // }
118
+ :root {
119
+ @each $color, $modes in vars.$colors {
120
+ // Validate parameters
121
+ $checkedLight: val.mapItem($modes, "light", "light/dark", "root-colors()");
122
+ $checkedDark: val.mapItem($modes, "dark", "light/dark", "root-colors()");
123
+
124
+ $light: map.get($modes, "light");
125
+ $dark: map.get($modes, "dark");
126
+
127
+ // Validate colors
128
+ $checkedLightValue: val.hexColor("#{$color}.light", $light, "root-colors()");
129
+ $checkedDarkValue: val.hexColor("#{$color}.dark", $dark, "root-colors()");
130
+
131
+ @if ($light == $dark) {
132
+ --color-#{$color}: #{$checkedLightValue};
133
+ } @else {
134
+ --color-#{$color}-light: #{$checkedLightValue};
135
+ --color-#{$color}-dark: #{$checkedDarkValue};
136
+ }
137
+ }
138
+ }
139
+ }
@@ -0,0 +1,92 @@
1
+ @use "../functions/mediaQueries" as mQ;
2
+ @use "../settings/configs" as configs;
3
+ @use "../functions/validations" as val;
4
+ @use "../settings/index" as settings;
5
+ @use "../functions/others" as func;
6
+
7
+ @if settings.$useGrid {
8
+ .grid {
9
+ display: grid;
10
+
11
+ @include mQ.multiSizes() using ($size, $divider) {
12
+ @include func.gridDivision(column, $size, $divider);
13
+ @include func.gridDivision(row, $size, $divider);
14
+ }
15
+ }
16
+ }
17
+
18
+ @if settings.$useFlex {
19
+ .flex {
20
+ display: flex;
21
+ flex-direction: row;
22
+ flex-wrap: wrap;
23
+
24
+ @include mQ.multiSizes() using ($size, $divider) {
25
+ @each $property, $values in configs.$flexProperties {
26
+ // Validate parameters
27
+ $checkedProperty: val.listItem((flex-wrap, flex-direction), $property, "flex.properties");
28
+
29
+ @each $value in $values {
30
+ // Validate parameters
31
+ $checkedProperty: val.listItem(
32
+ (wrap, nowrap, row, row-reverse, column, column-reverse),
33
+ $value,
34
+ "flex.properties.values"
35
+ );
36
+
37
+ $mainClass: if($size, #{$size}#{$divider}#{$value}, $value);
38
+
39
+ &.#{$mainClass} {
40
+ #{$property}: if($size, $value !important, $value);
41
+ }
42
+ }
43
+ }
44
+
45
+ &.row,
46
+ &.row-reverse {
47
+ @include func.flexDivision(width, "cols", $size, $divider);
48
+ @include func.flexDivision(width, "col", $size, $divider);
49
+ }
50
+ &.column,
51
+ &.column-reverse {
52
+ @include func.flexDivision(height, "rows", $size, $divider);
53
+ @include func.flexDivision(height, "row", $size, $divider);
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ @if settings.$useFlex or settings.$useGrid {
60
+ @include mQ.multiSizes() using ($size, $divider) {
61
+ @each $way, $selections in configs.$justify {
62
+ @each $selection, $properties in $selections {
63
+ @each $property in $properties {
64
+ $mainClass: if(
65
+ $size,
66
+ "#{$size}#{$divider}#{$way}-#{$selection}#{\:}",
67
+ "#{$way}-#{$selection}#{\:}"
68
+ );
69
+
70
+ .#{$mainClass} {
71
+ $prefix: if(
72
+ $property == "around" or $property == "between" or $property == "evenly",
73
+ "space-",
74
+ ""
75
+ );
76
+ $flexPrefix: if($property == "start" or $property == "end", "flex-", "");
77
+ $value: #{$prefix}#{$property};
78
+ $flexValue: #{$flexPrefix}#{$value};
79
+
80
+ &#{$property} {
81
+ &.flex {
82
+ #{$way}-#{$selection}: if($size, $flexValue !important, $flexValue);
83
+ }
84
+
85
+ #{$way}-#{$selection}: if($size, $value !important, $value);
86
+ }
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,372 @@
1
+ @use "sass:map";
2
+ @use "sass:list";
3
+ @use "sass:math";
4
+ @use "../functions/mediaQueries" as mQ;
5
+ @use "../settings/configs" as configs;
6
+ @use "../functions/validations" as val;
7
+ @use "../settings/index" as settings;
8
+ @use "../functions/others" as func;
9
+
10
+ @if settings.$useWrappers {
11
+ @each $wSize, $properties in configs.$wrappers {
12
+ $mainWSize: if($wSize, "#{$wSize}#{\:}wrapper", "wrapper");
13
+
14
+ $size: list.nth($properties, 1);
15
+ $padding: if(list.nth($properties, 2), list.nth($properties, 2), 0);
16
+
17
+ // Validate parameters
18
+ $checkedSize: val.notNull($size, "Wrappers.size");
19
+
20
+ .#{$mainWSize} {
21
+ width: 100%;
22
+
23
+ @if ($padding != 0) {
24
+ padding-inline: $padding;
25
+ }
26
+
27
+ @include mQ.mQ(min, md) {
28
+ padding-inline: calc((100% - #{$size}) / 2 + $padding);
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ @if settings.$useShadows {
35
+ @include mQ.multiSizes() using ($size, $divider) {
36
+ @each $class, $values in configs.$shadows {
37
+ $x: map.get($values, x);
38
+ $y: map.get($values, y);
39
+ $blur: map.get($values, blur);
40
+ $spread: map.get($values, spread);
41
+ $opacity: map.get($values, opacity);
42
+
43
+ // Validate parameters
44
+ $checkedX: val.number($x, "Shadows.x");
45
+ $checkedY: val.number($y, "Shadows.y");
46
+ $checkedBlur: val.number($blur, "Shadows.blur");
47
+ $checkedSpread: val.number($spread, "Shadows.spread");
48
+ $checkedOpacity: val.opacity($opacity, "Shadows.opacity");
49
+
50
+ $mainClass: if($size, "#{$size}#{$divider}divider-#{$class}", "divider-#{$class}");
51
+
52
+ .#{$mainClass} {
53
+ box-shadow: func.shadowValue($x)
54
+ func.shadowValue($y)
55
+ func.shadowValue($blur)
56
+ func.shadowValue($spread)
57
+ rgba(0, 0, 0, $opacity);
58
+ }
59
+ }
60
+ }
61
+ }
62
+
63
+ @if settings.$useDisplays {
64
+ @include mQ.multiSizes() using ($size, $divider) {
65
+ @each $display in configs.$displays {
66
+ // Validate parameters
67
+ $checkedDisplay: val.listItem(configs.$displays, $display, "Shaping.displays");
68
+
69
+ $mainClass: if($size, "#{$size}#{$divider}d-#{$display}", "d-#{$display}");
70
+
71
+ .#{$mainClass} {
72
+ display: if($size, $display !important, $display);
73
+ }
74
+ }
75
+ }
76
+ }
77
+
78
+ @if settings.$useOverflows {
79
+ @include mQ.multiSizes() using ($size, $divider) {
80
+ @each $dir in configs.$overflowsDirections {
81
+ // Validate parameters
82
+ @if $dir {
83
+ $checkedDir: val.listItem(("x", "y"), $dir, "Shaping.overflow.direction");
84
+ }
85
+
86
+ $dirClass: if($dir, "#{$dir}#{\:}overflow", "overflow");
87
+ $mainClass: if($size, "#{$size}#{$divider}#{$dirClass}", $dirClass);
88
+ $property: if($dir, "overflow-#{$dir}", "overflow");
89
+
90
+ .#{$mainClass} {
91
+ @each $value in configs.$overflows {
92
+ // Validate parameters
93
+ $checkedClass: val.listItem(configs.$overflows, $value, "Shaping.overflow.value");
94
+
95
+ &-#{$value} {
96
+ #{$property}: if($size, $value !important, $value);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+
104
+ @if settings.$useOpacities {
105
+ @include mQ.multiSizes() using ($size, $divider) {
106
+ @each $value in configs.$opacities {
107
+ $checkedValue: val.opacity(math.div($value, 100), "Shaping.opacity");
108
+
109
+ $mainClass: if($size, "#{$size}#{$divider}op", "op");
110
+
111
+ .#{$mainClass}#{\:}#{$value} {
112
+ opacity: if($size, $checkedValue !important, $checkedValue);
113
+
114
+ &#{\:}hover:hover {
115
+ opacity: if($size, $checkedValue !important, $checkedValue);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+
122
+ @if settings.$useBlur {
123
+ @include mQ.multiSizes() using ($size, $divider) {
124
+ @each $value in configs.$blurValues {
125
+ $checkedValue: val.listItem(configs.$blurValues, $value, "Shaping.blur");
126
+
127
+ $mainClass: if($size, "#{$size}#{$divider}bg#{\:}blur", "bg#{\:}blur");
128
+ $calcValue: blur(#{$checkedValue}#{px});
129
+
130
+ .#{$mainClass}#{\:}#{$value} {
131
+ backdrop-filter: if($size, $calcValue !important, $calcValue);
132
+
133
+ &#{\:}hover:hover {
134
+ backdrop-filter: if($size, $calcValue !important, $calcValue);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+
141
+ @if settings.$useObjectFits {
142
+ @include mQ.multiSizes() using ($size, $divider) {
143
+ @each $fit in configs.$objectsFits {
144
+ // Validate parameters
145
+ $checkedFit: val.listItem(configs.$objectsFits, $fit, "Shaping.objectFit");
146
+
147
+ $mainClass: if($size, "#{$size}#{$divider}object-fit", "object-fit");
148
+
149
+ .#{$mainClass}#{\:}#{$fit} {
150
+ object-fit: if($size, $fit !important, $fit);
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ @if settings.$usePositions {
157
+ @include mQ.multiSizes() using ($size, $divider) {
158
+ @each $position in configs.$positions {
159
+ // Validate parameters
160
+ $checkedPosition: val.listItem(configs.$positions, $position, "Shaping.position");
161
+
162
+ $mainClass: if($size, "#{$size}#{$divider}p-", "p-");
163
+
164
+ .#{$mainClass}#{$position} {
165
+ position: if($size, $position !important, $position);
166
+ }
167
+ }
168
+ }
169
+ }
170
+
171
+ @if settings.$useInsets {
172
+ @include mQ.multiSizes() using ($size, $divider) {
173
+ @each $value in configs.$insetValues {
174
+ @each $position in configs.$insetPositions {
175
+ // Validate parameters
176
+ $checkedPosition: val.listItem(configs.$insetPositions, $position, "Shaping.inset");
177
+
178
+ $mainClass: if($size, "#{$size}#{$divider}inset", "inset");
179
+ $posClass: if($position, "#{$mainClass}-#{$position}", "#{$mainClass}");
180
+ $property: if($position, "inset-#{$position}", "inset");
181
+ $val: if($value == 0, "full", $value);
182
+
183
+ .#{$posClass}#{\:}#{$val} {
184
+ #{$property}: $value;
185
+ }
186
+ }
187
+ }
188
+ }
189
+ }
190
+
191
+ @if settings.$useSizes {
192
+ @include mQ.multiSizes() using ($size, $divider) {
193
+ @each $dir, $direction in configs.$spacesDirections {
194
+ // Validate parameters
195
+ $checkedDir: val.listItem(
196
+ ("w", "min#{\:}w", "max#{\:}w", "h", "min#{\:}h", "max#{\:}h"),
197
+ $dir,
198
+ "Shaping.space.direction"
199
+ );
200
+ $checkedDirection: val.listItem(
201
+ ("width", "min-width", "max-width", "height", "min-height", "max-height"),
202
+ $direction,
203
+ "Shaping.space.direction"
204
+ );
205
+ $checkedStep: val.number(configs.$spacesStep, "Shaping.space.step");
206
+
207
+ $mainClass: if($size, #{$size}#{$divider}#{$dir}, $dir);
208
+
209
+ .#{$mainClass} {
210
+ @for $i from 0 through 100 {
211
+ $value: $i * $checkedStep;
212
+
213
+ @if ($value != 0) and ($value % $checkedStep == 0) and ($value <= 100) {
214
+ &#{\:}#{$value} {
215
+ #{$direction}: if($size, #{$value}#{"%"} !important, #{$value}#{"%"});
216
+ }
217
+ }
218
+ }
219
+ }
220
+ }
221
+ }
222
+ }
223
+
224
+ @if settings.$useGutters {
225
+ @include mQ.multiSizes() using ($size, $divider) {
226
+ @each $class, $property in configs.$gutters {
227
+ // Validate parameters
228
+ $checkedClass: val.listItem(
229
+ (p, px, py, ps, pe, pt, pb, m, mx, my, ms, me, mt, mb, g, gx, gy),
230
+ $class,
231
+ "Shaping.gutter.class"
232
+ );
233
+ $checkedProperty: val.listItem(
234
+ (
235
+ padding,
236
+ padding-inline,
237
+ padding-block,
238
+ padding-inline-start,
239
+ padding-inline-end,
240
+ padding-block-start,
241
+ padding-block-end,
242
+ margin,
243
+ margin-inline,
244
+ margin-block,
245
+ margin-inline-start,
246
+ margin-inline-end,
247
+ margin-block-start,
248
+ margin-block-end,
249
+ gap,
250
+ column-gap,
251
+ row-gap
252
+ ),
253
+ $property,
254
+ "Shaping.gutter.property"
255
+ );
256
+
257
+ $mainClass: if($size, #{$size}#{$divider}#{$class}, $class);
258
+
259
+ .#{$mainClass} {
260
+ @each $vClass, $value in configs.$guttersValues {
261
+ &-#{$vClass} {
262
+ @if $size {
263
+ #{$property}: if($size, $value !important, $value);
264
+ } @else {
265
+ #{$property}: $value;
266
+
267
+ &\:i {
268
+ #{$property}: $value !important;
269
+ }
270
+ }
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+ @if settings.$useBorders {
279
+ @include mQ.multiSizes() using ($size, $divider) {
280
+ @for $i from 1 through configs.$bordersValue {
281
+ @each $dir, $property in configs.$bordersDirections {
282
+ // Validate parameters
283
+ $checkedDir: val.listItem((null, "top", "bottom", "start", "end"), $dir, "Shaping.borders");
284
+ $checkedProperty: val.listItem(
285
+ (border, border-block-start, border-block-end, border-inline-start, border-inline-end),
286
+ $property,
287
+ "Shaping.borders"
288
+ );
289
+
290
+ $mainClass: if($size, "#{$size}#{$divider}border", "border");
291
+ $dirClass: if($dir, "#{$dir}#{\:}", $dir);
292
+
293
+ .#{$mainClass}#{\:}#{$dirClass}#{$i} {
294
+ #{$property}-width: if($size, #{$i}#{px} !important, #{$i}#{px});
295
+
296
+ @if not $size {
297
+ #{$property}-style: if($size, solid !important, solid);
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+
305
+ @if settings.$useTextBorders {
306
+ @include mQ.multiSizes() using ($size, $divider) {
307
+ @for $i from 1 through configs.$bordersValue {
308
+ $mainClass: if($size, "#{$size}#{$divider}stroke", "stroke");
309
+ $value: math.div($i, 10);
310
+
311
+ // Validate parameters
312
+ $checkedValue: val.number($value, "Shaping.textBorder");
313
+
314
+ .#{$mainClass}#{\:}#{$i} {
315
+ -webkit-text-stroke-width: if($size, #{$value}#{px} !important, #{$value}#{px});
316
+ }
317
+ }
318
+ }
319
+ }
320
+
321
+ @if settings.$useRadius {
322
+ @include mQ.multiSizes() using ($size, $divider) {
323
+ @each $dir, $properties in configs.$radiusDirection {
324
+ // Validate parameters
325
+ $checkedDir: val.listItem(
326
+ (
327
+ null,
328
+ "top",
329
+ "bottom",
330
+ "start",
331
+ "end",
332
+ "top-start",
333
+ "top-end",
334
+ "bottom-start",
335
+ "bottom-end"
336
+ ),
337
+ $dir,
338
+ "Shaping.radius.direction"
339
+ );
340
+
341
+ $mainClass: if($size, "#{$size}#{$divider}radius", "radius");
342
+ $dirClass: if($dir, "#{$dir}#{\:}", $dir);
343
+
344
+ @each $property in $properties {
345
+ .#{$mainClass}#{\:}#{$dirClass} {
346
+ &full {
347
+ #{$property}: if($size, 100vw !important, 100vw);
348
+ }
349
+
350
+ @each $value in configs.$radiuses {
351
+ // Validate parameters
352
+ $checkedProperty: val.listItem(
353
+ (
354
+ border-radius,
355
+ border-start-start-radius,
356
+ border-start-end-radius,
357
+ border-end-start-radius,
358
+ border-end-end-radius
359
+ ),
360
+ $property,
361
+ "Shaping.radius.property"
362
+ );
363
+
364
+ &#{$value} {
365
+ #{$property}: if($size, #{$value}#{px} !important, #{$value}#{"px"});
366
+ }
367
+ }
368
+ }
369
+ }
370
+ }
371
+ }
372
+ }