@nappr/nappr-styles 0.3.1 → 0.3.3
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.
- package/README.md +33 -20
- package/dist/styles.css +7462 -1
- package/dist/styles.css.map +1 -1
- package/dist/styles.min.css +3 -0
- package/dist/styles.min.css.map +1 -0
- package/docs/_coverpage.md +2 -2
- package/docs/_sidebar.md +2 -2
- package/docs/docs.theme.css +2 -1
- package/docs/docs.theme.css.map +1 -1
- package/docs/index.html +1 -1
- package/docs/pages/displays.md +26 -8
- package/docs/pages/grid.md +365 -0
- package/docs/pages/helpers.md +30 -18
- package/docs/pages/quick-start.md +100 -14
- package/docs/temp.scss +122 -0
- package/index.d.ts +25 -0
- package/package.json +48 -14
- package/sass/_globals.module.scss +43 -0
- package/sass/_globals.scss +78 -0
- package/sass/components/_.scss +1 -0
- package/sass/components/_badge.scss +58 -0
- package/sass/components/_button.scss +212 -0
- package/sass/components/scrollbar/_.scss +102 -0
- package/sass/configs/_.scss +7 -0
- package/sass/configs/_breakpoints.scss +12 -0
- package/sass/configs/_defaults.scss +6 -0
- package/sass/configs/_grid.scss +8 -0
- package/sass/configs/_palettes.scss +72 -0
- package/sass/configs/_spacing.scss +36 -0
- package/sass/configs/_text.scss +41 -0
- package/sass/configs/_themes.scss +24 -0
- package/sass/core/funcs/_list.scss +43 -0
- package/sass/core/funcs/_map.scss +42 -0
- package/sass/core/funcs/_math.scss +35 -0
- package/sass/core/funcs/_string.scss +47 -0
- package/sass/core/mixins/_.scss +3 -0
- package/{lib → sass/core}/mixins/_links.scss +2 -2
- package/sass/core/mixins/_media-queries.scss +22 -0
- package/sass/core/mixins/_typography.scss +26 -0
- package/sass/core/placeholders/_.scss +4 -0
- package/sass/core/placeholders/_dimensions.scss +16 -0
- package/sass/core/placeholders/_flexbox.scss +11 -0
- package/sass/core/placeholders/_lists.scss +41 -0
- package/sass/core/placeholders/_positions.scss +19 -0
- package/sass/core/placeholders/_typography.scss +10 -0
- package/sass/elements/_.scss +6 -0
- package/sass/elements/_dialog.scss +13 -0
- package/{lib/htmls → sass/elements}/_form.scss +28 -6
- package/sass/elements/_links.scss +21 -0
- package/sass/elements/_lists.scss +11 -0
- package/{lib/htmls → sass/elements}/_table.scss +2 -6
- package/sass/elements/_typography.scss +13 -0
- package/sass/layout/grid/_.scss +4 -0
- package/sass/layout/grid/_columns.scss +32 -0
- package/sass/layout/grid/_gaps.scss +42 -0
- package/sass/layout/grid/_grid.scss +130 -0
- package/sass/layout/grid/_offsets.scss +35 -0
- package/sass/main.scss +59 -0
- package/sass/resets/_.scss +5 -0
- package/sass/resets/_base.scss +69 -0
- package/sass/resets/_nappr.scss +82 -0
- package/sass/themes/_dark.scss +17 -0
- package/sass/themes/_dracula.scss +17 -0
- package/sass/themes/_github-light.scss +17 -0
- package/sass/themes/_light.scss +17 -0
- package/sass/themes/_monokai-pro.scss +17 -0
- package/sass/themes/_night-owl.scss +17 -0
- package/sass/themes/_nord.scss +17 -0
- package/sass/themes/_tokyo-night.scss +17 -0
- package/sass/utilities/_.scss +21 -0
- package/sass/utilities/_dimensions.scss +11 -0
- package/sass/utilities/_displays.scss +111 -0
- package/sass/utilities/_flexbox.scss +81 -0
- package/{lib/helpers → sass/utilities}/_floats.scss +10 -13
- package/sass/utilities/_lists.scss +86 -0
- package/sass/utilities/_negates.scss +121 -0
- package/sass/utilities/_palette.scss +11 -0
- package/sass/utilities/_scrolls.scss +67 -0
- package/sass/utilities/_spacers.scss +120 -0
- package/sass/utilities/_square-grid.scss +33 -0
- package/sass/utilities/_typography.scss +106 -0
- package/sass/utilities/_visibility.scss +60 -0
- package/sass/utilities/_wrap.scss +12 -0
- package/styles.scss +5 -1
- package/lib/_globals.scss +0 -16
- package/lib/_reset.scss +0 -223
- package/lib/customs/scrollbar.scss +0 -40
- package/lib/funcs/_.scss +0 -5
- package/lib/funcs/_get-color.scss +0 -3
- package/lib/funcs/_math.scss +0 -5
- package/lib/funcs/_merge-palette.scss +0 -12
- package/lib/funcs/_rem.scss +0 -104
- package/lib/funcs/_strings.scss +0 -35
- package/lib/grid/_.scss +0 -4
- package/lib/grid/_col.scss +0 -117
- package/lib/grid/_row.scss +0 -117
- package/lib/grid/_square.scss +0 -34
- package/lib/grid/_wrap.scss +0 -39
- package/lib/helpers/_.scss +0 -9
- package/lib/helpers/_displays.scss +0 -151
- package/lib/helpers/_flexbox.scss +0 -105
- package/lib/helpers/_margins.scss +0 -13
- package/lib/helpers/_negates.scss +0 -171
- package/lib/helpers/_scrolls.scss +0 -55
- package/lib/helpers/_texts.scss +0 -101
- package/lib/helpers/_visibility.scss +0 -34
- package/lib/htmls/_.scss +0 -4
- package/lib/htmls/_headings.scss +0 -29
- package/lib/htmls/_links.scss +0 -11
- package/lib/mixins/_.scss +0 -9
- package/lib/mixins/_border-radius.scss +0 -61
- package/lib/mixins/_border.scss +0 -48
- package/lib/mixins/_dimensions.scss +0 -48
- package/lib/mixins/_font-size.scss +0 -22
- package/lib/mixins/_line-height.scss +0 -19
- package/lib/mixins/_margin-padding.scss +0 -66
- package/lib/mixins/_root-variables.scss +0 -11
- package/lib/mixins/_theme.scss +0 -25
- package/lib/styles.scss +0 -19
- package/lib/variables/_.scss +0 -4
- package/lib/variables/_breakpoints.scss +0 -5
- package/lib/variables/_colors.scss +0 -60
- package/lib/variables/_defaults.scss +0 -53
- /package/{lib/helpers → sass/utilities}/_pointers.scss +0 -0
package/docs/temp.scss
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
// ==============================================
|
|
2
|
+
// 1. Variables : Polices et Couleurs (Basé sur le DSFR)
|
|
3
|
+
// ==============================================
|
|
4
|
+
|
|
5
|
+
// Polices
|
|
6
|
+
$font-marianne: 'Marianne', arial, sans-serif;
|
|
7
|
+
$font-spectral: 'Spectral', georgia, serif; // Utilisée pour les Displays selon la charte
|
|
8
|
+
|
|
9
|
+
// Couleurs (Tokens DSFR - à ajuster si besoin)
|
|
10
|
+
$color-text-default: #161616; // Couleur G800 sur fond clair
|
|
11
|
+
$color-text-inverted: #ffffff; // Couleur White sur fond foncé
|
|
12
|
+
$margin-bottom-heading: 1.5rem; // 24px/16 = 1.5rem (pour h1-h6)
|
|
13
|
+
$margin-bottom-display: 2rem; // 32px/16 = 2rem (pour les displays)
|
|
14
|
+
|
|
15
|
+
// Variables de taille de police (À REMPLACER PAR LES VALEURS EXACTES DU DSFR)
|
|
16
|
+
// Ces valeurs sont indicatives et doivent être vérifiées dans la documentation DSFR
|
|
17
|
+
$h1-font-size: 2.5rem; // Ex: 40px
|
|
18
|
+
$h2-font-size: 2rem; // Ex: 32px
|
|
19
|
+
$h3-font-size: 1.75rem; // Ex: 28px
|
|
20
|
+
$h4-font-size: 1.5rem; // Ex: 24px
|
|
21
|
+
$h5-font-size: 1.25rem; // Ex: 20px
|
|
22
|
+
$h6-font-size: 1rem; // Ex: 16px
|
|
23
|
+
|
|
24
|
+
$display-xl-font-size: 4rem; // Très grand display
|
|
25
|
+
$display-lg-font-size: 3rem; // Grand display
|
|
26
|
+
$display-md-font-size: 2.5rem; // Display moyen
|
|
27
|
+
|
|
28
|
+
// ==============================================
|
|
29
|
+
// 2. Mixin pour styliser un titre
|
|
30
|
+
// ==============================================
|
|
31
|
+
|
|
32
|
+
@mixin heading-style(
|
|
33
|
+
$font-size,
|
|
34
|
+
$font-weight: 700,
|
|
35
|
+
$font-family: $font-marianne,
|
|
36
|
+
$margin-bottom: $margin-bottom-heading
|
|
37
|
+
) {
|
|
38
|
+
color: $color-text-default;
|
|
39
|
+
font-family: $font-family;
|
|
40
|
+
font-size: $font-size;
|
|
41
|
+
font-weight: $font-weight;
|
|
42
|
+
line-height: 1.2; // Ligne de hauteur à vérifier dans le DSFR
|
|
43
|
+
margin-bottom: $margin-bottom;
|
|
44
|
+
margin-top: 0; // Réinitialise la marge supérieure
|
|
45
|
+
|
|
46
|
+
// Style pour le mode sombre ou fond coloré
|
|
47
|
+
.fr-scheme-dark &,
|
|
48
|
+
.fr-background-alt & {
|
|
49
|
+
color: $color-text-inverted;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// ==============================================
|
|
54
|
+
// 3. Application des styles aux balises HTML (H1 à H6)
|
|
55
|
+
// ==============================================
|
|
56
|
+
|
|
57
|
+
h1 {
|
|
58
|
+
@include heading-style($h1-font-size, 700); // Généralement Bold
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
h2 {
|
|
62
|
+
@include heading-style($h2-font-size, 700);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
h3 {
|
|
66
|
+
@include heading-style($h3-font-size, 700);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
h4 {
|
|
70
|
+
@include heading-style($h4-font-size, 700);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
h5 {
|
|
74
|
+
@include heading-style($h5-font-size, 700);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
h6 {
|
|
78
|
+
@include heading-style($h6-font-size, 700);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ==============================================
|
|
82
|
+
// 4. Titres Alternatifs (Display)
|
|
83
|
+
// ==============================================
|
|
84
|
+
|
|
85
|
+
// Les displays utilisent souvent la police Spectral et un poids plus lourd
|
|
86
|
+
.fr-display--xl {
|
|
87
|
+
@include heading-style(
|
|
88
|
+
$display-xl-font-size,
|
|
89
|
+
800,
|
|
90
|
+
$font-spectral,
|
|
91
|
+
$margin-bottom-display
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.fr-display--lg {
|
|
96
|
+
@include heading-style(
|
|
97
|
+
$display-lg-font-size,
|
|
98
|
+
800,
|
|
99
|
+
$font-spectral,
|
|
100
|
+
$margin-bottom-display
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.fr-display--md {
|
|
105
|
+
@include heading-style(
|
|
106
|
+
$display-md-font-size,
|
|
107
|
+
800,
|
|
108
|
+
$font-spectral,
|
|
109
|
+
$margin-bottom-display
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Classe pour réinitialiser le style de titre (si besoin)
|
|
114
|
+
.fr-text--lead {
|
|
115
|
+
font-family: $font-marianne;
|
|
116
|
+
|
|
117
|
+
// Style spécifique pour un texte d'introduction
|
|
118
|
+
font-size: 1.25rem;
|
|
119
|
+
font-weight: 400;
|
|
120
|
+
|
|
121
|
+
// Autres styles...
|
|
122
|
+
}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for @nappr/nappr-styles
|
|
3
|
+
*
|
|
4
|
+
* Provides TypeScript support for importing CSS and SCSS files.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
declare module '*.css' {
|
|
8
|
+
const content: string;
|
|
9
|
+
export default content;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare module '*.scss' {
|
|
13
|
+
const content: { [className: string]: string };
|
|
14
|
+
export default content;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare module '*.module.css' {
|
|
18
|
+
const classes: { [key: string]: string };
|
|
19
|
+
export default classes;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare module '*.module.scss' {
|
|
23
|
+
const classes: { [key: string]: string };
|
|
24
|
+
export default classes;
|
|
25
|
+
}
|
package/package.json
CHANGED
|
@@ -1,35 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nappr/nappr-styles",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "A collection of SCSS helpers",
|
|
5
|
-
"main": "./styles.
|
|
6
|
-
"browser": "./dist/styles.css",
|
|
5
|
+
"main": "./dist/styles.min.css",
|
|
6
|
+
"browser": "./dist/styles.min.css",
|
|
7
|
+
"style": "./dist/styles.min.css",
|
|
8
|
+
"types": "./index.d.ts",
|
|
9
|
+
"sass": "./styles.scss",
|
|
7
10
|
"homepage": "https://sixertoy.github.io/nappr-styles",
|
|
8
|
-
"repository":
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/sixertoy/nappr-styles.git"
|
|
14
|
+
},
|
|
9
15
|
"author": "sixertoy <sixertoy.github@gmail.com>",
|
|
10
16
|
"license": "ISC",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"scss",
|
|
19
|
+
"sass",
|
|
20
|
+
"css",
|
|
21
|
+
"styles",
|
|
22
|
+
"helpers",
|
|
23
|
+
"utilities",
|
|
24
|
+
"nappr"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=14.0.0"
|
|
28
|
+
},
|
|
11
29
|
"files": [
|
|
12
|
-
"
|
|
30
|
+
"sass",
|
|
13
31
|
"dist",
|
|
14
32
|
"docs",
|
|
15
33
|
"styles.scss",
|
|
16
|
-
"
|
|
34
|
+
"styles.module.scss",
|
|
35
|
+
"*.d.ts"
|
|
17
36
|
],
|
|
18
37
|
"devDependencies": {
|
|
38
|
+
"cssnano": "^7.1.2",
|
|
39
|
+
"cssnano-preset-advanced": "^7.0.10",
|
|
19
40
|
"docsify": "^4.13.1",
|
|
20
41
|
"docsify-cli": "^4.4.4",
|
|
21
|
-
"
|
|
42
|
+
"postcss": "^8.5.6",
|
|
43
|
+
"postcss-cli": "^11.0.1",
|
|
44
|
+
"postcss-scss": "^4.0.9",
|
|
45
|
+
"postcss-sort-media-queries": "^5.2.0",
|
|
46
|
+
"prettier": "^3.6.2",
|
|
22
47
|
"prettier-stylelint": "0.4.2",
|
|
23
|
-
"
|
|
24
|
-
"stylelint": "^
|
|
25
|
-
"stylelint-config-standard": "^
|
|
48
|
+
"stylelint": "^16.25.0",
|
|
49
|
+
"stylelint-config-standard": "^39.0.1",
|
|
50
|
+
"stylelint-config-standard-scss": "^16.0.0",
|
|
26
51
|
"stylelint-order": "^7.0.0",
|
|
27
|
-
"stylelint-scss": "^6.
|
|
52
|
+
"stylelint-scss": "^6.12.1"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"sass": "^1.93.3",
|
|
56
|
+
"sass-rem": "^4.0.0"
|
|
28
57
|
},
|
|
29
58
|
"scripts": {
|
|
30
|
-
"cleanup": "rm -rf node_modules",
|
|
59
|
+
"cleanup": "rm -rf node_modules dist",
|
|
31
60
|
"docs": "docsify serve docs --port=2999",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
61
|
+
"build": "./.scripts/build.sh",
|
|
62
|
+
"lint": "./.scripts/lint.sh",
|
|
63
|
+
"lint:fix": "./.scripts/lint.sh --fix",
|
|
64
|
+
"format": "./.scripts/format.sh",
|
|
65
|
+
"format:check": "./.scripts/format.sh --check",
|
|
66
|
+
"prepublishOnly": "yarn validate && yarn build",
|
|
67
|
+
"validate": "yarn lint && yarn format:check"
|
|
34
68
|
}
|
|
35
69
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@use './configs/' as configs;
|
|
2
|
+
@use './core/funcs/string' as string;
|
|
3
|
+
|
|
4
|
+
// ==========================================================
|
|
5
|
+
// Mixins
|
|
6
|
+
// ==========================================================
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Export module variables
|
|
10
|
+
* @param {Map} $map - Map containing the variables to export
|
|
11
|
+
* @return {Void}
|
|
12
|
+
*/
|
|
13
|
+
@mixin export-moudles-variables($map) {
|
|
14
|
+
@each $token, $vars in $map {
|
|
15
|
+
$prefix: string.capitalize(string.camelize($token));
|
|
16
|
+
|
|
17
|
+
@each $key, $value in $vars {
|
|
18
|
+
$var: string.capitalize(string.camelize($key));
|
|
19
|
+
|
|
20
|
+
nappr#{$prefix}#{$var}: #{$value};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ==========================================================
|
|
26
|
+
// Root variables
|
|
27
|
+
// ==========================================================
|
|
28
|
+
$ROOT_EXPORTS: (
|
|
29
|
+
'': configs.$NAPPR_DEFAULTS,
|
|
30
|
+
'palette': configs.$NAPPR_PALETTES,
|
|
31
|
+
'breakpoint': configs.$NAPPR_BREAKPOINTS,
|
|
32
|
+
'theme': map.get(
|
|
33
|
+
configs.$NAPPR_THEMES,
|
|
34
|
+
map.get(configs.$NAPPR_DEFAULTS, 'default-theme')
|
|
35
|
+
),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// ==========================================================
|
|
39
|
+
// Export module variables
|
|
40
|
+
// ==========================================================
|
|
41
|
+
:export {
|
|
42
|
+
@include export-moudles-variables(globals.$ROOT_EXPORTS);
|
|
43
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
@use 'sass:meta';
|
|
2
|
+
@use './configs/' as configs;
|
|
3
|
+
@use './core/funcs/map' as map;
|
|
4
|
+
|
|
5
|
+
// ==========================================================
|
|
6
|
+
// Mixins
|
|
7
|
+
// ==========================================================
|
|
8
|
+
|
|
9
|
+
// Génère les variables CSS personnalisées pour :root
|
|
10
|
+
// @param {Map} $map - Map contenant les configurations à exporter
|
|
11
|
+
// @param {String} $prefix - Préfixe pour les variables
|
|
12
|
+
@mixin generate-root-vars($map, $prefix: '') {
|
|
13
|
+
@each $key, $value in $map {
|
|
14
|
+
$is-map: meta.type-of($value) == 'map';
|
|
15
|
+
|
|
16
|
+
@if $is-map {
|
|
17
|
+
@include generate-root-vars($value, '#{$prefix}#{$key}');
|
|
18
|
+
} @else {
|
|
19
|
+
$name-prefix: if($prefix != '', '#{$prefix}-', '');
|
|
20
|
+
$var-name: '#{$name-prefix}#{$key}';
|
|
21
|
+
|
|
22
|
+
--nappr-#{$var-name}: #{$value};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@mixin generate-palette-variables($map) {
|
|
28
|
+
@each $key, $value in $map {
|
|
29
|
+
[data-color='#{$key}'] {
|
|
30
|
+
--nappr-data-color: #{$value};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Génère les variables CSS personnalisées pour chaque thème
|
|
36
|
+
// @param {Map} $map - Map contenant les configurations de thèmes
|
|
37
|
+
@mixin generate-theme-variables($themes) {
|
|
38
|
+
@each $token, $map in $themes {
|
|
39
|
+
[data-theme='#{$token}'] {
|
|
40
|
+
@each $key, $value in $map {
|
|
41
|
+
--nappr-data-color: var(--nappr-palette-#{$token});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ==========================================================
|
|
48
|
+
// Root variables
|
|
49
|
+
// ==========================================================
|
|
50
|
+
$ROOT_EXPORTS: (
|
|
51
|
+
'': configs.$NAPPR_DEFAULTS,
|
|
52
|
+
'palette': configs.$NAPPR_PALETTES,
|
|
53
|
+
'breakpoint': configs.$NAPPR_BREAKPOINTS,
|
|
54
|
+
'grid': configs.$NAPPR_GRID,
|
|
55
|
+
'spacing': configs.$NAPPR_SPACING,
|
|
56
|
+
'theme': map.get(
|
|
57
|
+
configs.$NAPPR_THEMES,
|
|
58
|
+
map.get(configs.$NAPPR_DEFAULTS, 'default-theme')
|
|
59
|
+
),
|
|
60
|
+
);
|
|
61
|
+
$ROOT_THEMES_EXPORTS: (
|
|
62
|
+
'dark-theme': map.get(configs.$NAPPR_THEMES, 'dark-theme'),
|
|
63
|
+
'light-theme': map.get(configs.$NAPPR_THEMES, 'light-theme'),
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
// ==========================================================
|
|
67
|
+
// Export root variables
|
|
68
|
+
// ==========================================================
|
|
69
|
+
:root {
|
|
70
|
+
// --- ROOT VARIABLES ---
|
|
71
|
+
@include generate-root-vars($ROOT_EXPORTS);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// --- THEME VARIABLES ---
|
|
75
|
+
@include generate-palette-variables(configs.$NAPPR_PALETTES);
|
|
76
|
+
|
|
77
|
+
// --- THEME VARIABLES ---
|
|
78
|
+
@include generate-theme-variables($ROOT_THEMES_EXPORTS);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@use './button/' as *;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// ==========================================================
|
|
2
|
+
// BADGE COMPONENT
|
|
3
|
+
// ==========================================================
|
|
4
|
+
|
|
5
|
+
.badge {
|
|
6
|
+
align-items: center;
|
|
7
|
+
border-radius: 0.25rem;
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
font-family: inherit;
|
|
10
|
+
font-weight: 500;
|
|
11
|
+
gap: 0.5rem;
|
|
12
|
+
line-height: var(--nappr-text-line-height);
|
|
13
|
+
text-align: center;
|
|
14
|
+
vertical-align: middle;
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
|
|
17
|
+
.icon {
|
|
18
|
+
align-items: center;
|
|
19
|
+
display: inline-flex;
|
|
20
|
+
flex-shrink: 0;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&.badge--icon-left {
|
|
25
|
+
.icon {
|
|
26
|
+
order: -1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// ==========================================================
|
|
32
|
+
// BADGE SIZES
|
|
33
|
+
// ==========================================================
|
|
34
|
+
|
|
35
|
+
// // Medium size (default)
|
|
36
|
+
.badge,
|
|
37
|
+
.badge--md {
|
|
38
|
+
font-size: 0.875rem;
|
|
39
|
+
padding: 0.5rem 0.25rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Small size
|
|
43
|
+
.badge--sm {
|
|
44
|
+
font-size: 0.75rem;
|
|
45
|
+
padding: 0.375rem 0.125rem;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ==========================================================
|
|
49
|
+
// BADGE VARIANTS (STATUS COLORS)
|
|
50
|
+
// ==========================================================
|
|
51
|
+
// Uses theme variables for dynamic theming support
|
|
52
|
+
|
|
53
|
+
@each $key in ('info', 'error', 'debug', 'success', 'warning') {
|
|
54
|
+
.badge--#{$key} {
|
|
55
|
+
background-color: var(--nappr-theme-state-#{$key});
|
|
56
|
+
color: var(--nappr-theme-text-primary);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
@use 'sass:color';
|
|
2
|
+
|
|
3
|
+
// $COMPONENT_CONFIG: (
|
|
4
|
+
// 'hover-lightness': -10%,
|
|
5
|
+
// 'active-lightness': -15%,
|
|
6
|
+
// ) !default;
|
|
7
|
+
|
|
8
|
+
// ==========================================================
|
|
9
|
+
// BUTTON PLACEHOLDERS
|
|
10
|
+
// ==========================================================
|
|
11
|
+
|
|
12
|
+
%button-base {
|
|
13
|
+
align-items: center;
|
|
14
|
+
border: 0;
|
|
15
|
+
border-radius: 0.25rem;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
font-family: inherit;
|
|
19
|
+
font-size: 0.75rem;
|
|
20
|
+
font-weight: 500;
|
|
21
|
+
gap: 0.5rem;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
line-height: 1.2;
|
|
24
|
+
padding: 1rem 0.5rem;
|
|
25
|
+
text-align: center;
|
|
26
|
+
text-decoration: none;
|
|
27
|
+
user-select: none;
|
|
28
|
+
vertical-align: middle;
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Button disabled state
|
|
33
|
+
%button-disabled {
|
|
34
|
+
cursor: not-allowed;
|
|
35
|
+
opacity: 0.65;
|
|
36
|
+
pointer-events: none;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ==========================================================
|
|
40
|
+
// BUTTON MIXINS
|
|
41
|
+
// ==========================================================
|
|
42
|
+
|
|
43
|
+
@mixin button-interactive {
|
|
44
|
+
&:not(:disabled, .disabled) {
|
|
45
|
+
@content;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@mixin button-transition {
|
|
50
|
+
transition:
|
|
51
|
+
background-color 0.15s ease-in-out,
|
|
52
|
+
border-color 0.15s ease-in-out,
|
|
53
|
+
color 0.15s ease-in-out,
|
|
54
|
+
box-shadow 0.15s ease-in-out;
|
|
55
|
+
|
|
56
|
+
// Note: border-color is included for secondary variant which has a border
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// ==========================================================
|
|
60
|
+
// BUTTON COMPONENT
|
|
61
|
+
// ==========================================================
|
|
62
|
+
|
|
63
|
+
.btn {
|
|
64
|
+
@extend %button-base;
|
|
65
|
+
@include mixins.button-transition;
|
|
66
|
+
|
|
67
|
+
// Icon support
|
|
68
|
+
.icon {
|
|
69
|
+
align-items: center;
|
|
70
|
+
display: inline-flex;
|
|
71
|
+
flex-shrink: 0;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Icon only (no text)
|
|
76
|
+
&.btn--icon-only {
|
|
77
|
+
aspect-ratio: 1;
|
|
78
|
+
padding: config.$NAPPR_BUTTON_PADDING_Y;
|
|
79
|
+
|
|
80
|
+
.icon {
|
|
81
|
+
margin: 0;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Icon on the left
|
|
86
|
+
&.btn--icon-left {
|
|
87
|
+
.icon {
|
|
88
|
+
order: -1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Icon on the right (default)
|
|
93
|
+
&.btn--icon-right {
|
|
94
|
+
.icon {
|
|
95
|
+
order: 1;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Hover state
|
|
100
|
+
@include mixins.button-interactive {
|
|
101
|
+
&:hover {
|
|
102
|
+
text-decoration: none;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Disabled state
|
|
107
|
+
&:disabled,
|
|
108
|
+
&.disabled {
|
|
109
|
+
@extend %button-disabled;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Focus state
|
|
113
|
+
&:focus-visible {
|
|
114
|
+
outline: 2px solid var(--nappr-theme-accent);
|
|
115
|
+
outline-offset: 2px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// No outline modifier
|
|
119
|
+
&.btn--no-outline {
|
|
120
|
+
&:focus-visible {
|
|
121
|
+
outline: none;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ==========================================================
|
|
127
|
+
// BUTTON VARIANTS (PRIORITIES)
|
|
128
|
+
// ==========================================================
|
|
129
|
+
|
|
130
|
+
// Primary (default)
|
|
131
|
+
.btn--primary {
|
|
132
|
+
background-color: var(--nappr-theme-accent);
|
|
133
|
+
border: 0;
|
|
134
|
+
color: var(--nappr-theme-text-primary);
|
|
135
|
+
|
|
136
|
+
@include mixins.button-interactive {
|
|
137
|
+
&:hover {
|
|
138
|
+
// Use color-mix for hover state (darken by 10%)
|
|
139
|
+
background-color: color-mix(
|
|
140
|
+
in srgb,
|
|
141
|
+
var(--nappr-theme-accent) 90%,
|
|
142
|
+
black 10%
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
&:active {
|
|
147
|
+
// Use color-mix for active state (darken by 15%)
|
|
148
|
+
background-color: color-mix(
|
|
149
|
+
in srgb,
|
|
150
|
+
var(--nappr-theme-accent) 85%,
|
|
151
|
+
black 15%
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Secondary (variant of primary)
|
|
158
|
+
.btn--secondary {
|
|
159
|
+
background-color: transparent;
|
|
160
|
+
border: 1px solid var(--nappr-theme-accent);
|
|
161
|
+
color: var(--nappr-theme-accent);
|
|
162
|
+
|
|
163
|
+
@include mixins.button-interactive {
|
|
164
|
+
&:hover {
|
|
165
|
+
background-color: var(--nappr-theme-accent);
|
|
166
|
+
color: var(--nappr-theme-text-primary);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
&:active {
|
|
170
|
+
background-color: color-mix(
|
|
171
|
+
in srgb,
|
|
172
|
+
var(--nappr-theme-accent) 90%,
|
|
173
|
+
black 10%
|
|
174
|
+
);
|
|
175
|
+
border-color: color-mix(
|
|
176
|
+
in srgb,
|
|
177
|
+
var(--nappr-theme-accent) 90%,
|
|
178
|
+
black 10%
|
|
179
|
+
);
|
|
180
|
+
color: var(--nappr-theme-text-primary);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Tertiary (border only, background on hover)
|
|
186
|
+
.btn--tertiary {
|
|
187
|
+
background-color: transparent;
|
|
188
|
+
border: 1px solid var(--nappr-theme-accent);
|
|
189
|
+
color: var(--nappr-theme-accent);
|
|
190
|
+
|
|
191
|
+
@include mixins.button-interactive {
|
|
192
|
+
&:hover {
|
|
193
|
+
background-color: var(--nappr-theme-accent);
|
|
194
|
+
border-color: var(--nappr-theme-accent);
|
|
195
|
+
color: var(--nappr-theme-text-primary);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
&:active {
|
|
199
|
+
background-color: color-mix(
|
|
200
|
+
in srgb,
|
|
201
|
+
var(--nappr-theme-accent) 90%,
|
|
202
|
+
black 10%
|
|
203
|
+
);
|
|
204
|
+
border-color: color-mix(
|
|
205
|
+
in srgb,
|
|
206
|
+
var(--nappr-theme-accent) 90%,
|
|
207
|
+
black 10%
|
|
208
|
+
);
|
|
209
|
+
color: var(--nappr-theme-text-primary);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|