@nappr/nappr-styles 0.3.2 → 0.3.5

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 (125) hide show
  1. package/README.md +33 -20
  2. package/dist/styles.css +7745 -1
  3. package/dist/styles.css.map +1 -1
  4. package/dist/styles.min.css +3 -0
  5. package/dist/styles.min.css.map +1 -0
  6. package/docs/_coverpage.md +2 -2
  7. package/docs/_sidebar.md +2 -2
  8. package/docs/docs.theme.css +2 -1
  9. package/docs/docs.theme.css.map +1 -1
  10. package/docs/index.html +1 -1
  11. package/docs/pages/displays.md +26 -8
  12. package/docs/pages/grid.md +365 -0
  13. package/docs/pages/helpers.md +30 -18
  14. package/docs/pages/quick-start.md +100 -14
  15. package/docs/temp.scss +122 -0
  16. package/index.d.ts +25 -0
  17. package/package.json +49 -14
  18. package/sass/_globals.module.scss +43 -0
  19. package/sass/_globals.scss +79 -0
  20. package/sass/components/_.scss +2 -0
  21. package/sass/components/_badge.scss +58 -0
  22. package/sass/components/_button.scss +244 -0
  23. package/sass/components/_nav.scss +95 -0
  24. package/sass/components/scrollbar/_.scss +102 -0
  25. package/sass/configs/_.scss +7 -0
  26. package/sass/configs/_breakpoints.scss +12 -0
  27. package/sass/configs/_defaults.scss +6 -0
  28. package/sass/configs/_grid.scss +10 -0
  29. package/sass/configs/_palettes.scss +72 -0
  30. package/sass/configs/_spacing.scss +36 -0
  31. package/sass/configs/_text.scss +39 -0
  32. package/sass/configs/_themes.scss +24 -0
  33. package/sass/core/funcs/_list.scss +43 -0
  34. package/sass/core/funcs/_map.scss +42 -0
  35. package/sass/core/funcs/_math.scss +35 -0
  36. package/sass/core/funcs/_string.scss +47 -0
  37. package/sass/core/mixins/_.scss +3 -0
  38. package/{lib → sass/core}/mixins/_links.scss +2 -2
  39. package/sass/core/mixins/_media-queries.scss +22 -0
  40. package/sass/core/mixins/_typography.scss +26 -0
  41. package/sass/core/placeholders/_.scss +4 -0
  42. package/sass/core/placeholders/_dimensions.scss +31 -0
  43. package/sass/core/placeholders/_flexbox.scss +11 -0
  44. package/sass/core/placeholders/_lists.scss +41 -0
  45. package/sass/core/placeholders/_positions.scss +19 -0
  46. package/sass/core/placeholders/_typography.scss +10 -0
  47. package/sass/elements/_.scss +6 -0
  48. package/sass/elements/_dialog.scss +13 -0
  49. package/{lib/htmls → sass/elements}/_form.scss +28 -6
  50. package/sass/elements/_links.scss +132 -0
  51. package/sass/elements/_lists.scss +11 -0
  52. package/{lib/htmls → sass/elements}/_table.scss +2 -6
  53. package/sass/elements/_typography.scss +13 -0
  54. package/sass/layout/grid/_.scss +4 -0
  55. package/sass/layout/grid/_columns.scss +32 -0
  56. package/sass/layout/grid/_gaps.scss +42 -0
  57. package/sass/layout/grid/_grid.scss +158 -0
  58. package/sass/layout/grid/_offsets.scss +35 -0
  59. package/sass/main.scss +59 -0
  60. package/sass/resets/_.scss +5 -0
  61. package/sass/resets/_base.scss +69 -0
  62. package/sass/resets/_nappr.scss +83 -0
  63. package/sass/themes/_dark.scss +17 -0
  64. package/sass/themes/_dracula.scss +17 -0
  65. package/sass/themes/_github-light.scss +17 -0
  66. package/sass/themes/_light.scss +17 -0
  67. package/sass/themes/_monokai-pro.scss +17 -0
  68. package/sass/themes/_night-owl.scss +17 -0
  69. package/sass/themes/_nord.scss +17 -0
  70. package/sass/themes/_tokyo-night.scss +17 -0
  71. package/sass/utilities/_.scss +21 -0
  72. package/sass/utilities/_dimensions.scss +11 -0
  73. package/sass/utilities/_displays.scss +127 -0
  74. package/sass/utilities/_flexbox.scss +102 -0
  75. package/{lib/helpers → sass/utilities}/_floats.scss +10 -15
  76. package/sass/utilities/_lists.scss +86 -0
  77. package/sass/utilities/_negates.scss +121 -0
  78. package/sass/utilities/_palette.scss +11 -0
  79. package/sass/utilities/_scrolls.scss +78 -0
  80. package/sass/utilities/_spacers.scss +120 -0
  81. package/sass/utilities/_square-grid.scss +33 -0
  82. package/sass/utilities/_typography.scss +106 -0
  83. package/sass/utilities/_visibility.scss +60 -0
  84. package/sass/utilities/_wrap.scss +12 -0
  85. package/styles.scss +5 -1
  86. package/lib/_globals.scss +0 -16
  87. package/lib/_reset.scss +0 -223
  88. package/lib/customs/scrollbar.scss +0 -40
  89. package/lib/funcs/_.scss +0 -5
  90. package/lib/funcs/_get-color.scss +0 -3
  91. package/lib/funcs/_math.scss +0 -5
  92. package/lib/funcs/_merge-palette.scss +0 -12
  93. package/lib/funcs/_rem.scss +0 -104
  94. package/lib/funcs/_strings.scss +0 -35
  95. package/lib/grid/_.scss +0 -4
  96. package/lib/grid/_col.scss +0 -117
  97. package/lib/grid/_row.scss +0 -117
  98. package/lib/grid/_square.scss +0 -34
  99. package/lib/grid/_wrap.scss +0 -39
  100. package/lib/helpers/_.scss +0 -9
  101. package/lib/helpers/_displays.scss +0 -151
  102. package/lib/helpers/_flexbox.scss +0 -105
  103. package/lib/helpers/_margins.scss +0 -13
  104. package/lib/helpers/_negates.scss +0 -171
  105. package/lib/helpers/_scrolls.scss +0 -55
  106. package/lib/helpers/_texts.scss +0 -101
  107. package/lib/helpers/_visibility.scss +0 -34
  108. package/lib/htmls/_.scss +0 -4
  109. package/lib/htmls/_headings.scss +0 -29
  110. package/lib/htmls/_links.scss +0 -11
  111. package/lib/mixins/_.scss +0 -9
  112. package/lib/mixins/_border-radius.scss +0 -61
  113. package/lib/mixins/_border.scss +0 -48
  114. package/lib/mixins/_dimensions.scss +0 -48
  115. package/lib/mixins/_font-size.scss +0 -22
  116. package/lib/mixins/_line-height.scss +0 -19
  117. package/lib/mixins/_margin-padding.scss +0 -66
  118. package/lib/mixins/_root-variables.scss +0 -11
  119. package/lib/mixins/_theme.scss +0 -25
  120. package/lib/styles.scss +0 -19
  121. package/lib/variables/_.scss +0 -4
  122. package/lib/variables/_breakpoints.scss +0 -5
  123. package/lib/variables/_colors.scss +0 -60
  124. package/lib/variables/_defaults.scss +0 -53
  125. /package/{lib/helpers → sass/utilities}/_pointers.scss +0 -0
@@ -0,0 +1,127 @@
1
+ @use '../core/placeholders/' as *;
2
+
3
+ // ==========================================================
4
+ // VERTICAL ALIGNMENT
5
+ // ==========================================================
6
+
7
+ @each $key in (top, middle, bottom, baseline, sub, super) {
8
+ .valign-#{$key} {
9
+ vertical-align: $key;
10
+ }
11
+ }
12
+
13
+ // ==========================================================
14
+ // DISPLAY TYPES
15
+ // ==========================================================
16
+
17
+ @each $key in (flex, grid, block, inline, inline-block, table, table-cell) {
18
+ .is-#{$key} {
19
+ display: $key;
20
+ }
21
+ }
22
+
23
+ // ==========================================================
24
+ // STRETCHING
25
+ // ==========================================================
26
+
27
+ .stretch-y {
28
+ bottom: 0;
29
+ top: 0;
30
+ }
31
+
32
+ .stretch-x {
33
+ left: 0;
34
+ right: 0;
35
+ }
36
+
37
+ // ==========================================================
38
+ // PLACEMENTS
39
+ // ==========================================================
40
+
41
+ @each $token,
42
+ $values
43
+ in (
44
+ 'tl': (
45
+ top,
46
+ left,
47
+ ),
48
+ 'br': (
49
+ bottom,
50
+ right,
51
+ ),
52
+ 'bl': (
53
+ bottom,
54
+ left,
55
+ ),
56
+ 'tr': (
57
+ top,
58
+ right,
59
+ )
60
+ )
61
+ {
62
+ .placement-#{$token} {
63
+ @each $value in $values {
64
+ #{$value}: 0;
65
+ }
66
+ }
67
+ }
68
+
69
+ // ==========================================================
70
+ // POSITIONING
71
+ // ==========================================================
72
+
73
+ @each $key in (relative, absolute, fixed, sticky) {
74
+ .is-#{$key} {
75
+ position: $key;
76
+ }
77
+ }
78
+
79
+ // ==========================================================
80
+ // COVERING and OVERLAYING
81
+ // ==========================================================
82
+
83
+ .is-cover {
84
+ @extend %is-all-edges;
85
+ }
86
+
87
+ .is-overlay {
88
+ @extend %is-all-edges;
89
+ @extend %position-absolute;
90
+ }
91
+
92
+ .is-overlay--fixed {
93
+ @extend %is-all-edges;
94
+ @extend %position-fixed;
95
+ }
96
+
97
+ // ==========================================================
98
+ // Layout
99
+ // ==========================================================
100
+
101
+ .is-layout-width {
102
+ @extend %is-full-width;
103
+ }
104
+
105
+ .is-layout-height {
106
+ @extend %is-full-height;
107
+ }
108
+
109
+ .is-layout {
110
+ @extend %is-full-layout;
111
+ }
112
+
113
+ // ==========================================================
114
+ // Viewport
115
+ // ==========================================================
116
+
117
+ .is-viewport-width {
118
+ @extend %is-viewport-width;
119
+ }
120
+
121
+ .is-viewport-height {
122
+ @extend %is-viewport-height;
123
+ }
124
+
125
+ .is-viewport {
126
+ @extend %is-viewport-layout;
127
+ }
@@ -0,0 +1,102 @@
1
+ @use '../core/placeholders/' as *;
2
+ @use '../core/funcs/list' as list;
3
+ @use '../core/funcs/map' as map;
4
+
5
+ @each $value in list.steps(1, 12) {
6
+ .flex-#{$value} {
7
+ flex: #{$value};
8
+ }
9
+ }
10
+
11
+ @each $key, $direction in ('columns': row, 'rows': column) {
12
+ .flex-#{$key} {
13
+ @extend %flex-base;
14
+
15
+ flex-direction: $direction;
16
+ }
17
+
18
+ .flex-#{$key}-reverse {
19
+ flex-direction: #{$direction}-reverse;
20
+ }
21
+ }
22
+
23
+ .flex-wrap {
24
+ flex-wrap: wrap;
25
+ }
26
+
27
+ .flex-wrap-inverse {
28
+ flex-wrap: wrap-reverse;
29
+ }
30
+
31
+ .flex-wrapper {
32
+ @extend %flex-wrapper;
33
+ }
34
+
35
+ // ==========================================================
36
+ // Flexbox Layouts (Distribution)
37
+ // ==========================================================
38
+
39
+ @each $key,
40
+ $value
41
+ in (
42
+ 'start': flex-start,
43
+ 'center': center,
44
+ 'end': flex-end,
45
+ 'between': space-between,
46
+ 'around': space-around,
47
+ 'evenly': space-evenly,
48
+ 'stretch': stretch
49
+ )
50
+ {
51
+ .flex-#{$key} {
52
+ justify-content: $value;
53
+ }
54
+ }
55
+
56
+ // fait grandir les éléments eux-mêmes pour occuper l'espace disponible sur l'axe principal
57
+ .flex-justify > * {
58
+ flex: 1 1 auto;
59
+ }
60
+
61
+ // ==========================================================
62
+ // Items Spacers
63
+ // ==========================================================
64
+
65
+ @each $key,
66
+ $value
67
+ in (
68
+ 'start': flex-start,
69
+ 'center': center,
70
+ 'end': flex-end,
71
+ 'stretch': stretch,
72
+ 'baseline': baseline
73
+ )
74
+ {
75
+ .items-#{$key} {
76
+ align-items: $value;
77
+ }
78
+
79
+ .self-#{$key} {
80
+ align-self: $value;
81
+ }
82
+ }
83
+
84
+ $gaps-map: list.steps(1, 6);
85
+ $gaps-map: map.mirror($gaps-map);
86
+ $gaps-map: map.merge(
87
+ $gaps-map,
88
+ (
89
+ '0': 0,
90
+ '0-75': 0.75,
91
+ '1': 1,
92
+ '1-5': 1.5,
93
+ '2': 2,
94
+ '2-5': 2.5,
95
+ )
96
+ );
97
+
98
+ @each $key, $value in $gaps-map {
99
+ .gap-#{$key}v {
100
+ gap: #{$value}rem;
101
+ }
102
+ }
@@ -1,6 +1,7 @@
1
+ // ==========================================================
2
+ // Utility Classes
3
+ // ==========================================================
1
4
  .clearfix {
2
- *zoom: 1;
3
-
4
5
  &::after,
5
6
  &::before {
6
7
  content: '.';
@@ -22,18 +23,12 @@
22
23
  clear: both;
23
24
  }
24
25
 
25
- .clear-right {
26
- clear: right;
27
- }
28
-
29
- .clear-left {
30
- clear: left;
31
- }
32
-
33
- .float-left {
34
- float: left;
35
- }
26
+ @each $name in (right, left) {
27
+ .clear-#{$name} {
28
+ clear: $name;
29
+ }
36
30
 
37
- .float-right {
38
- float: right;
31
+ .float-#{$name} {
32
+ float: $name;
33
+ }
39
34
  }
@@ -0,0 +1,86 @@
1
+ @use '../core/placeholders/' as *;
2
+
3
+ // =================================================================
4
+ // 1. Lists
5
+ // =================================================================
6
+
7
+ // --- 1.1. Unordered Lists ---
8
+
9
+ ul.list--styled,
10
+ ul.list--unstyled {
11
+ > li::marker {
12
+ font-size: calc(var(--xl-size) * 0.9);
13
+ }
14
+ }
15
+
16
+ ul.list--unstyled {
17
+ @extend %list-type--unstyled;
18
+ }
19
+
20
+ ul.list--styled {
21
+ @extend %list-type--styled;
22
+
23
+ list-style-type: disc;
24
+ }
25
+
26
+ // --- 1.2. Ordered Lists ---
27
+
28
+ ol.list--styled,
29
+ ol.list--unstyled {
30
+ counter-reset: li-counter;
31
+
32
+ > li {
33
+ counter-increment: li-counter;
34
+ }
35
+
36
+ > li::marker {
37
+ font-size: var(--xl-size);
38
+ font-weight: 700;
39
+ }
40
+ }
41
+
42
+ ol.list--unstyled {
43
+ @extend %list-type--unstyled;
44
+
45
+ > li::marker {
46
+ content: none;
47
+ }
48
+ }
49
+
50
+ ol.list--styled {
51
+ @extend %list-type--styled;
52
+
53
+ list-style-type: decimal;
54
+
55
+ > li::marker {
56
+ content: counters(li-counter, '.') '.  ';
57
+ }
58
+ }
59
+
60
+ // --- 1.3. Definition Lists ---
61
+
62
+ dl.list--styled,
63
+ dl.list--unstyled {
64
+ dd,
65
+ dl {
66
+ margin: 0;
67
+ }
68
+ }
69
+
70
+ dl.list--unstyled {
71
+ @extend %list-type--unstyled;
72
+
73
+ dd,
74
+ dl {
75
+ padding-inline-start: 0;
76
+ }
77
+ }
78
+
79
+ dl.list--styled {
80
+ @extend %list-type--styled;
81
+
82
+ dd,
83
+ dl {
84
+ padding-inline-start: 1rem;
85
+ }
86
+ }
@@ -0,0 +1,121 @@
1
+ @use '../core/funcs/map' as map;
2
+
3
+ // ==========================================================
4
+ // NEGATES
5
+ // ==========================================================
6
+
7
+ // --- TEXT DECORATION NEGATES (with link states) ---
8
+ @each $state in ('', ':hover', ':active', ':visited') {
9
+ .no-underline,
10
+ a.no-underline#{$state} {
11
+ text-decoration: none;
12
+ }
13
+
14
+ .no-no-underline,
15
+ a.no-no-underline#{$state} {
16
+ text-decoration: none !important;
17
+ }
18
+ }
19
+
20
+ // --- NEGATES ---
21
+ @each $name,
22
+ $config
23
+ in (
24
+ 'background': (
25
+ 'property': 'background',
26
+ 'value': none,
27
+ ),
28
+ 'events': (
29
+ 'property': 'pointer-events',
30
+ 'value': none,
31
+ ),
32
+ 'flex-grow': (
33
+ 'property': 'flex',
34
+ 'value': 0 1,
35
+ ),
36
+ 'flex-shrink': (
37
+ 'property': 'flex',
38
+ 'value': 1 0,
39
+ ),
40
+ 'float': (
41
+ 'property': 'float',
42
+ 'value': none,
43
+ ),
44
+ 'flex': (
45
+ 'property': 'flex',
46
+ 'value': none,
47
+ ),
48
+ 'margin': (
49
+ 'property': 'margin',
50
+ 'value': 0,
51
+ ),
52
+ 'padding': (
53
+ 'property': 'padding',
54
+ 'value': 0,
55
+ ),
56
+ 'border': (
57
+ 'property': 'border',
58
+ 'value': 0,
59
+ ),
60
+ 'radius': (
61
+ 'property': 'border-radius',
62
+ 'value': 0,
63
+ ),
64
+ 'outline': (
65
+ 'property': 'outline',
66
+ 'value': none,
67
+ ),
68
+ 'pointer': (
69
+ 'property': 'cursor',
70
+ 'value': default,
71
+ ),
72
+ 'select': (
73
+ 'property': 'user-select',
74
+ 'value': none,
75
+ ),
76
+ 'wrap': (
77
+ 'property': 'white-space',
78
+ 'value': nowrap,
79
+ )
80
+ )
81
+ {
82
+ $property: map.get($config, 'property');
83
+ $value: map.get($config, 'value');
84
+
85
+ .no-#{$name} {
86
+ #{$property}: #{$value};
87
+ }
88
+
89
+ .no-no-#{$name} {
90
+ #{$property}: #{$value} !important;
91
+ }
92
+ }
93
+
94
+ // --- UTILITY CLASSES ---
95
+ .no-click-allowed {
96
+ cursor: not-allowed;
97
+ }
98
+
99
+ .no-overflow {
100
+ overflow: hidden;
101
+ }
102
+
103
+ .no-no-overflow {
104
+ overflow: hidden !important;
105
+ }
106
+
107
+ .no-overflow-x {
108
+ overflow-x: hidden;
109
+ }
110
+
111
+ .no-no-overflow-x {
112
+ overflow-x: hidden !important;
113
+ }
114
+
115
+ .no-overflow-y {
116
+ overflow-y: hidden;
117
+ }
118
+
119
+ .no-no-overflow-y {
120
+ overflow-y: hidden !important;
121
+ }
@@ -0,0 +1,11 @@
1
+ // Applique la variable CSS locale --nappr-data-color à la couleur du texte.
2
+ // @example <div data-color="black" class="text-data-color">Texte noir</div>
3
+ .text-data-color {
4
+ color: var(--nappr-data-color);
5
+ }
6
+
7
+ // Applique la variable CSS locale --nappr-data-color au fond.
8
+ // @example <div data-color="black" class="bg-data-color">Fond noir</div>
9
+ .bg-data-color {
10
+ background-color: var(--nappr-data-color);
11
+ }
@@ -0,0 +1,78 @@
1
+ @use '../core/placeholders/' as *;
2
+
3
+ // ==========================================================
4
+ // Placeholders
5
+ // ==========================================================
6
+ %scroll-smooth-mobile {
7
+ -webkit-overflow-scrolling: touch; /* Smooth scrolling sur iOS */
8
+ overscroll-behavior: contain; /* Empêche le scroll bounce sur iOS */
9
+ }
10
+
11
+ %is-scrollbox {
12
+ @extend %is-full-layout;
13
+ @extend %position-absolute;
14
+ @extend %scroll-smooth-mobile;
15
+
16
+ overflow: auto;
17
+ }
18
+
19
+ %is-scrollbox-y {
20
+ @extend %is-full-layout;
21
+ @extend %position-absolute;
22
+ @extend %scroll-smooth-mobile;
23
+
24
+ overflow: hidden auto;
25
+ }
26
+
27
+ %scroll-x-auto {
28
+ @extend %scroll-smooth-mobile;
29
+
30
+ overflow: auto hidden;
31
+ }
32
+
33
+ %scroll-y-auto {
34
+ @extend %scroll-smooth-mobile;
35
+
36
+ overflow: hidden auto;
37
+ }
38
+
39
+ // ==========================================================
40
+ // Utility Classes
41
+ // ==========================================================
42
+ .scroll-x-only {
43
+ overflow: scroll hidden;
44
+ }
45
+
46
+ .scroll-y-only {
47
+ overflow: hidden scroll;
48
+ }
49
+
50
+ .scroll-x-auto {
51
+ @extend %scroll-x-auto;
52
+ }
53
+
54
+ .scroll-y-auto {
55
+ @extend %scroll-y-auto;
56
+ }
57
+
58
+ .scrollbox-wrapper {
59
+ @extend %position-relative;
60
+ }
61
+
62
+ .scrollbox {
63
+ @extend %is-scrollbox;
64
+ }
65
+
66
+ .scrollbox-y {
67
+ @extend %is-scrollbox;
68
+ @extend %scroll-y-auto;
69
+
70
+ height: auto;
71
+ }
72
+
73
+ .scrollbox-x {
74
+ @extend %is-scrollbox;
75
+ @extend %scroll-x-auto;
76
+
77
+ height: auto;
78
+ }
@@ -0,0 +1,120 @@
1
+ @use '../configs/' as configs;
2
+ @use '../core/mixins/' as mixins;
3
+ @use '../core/funcs/map' as map;
4
+ @use '../core/funcs/string' as string;
5
+
6
+ // @use '../core/funcs/list' as list;
7
+ // @use '../core/funcs/math' as math;
8
+
9
+ // ==========================================================
10
+ // Functions
11
+ // ==========================================================
12
+ // @function generate-spacers-map(
13
+ // $min,
14
+ // $max,
15
+ // $base: 4,
16
+ // $suffix: 'v',
17
+ // $unit: 'rem'
18
+ // ) {
19
+ // $map: ();
20
+ // $range: list.iterate($min, $max);
21
+
22
+ // @each $i in $range {
23
+ // $value: math.div($i, $base);
24
+ // $key: if($i < 0, 'n#{math.abs($i)}#{$suffix}', '#{$i}#{$suffix}');
25
+ // $token: if($i == 0, '0', $key);
26
+ // $map: map.set($map, $token, #{$value}#{$unit});
27
+ // }
28
+
29
+ // $map: map.merge(
30
+ // (
31
+ // 'auto': auto,
32
+ // 'n1-5#{$suffix}': -0.375#{$unit},
33
+ // 'n0-5#{$suffix}': -0.125#{$unit},
34
+ // '0-5#{$suffix}': 0.125#{$unit},
35
+ // '1-5#{$suffix}': 0.375#{$unit},
36
+ // ),
37
+ // $map
38
+ // );
39
+
40
+ // @return $map;
41
+ // }
42
+
43
+ // ==========================================================
44
+ // Mixins
45
+ // ==========================================================
46
+ @function get-classname-prefix($prop, $suffix: '') {
47
+ $first-letter: string.slice('#{$prop}', 0, 1);
48
+ $classname: '.#{$first-letter}#{$suffix}';
49
+
50
+ @return $classname;
51
+ }
52
+
53
+ @function get-classname-suffix($side, $token, $bpt: null) {
54
+ $abbr-map: (
55
+ 'all': '',
56
+ 'topbottom': 'y',
57
+ 'leftright': 'x',
58
+ );
59
+ $bpt-prefix: if($bpt != null, '-#{$bpt}', '');
60
+ $side-abbr: if(
61
+ map.has-key($abbr-map, $side),
62
+ map.get($abbr-map, $side),
63
+ string.slice($side, 0, 1)
64
+ );
65
+ $classname-suffix: '#{$side-abbr}#{$bpt-prefix}-#{$token}';
66
+
67
+ @return $classname-suffix;
68
+ }
69
+
70
+ @mixin generate-spacers($token-map, $bpt: null) {
71
+ @each $token, $value in $token-map {
72
+ @each $side in (all, topbottom, leftright, top, left, right, bottom) {
73
+ $is-auto: $token == 'auto';
74
+ $classname-suffix: get-classname-suffix($side, $token, $bpt);
75
+ $current-props: if($is-auto, (margin), (margin, padding));
76
+
77
+ @each $prop in $current-props {
78
+ $classname-prefix: get-classname-prefix($prop);
79
+ $classname: string.concat($classname-prefix, $classname-suffix);
80
+ $css-value: if(
81
+ $is-auto,
82
+ auto,
83
+ var(--nappr-spacing-#{$token}, #{$value})
84
+ );
85
+
86
+ @if $side == 'all' {
87
+ #{$classname} {
88
+ #{$prop}: $css-value;
89
+ }
90
+ } @else if $side == 'topbottom' {
91
+ #{$classname} {
92
+ #{$prop}-top: $css-value;
93
+ #{$prop}-bottom: $css-value;
94
+ }
95
+ } @else if $side == 'leftright' {
96
+ #{$classname} {
97
+ #{$prop}-left: $css-value;
98
+ #{$prop}-right: $css-value;
99
+ }
100
+ } @else {
101
+ #{$classname} {
102
+ #{$prop}-#{$side}: $css-value;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+ // ==========================================================
111
+ // UTILITY CLASSES
112
+ // ---
113
+ // generate spacers classes
114
+ // Exemple: .m-0-5v, .p-2v, .mx-3v-md
115
+ // ==========================================================
116
+ @include generate-spacers(configs.$NAPPR_SPACING);
117
+
118
+ @include mixins.media-query-min('md') {
119
+ @include generate-spacers(configs.$NAPPR_SPACING, 'md');
120
+ }
@@ -0,0 +1,33 @@
1
+ @use '../core/funcs/math' as math;
2
+
3
+ // ==========================================================
4
+ // Mixins
5
+ // ==========================================================
6
+
7
+ /**
8
+ * Generate square grid classes
9
+ * @param {Number} $gutters - Number of gutters
10
+ * @return {Void}
11
+ */
12
+ @mixin generate-square-grid($gutters) {
13
+ @for $i from 1 through $gutters {
14
+ $gap: $i - 1;
15
+ $percent: math.div((100 - $gap), $i);
16
+ .square-grid-#{$i} > * {
17
+ width: math.number-to-percent($percent);
18
+ }
19
+ }
20
+ }
21
+
22
+ // ==========================================================
23
+ // UTILITY CLASSES
24
+ // ==========================================================
25
+
26
+ .square-grid {
27
+ display: flex;
28
+ flex-flow: row wrap;
29
+ gap: 1%;
30
+ justify-content: flex-start;
31
+ }
32
+
33
+ @include generate-square-grid(6);