@razerspine/pug-ui-kit 1.0.0 → 1.1.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.
- package/CHANGELOG.md +31 -0
- package/README.md +113 -20
- package/index.js +9 -1
- package/less/base/_fonts.less +44 -0
- package/less/base/_index.less +2 -0
- package/less/base/_reset.less +155 -0
- package/less/components/_aside.less +49 -0
- package/less/components/_buttons.less +156 -0
- package/less/components/_footer.less +25 -0
- package/less/components/_form-control.less +27 -0
- package/less/components/_form-textarea.less +7 -0
- package/less/components/_forms.less +76 -0
- package/less/components/_header.less +57 -0
- package/less/components/_icons.less +42 -0
- package/less/components/_index.less +14 -0
- package/less/components/_input-base.less +48 -0
- package/less/components/_input-checkbox.less +10 -0
- package/less/components/_input-radio.less +10 -0
- package/less/components/_main.less +32 -0
- package/less/components/_single-select.less +29 -0
- package/less/components/_table.less +45 -0
- package/less/layout/_grid.less +104 -0
- package/less/layout/_index.less +2 -0
- package/less/layout/_layout.less +55 -0
- package/less/settings/_breakpoints.less +5 -0
- package/less/settings/_index.less +3 -0
- package/less/settings/_typography.less +2 -0
- package/less/settings/_variables.less +13 -0
- package/less/themes/_dark.less +25 -0
- package/less/themes/_index.less +2 -0
- package/less/themes/_light.less +49 -0
- package/less/ui-kit.less +6 -0
- package/less/utils/_helpers.less +32 -0
- package/less/utils/_index.less +3 -0
- package/less/utils/_mixins.less +36 -0
- package/less/utils/_utilities.less +400 -0
- package/mixins/data-table.pug +67 -56
- package/package.json +12 -2
- package/scss/base/_fonts.scss +44 -0
- package/scss/base/_index.scss +2 -0
- package/scss/base/_reset.scss +155 -0
- package/scss/components/_aside.scss +47 -0
- package/scss/components/_buttons.scss +158 -0
- package/scss/components/_footer.scss +25 -0
- package/scss/components/_form-control.scss +27 -0
- package/scss/components/_form-textarea.scss +7 -0
- package/scss/components/_forms.scss +75 -0
- package/scss/components/_header.scss +57 -0
- package/scss/components/_icons.scss +42 -0
- package/scss/components/_index.scss +14 -0
- package/scss/components/_input-base.scss +48 -0
- package/scss/components/_input-checkbox.scss +10 -0
- package/scss/components/_input-radio.scss +10 -0
- package/scss/components/_main.scss +24 -0
- package/scss/components/_single-select.scss +29 -0
- package/scss/components/_table.scss +45 -0
- package/scss/layout/_grid.scss +64 -0
- package/scss/layout/_index.scss +2 -0
- package/scss/layout/_layout.scss +49 -0
- package/scss/settings/_breakpoints.scss +7 -0
- package/scss/settings/_index.scss +3 -0
- package/scss/settings/_typography.scss +2 -0
- package/scss/settings/_variables.scss +13 -0
- package/scss/themes/_dark.scss +25 -0
- package/scss/themes/_index.scss +2 -0
- package/scss/themes/_light.scss +49 -0
- package/scss/ui-kit.scss +6 -0
- package/scss/utils/_helpers.scss +18 -0
- package/scss/utils/_index.scss +3 -0
- package/scss/utils/_mixins.scss +16 -0
- package/scss/utils/_utilities.scss +305 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
## [1.0.1] - 2026-02-03
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
- **dataTable**: Refactored the `dataTable` mixin to improve configuration consistency.
|
|
5
|
+
- **dataTable**: The `options` parameter now accepts an `actions` array to define row actions (links/buttons) dynamically.
|
|
6
|
+
|
|
7
|
+
### Removed
|
|
8
|
+
- **dataTable**: Removed support for the Pug `block` (slot) content for rendering actions. The `showActions` boolean option has also been removed.
|
|
9
|
+
|
|
10
|
+
### Migration Guide
|
|
11
|
+
If you were using the block content for actions:
|
|
12
|
+
```pug
|
|
13
|
+
// Old version (v1.0.0)
|
|
14
|
+
+dataTable(items, cols, { showActions: true })
|
|
15
|
+
a(href=`/edit/${item.id}`) Edit
|
|
16
|
+
```
|
|
17
|
+
You should now update to:
|
|
18
|
+
|
|
19
|
+
```pug
|
|
20
|
+
// New version (v1.0.1)
|
|
21
|
+
+dataTable(items, cols, {
|
|
22
|
+
actions: [
|
|
23
|
+
{ label: 'Edit', url: (item) => `/edit/${item.id}` }
|
|
24
|
+
]
|
|
25
|
+
})
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## [1.1.0] - 2026-02-03
|
|
29
|
+
### Added
|
|
30
|
+
- **Styles**: Full SCSS and LESS support for all UI components.
|
|
31
|
+
- **Architecture**: Added global settings, grid system, and themes (light/dark).
|
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# @razerspine/pug-ui-kit
|
|
2
2
|
|
|
3
|
-
A
|
|
4
|
-
|
|
5
|
-
This package centralizes UI components, ensuring consistency across all templates generated by the CLI.
|
|
3
|
+
A professional, full-featured UI Kit for Pug (Jade) templates, including flexible mixins and complete styling support (SCSS/LESS).
|
|
4
|
+
Designed to work seamlessly with the [Webpack Starter Monorepo](https://github.com/Razerspine/webpack-starter-monorepo)
|
|
6
5
|
|
|
7
6
|
## 📦 Installation
|
|
8
7
|
|
|
@@ -14,44 +13,138 @@ npm install @razerspine/pug-ui-kit
|
|
|
14
13
|
|
|
15
14
|
## 🛠 Webpack Configuration
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
### 1. Webpack (Pug Mixins)
|
|
17
|
+
|
|
18
|
+
To avoid complex relative paths, use the includePaths provided by the package:
|
|
18
19
|
|
|
19
20
|
```js
|
|
20
|
-
const
|
|
21
|
+
const uiKit = require('@razerspine/pug-ui-kit');
|
|
21
22
|
|
|
22
23
|
module.exports = {
|
|
23
24
|
// ...
|
|
24
25
|
resolve: {
|
|
25
26
|
alias: {
|
|
26
|
-
//
|
|
27
|
-
'pug-ui-kit':
|
|
27
|
+
// Points to the directory containing all .pug mixins
|
|
28
|
+
'pug-ui-kit': uiKit.paths.mixins,
|
|
28
29
|
},
|
|
29
30
|
},
|
|
30
31
|
};
|
|
31
32
|
```
|
|
32
|
-
## 🚀 Usage
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
### 2. Styles (SCSS/LESS)
|
|
35
|
+
The package provides full styling for all components.
|
|
36
|
+
If you only need specific parts (e.g., just variables and the table), you can import them individually.
|
|
37
|
+
|
|
38
|
+
Note: Always import settings first, as other components depend on them.
|
|
39
|
+
|
|
40
|
+
#### For SCSS:
|
|
35
41
|
|
|
36
|
-
|
|
42
|
+
```scss
|
|
43
|
+
// In your main.scss
|
|
44
|
+
@use "@razerspine/pug-ui-kit/scss/ui-kit" as *;
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### For LESS:
|
|
37
48
|
|
|
49
|
+
```less
|
|
50
|
+
// In your main.less
|
|
51
|
+
@import "@razerspine/pug-ui-kit/less/ui-kit";
|
|
38
52
|
```
|
|
53
|
+
|
|
54
|
+
## 🚀 Usage
|
|
55
|
+
|
|
56
|
+
#### Button
|
|
57
|
+
|
|
58
|
+
```pug
|
|
39
59
|
include ~pug-ui-kit/btn.pug
|
|
40
60
|
|
|
41
|
-
+btn('Save', 'primary', 'small', {type: '
|
|
61
|
+
+btn('Save', 'primary', 'small', { type: 'submit' })
|
|
42
62
|
```
|
|
43
63
|
|
|
44
|
-
|
|
64
|
+
#### Data Table (New in v1.1.0)
|
|
65
|
+
|
|
66
|
+
```pug
|
|
67
|
+
include ~pug-ui-kit/data-table.pug
|
|
68
|
+
|
|
69
|
+
- const data = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
|
|
70
|
+
|
|
71
|
+
+dataTable(users, ['id', 'name'], {
|
|
72
|
+
showIndex: true,
|
|
73
|
+
labels: { name: 'Full Name' },
|
|
74
|
+
actions: [
|
|
75
|
+
{
|
|
76
|
+
label: 'Edit',
|
|
77
|
+
class: 'btn-edit',
|
|
78
|
+
url: (item) => `/users/edit/${item.id}`
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
})
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### Form Input
|
|
85
|
+
|
|
86
|
+
```pug
|
|
87
|
+
include ~pug-ui-kit/form-input.pug
|
|
88
|
+
|
|
89
|
+
+formInput('text', 'name', 'Name', 'Enter your name', 'name')
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Form Textarea
|
|
93
|
+
|
|
94
|
+
```pug
|
|
95
|
+
include ~pug-ui-kit/form-textarea.pug
|
|
96
|
+
|
|
97
|
+
+formTextarea('message', 'Message', 'Type your message...', 'message')
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### Input Checkbox
|
|
101
|
+
|
|
102
|
+
```pug
|
|
103
|
+
include ~pug-ui-kit/input-checkbox.pug
|
|
104
|
+
|
|
105
|
+
+inputCheckbox('agree', 'I agree to all terms')
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
#### Input Radio
|
|
109
|
+
|
|
110
|
+
```pug
|
|
111
|
+
include ~pug-ui-kit/input-radio.pug
|
|
112
|
+
|
|
113
|
+
.form-group
|
|
114
|
+
.input-group
|
|
115
|
+
span.form-label.w-100 Communication method
|
|
116
|
+
+inputRadio('contact-email', 'Email', 'contact', 'email')
|
|
117
|
+
+inputRadio('contact-phone', 'Phone', 'contact', 'phone')
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### Single Select
|
|
121
|
+
|
|
122
|
+
```pug
|
|
123
|
+
include ~pug-ui-kit/single-select.pug
|
|
124
|
+
|
|
125
|
+
+singleSelect('topic', 'Topic', [
|
|
126
|
+
{value:'support', text:'Support'},
|
|
127
|
+
{value:'feedback', text:'Feedback'},
|
|
128
|
+
{value:'other', text:'Other'}
|
|
129
|
+
])
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## 📂 Package Structure
|
|
133
|
+
|
|
134
|
+
* mixins/ - reusable Pug components.
|
|
135
|
+
* scss/ - complete SCSS kit (Settings, Components, Themes, Layout).
|
|
136
|
+
* less/ - complete LESS version for alternative workflows.
|
|
137
|
+
* index.js - path resolution helper.
|
|
45
138
|
|
|
46
|
-
|
|
139
|
+
## 🧱 Components Included
|
|
47
140
|
|
|
48
|
-
* btn.pug
|
|
49
|
-
* data-table.pug
|
|
50
|
-
* form-input.pug
|
|
51
|
-
* form-textarea.pug
|
|
52
|
-
* input-checkbox.pug
|
|
53
|
-
* input-radio.pug
|
|
54
|
-
* single-select.pug
|
|
141
|
+
* btn.pug
|
|
142
|
+
* data-table.pug
|
|
143
|
+
* form-input.pug
|
|
144
|
+
* form-textarea.pug
|
|
145
|
+
* input-checkbox.pug
|
|
146
|
+
* input-radio.pug
|
|
147
|
+
* single-select.pug
|
|
55
148
|
|
|
56
149
|
## 📄 License
|
|
57
150
|
This project is licensed under the ISC License.
|
package/index.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
2
|
|
|
3
|
-
module.exports =
|
|
3
|
+
module.exports = {
|
|
4
|
+
paths: {
|
|
5
|
+
scss: path.join(__dirname, 'scss'),
|
|
6
|
+
less: path.join(__dirname, 'less'),
|
|
7
|
+
mixins: path.join(__dirname, 'mixins')
|
|
8
|
+
},
|
|
9
|
+
// helper
|
|
10
|
+
getStylePath: (type = 'scss') => path.join(__dirname, type, `ui-kit.${type}`)
|
|
11
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: 'Roboto';
|
|
3
|
+
src: url('../../../fonts/Roboto-Thin.woff2') format('woff2'),
|
|
4
|
+
url('../../../fonts/Roboto-Thin.woff') format('woff');
|
|
5
|
+
font-weight: 100;
|
|
6
|
+
font-style: normal;
|
|
7
|
+
font-display: swap;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@font-face {
|
|
11
|
+
font-family: 'Roboto';
|
|
12
|
+
src: url('../../../fonts/Roboto-Light.woff2') format('woff2'),
|
|
13
|
+
url('../../../fonts/Roboto-Light.woff') format('woff');
|
|
14
|
+
font-weight: 300;
|
|
15
|
+
font-style: normal;
|
|
16
|
+
font-display: swap;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@font-face {
|
|
20
|
+
font-family: 'Roboto';
|
|
21
|
+
src: url('../../../fonts/Roboto-Regular.woff2') format('woff2'),
|
|
22
|
+
url('../../../fonts/Roboto-Regular.woff') format('woff');
|
|
23
|
+
font-weight: 400;
|
|
24
|
+
font-style: normal;
|
|
25
|
+
font-display: swap;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@font-face {
|
|
29
|
+
font-family: 'Roboto';
|
|
30
|
+
src: url('../../../fonts/Roboto-Medium.woff2') format('woff2'),
|
|
31
|
+
url('../../../fonts/Roboto-Medium.woff') format('woff');
|
|
32
|
+
font-weight: 500;
|
|
33
|
+
font-style: normal;
|
|
34
|
+
font-display: swap;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@font-face {
|
|
38
|
+
font-family: 'Roboto';
|
|
39
|
+
src: url('../../../fonts/Roboto-Bold.woff2') format('woff2'),
|
|
40
|
+
url("../../../fonts/Roboto-Bold.woff") format('woff');
|
|
41
|
+
font-weight: 700;
|
|
42
|
+
font-style: normal;
|
|
43
|
+
font-display: swap;
|
|
44
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
@import '../settings/_index';
|
|
2
|
+
// Classic CSS reset adapted to SCSS
|
|
3
|
+
// Based on Meyer reset + sensible defaults (box-sizing, media, form elements)
|
|
4
|
+
|
|
5
|
+
/* Box sizing */
|
|
6
|
+
*, *::before, *::after {
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Remove default margin/padding and set core defaults */
|
|
11
|
+
html, body, div, span, applet, object, iframe,
|
|
12
|
+
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
|
13
|
+
a, abbr, acronym, address, big, cite, code,
|
|
14
|
+
del, dfn, em, img, ins, kbd, q, s, samp,
|
|
15
|
+
small, strike, strong, sub, sup, tt, var,
|
|
16
|
+
b, u, i, center,
|
|
17
|
+
dl, dt, dd, ol, ul, li,
|
|
18
|
+
fieldset, form, label, legend,
|
|
19
|
+
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
20
|
+
article, aside, canvas, details, embed,
|
|
21
|
+
figure, figcaption, footer, header, hgroup,
|
|
22
|
+
menu, nav, output, ruby, section, summary,
|
|
23
|
+
time, mark, audio, video {
|
|
24
|
+
margin: 0;
|
|
25
|
+
padding: 0;
|
|
26
|
+
border: 0;
|
|
27
|
+
vertical-align: baseline;
|
|
28
|
+
background: transparent;
|
|
29
|
+
font: inherit;
|
|
30
|
+
color: inherit;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* HTML5 display-role reset for older browsers */
|
|
34
|
+
article, aside, details, figcaption, figure,
|
|
35
|
+
footer, header, hgroup, menu, nav, section {
|
|
36
|
+
display: block;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/* Base html/body */
|
|
40
|
+
html {
|
|
41
|
+
line-height: 1.15; /* better default line-height */
|
|
42
|
+
-webkit-text-size-adjust: 100%;
|
|
43
|
+
-ms-text-size-adjust: 100%;
|
|
44
|
+
-ms-overflow-style: scrollbar;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
body {
|
|
48
|
+
width: 100%;
|
|
49
|
+
min-height: 100dvh;
|
|
50
|
+
text-rendering: optimizeLegibility;
|
|
51
|
+
-webkit-font-smoothing: antialiased;
|
|
52
|
+
-moz-osx-font-smoothing: grayscale;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Remove list styles */
|
|
56
|
+
ol, ul {
|
|
57
|
+
list-style: none;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Remove default quotes */
|
|
61
|
+
blockquote, q {
|
|
62
|
+
quotes: none;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
blockquote::before, blockquote::after,
|
|
66
|
+
q::before, q::after {
|
|
67
|
+
content: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* Tables */
|
|
71
|
+
table {
|
|
72
|
+
border-collapse: collapse;
|
|
73
|
+
border-spacing: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Images and media */
|
|
77
|
+
img, picture, video, canvas, svg {
|
|
78
|
+
display: block;
|
|
79
|
+
max-width: 100%;
|
|
80
|
+
height: auto;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Links */
|
|
84
|
+
a {
|
|
85
|
+
background-color: transparent;
|
|
86
|
+
text-decoration: none;
|
|
87
|
+
color: inherit;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Forms: inputs, buttons, selects, textareas */
|
|
91
|
+
input, button, textarea, select {
|
|
92
|
+
font: inherit;
|
|
93
|
+
color: inherit;
|
|
94
|
+
background: transparent;
|
|
95
|
+
border: none;
|
|
96
|
+
outline: none;
|
|
97
|
+
-webkit-appearance: none;
|
|
98
|
+
-moz-appearance: none;
|
|
99
|
+
appearance: none;
|
|
100
|
+
box-shadow: none;
|
|
101
|
+
resize: vertical;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Buttons and clickable elements */
|
|
105
|
+
button, [type="button"], [type="submit"], [role="button"] {
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
background: none;
|
|
108
|
+
border: none;
|
|
109
|
+
padding: 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Remove inner focus border in Firefox */
|
|
113
|
+
button::-moz-focus-inner {
|
|
114
|
+
border: 0;
|
|
115
|
+
padding: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Fieldset and legend */
|
|
119
|
+
fieldset {
|
|
120
|
+
margin: 0;
|
|
121
|
+
padding: 0;
|
|
122
|
+
border: 0;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
legend {
|
|
126
|
+
padding: 0;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* Accessibility helpers */
|
|
130
|
+
[hidden] {
|
|
131
|
+
display: none !important;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Reduce motion for users who prefer it */
|
|
135
|
+
@media (prefers-reduced-motion: reduce) {
|
|
136
|
+
*, *::before, *::after {
|
|
137
|
+
animation-duration: 0.001ms !important;
|
|
138
|
+
animation-iteration-count: 1 !important;
|
|
139
|
+
transition-duration: 0.001ms !important;
|
|
140
|
+
scroll-behavior: auto !important;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* Utility: make images and media non-draggable by default */
|
|
145
|
+
img, svg, video {
|
|
146
|
+
user-select: none;
|
|
147
|
+
-webkit-user-drag: none;
|
|
148
|
+
-webkit-user-select: none;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
///* Optional: set base focus outline for keyboard users (can be customized) */
|
|
152
|
+
//:focus {
|
|
153
|
+
// outline: 2px solid rgba(13, 110, 253, 0.6);
|
|
154
|
+
// outline-offset: 2px;
|
|
155
|
+
//}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
@import '../settings/_index';
|
|
2
|
+
|
|
3
|
+
.aside {
|
|
4
|
+
grid-area: aside;
|
|
5
|
+
display: flex;
|
|
6
|
+
justify-content: flex-start;
|
|
7
|
+
padding: 0 @gutter;
|
|
8
|
+
|
|
9
|
+
@media screen and (min-width: @breakpoint-lg) {
|
|
10
|
+
padding: 0;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.navigation {
|
|
15
|
+
background: var(--bg-surface);
|
|
16
|
+
box-shadow: var(--shadow-outline);
|
|
17
|
+
border-radius: @border-radius;
|
|
18
|
+
padding: @gutter;
|
|
19
|
+
width: 100%;
|
|
20
|
+
|
|
21
|
+
@media screen and (min-width: @breakpoint-lg) {
|
|
22
|
+
padding: calc(@gutter * 2);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.list {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
align-items: flex-start;
|
|
30
|
+
justify-content: flex-start;
|
|
31
|
+
width: 100%;
|
|
32
|
+
|
|
33
|
+
&__item {
|
|
34
|
+
width: 100%;
|
|
35
|
+
|
|
36
|
+
&:hover {
|
|
37
|
+
.list__link {
|
|
38
|
+
color: var(--brand-600);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&__link {
|
|
44
|
+
color: var(--text-primary);
|
|
45
|
+
display: block;
|
|
46
|
+
width: 100%;
|
|
47
|
+
padding: .375rem .625rem;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
@import '../settings/_index';
|
|
2
|
+
|
|
3
|
+
.btn {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
justify-content: center;
|
|
7
|
+
gap: .25rem;
|
|
8
|
+
padding: .5rem .75rem;
|
|
9
|
+
border-radius: @border-radius;
|
|
10
|
+
border: 1px solid transparent;
|
|
11
|
+
font-family: @font-family;
|
|
12
|
+
font-weight: 500;
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
text-decoration: none;
|
|
15
|
+
line-height: 1;
|
|
16
|
+
transition: background .15s ease, border-color .15s ease, color .15s ease;
|
|
17
|
+
|
|
18
|
+
&:focus {
|
|
19
|
+
outline: none;
|
|
20
|
+
box-shadow: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&--primary {
|
|
24
|
+
background: var(--brand-500);
|
|
25
|
+
color: var(--text-on-brand);
|
|
26
|
+
border-color: var(--brand-500);
|
|
27
|
+
|
|
28
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
29
|
+
background: var(--brand-700);
|
|
30
|
+
border-color: var(--brand-700);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
&--secondary {
|
|
35
|
+
background: var(--slate-500);
|
|
36
|
+
border-color: var(--slate-500);
|
|
37
|
+
color: var(--text-on-brand);
|
|
38
|
+
|
|
39
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
40
|
+
background: var(--slate-700);
|
|
41
|
+
border-color: var(--slate-700);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
&--outline {
|
|
46
|
+
background: transparent;
|
|
47
|
+
color: var(--brand-500);
|
|
48
|
+
border-color: var(--brand-500);
|
|
49
|
+
|
|
50
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
51
|
+
border-color: var(--brand-600);
|
|
52
|
+
color: var(--brand-600);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&--text {
|
|
57
|
+
color: var(--text-primary);
|
|
58
|
+
|
|
59
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
60
|
+
color: var(--text-secondary);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&-primary {
|
|
64
|
+
color: var(--brand-500);
|
|
65
|
+
|
|
66
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
67
|
+
color: var(--brand-600);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&-secondary {
|
|
72
|
+
color: var(--text-secondary);
|
|
73
|
+
|
|
74
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
75
|
+
color: var(--text-primary);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&--icon {
|
|
81
|
+
background: transparent;
|
|
82
|
+
color: var(--text-primary);
|
|
83
|
+
padding: 0;
|
|
84
|
+
|
|
85
|
+
&-primary {
|
|
86
|
+
padding: 0;
|
|
87
|
+
background: var(--brand-500);
|
|
88
|
+
color: var(--text-on-brand);
|
|
89
|
+
border-color: var(--brand-500);
|
|
90
|
+
|
|
91
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
92
|
+
background: var(--brand-700);
|
|
93
|
+
border-color: var(--brand-700);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&-secondary {
|
|
98
|
+
padding: 0;
|
|
99
|
+
background: var(--slate-500);
|
|
100
|
+
border-color: var(--slate-500);
|
|
101
|
+
color: var(--text-on-brand);
|
|
102
|
+
|
|
103
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
104
|
+
background: var(--slate-700);
|
|
105
|
+
border-color: var(--slate-700);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
&-outline {
|
|
110
|
+
padding: 0;
|
|
111
|
+
background: transparent;
|
|
112
|
+
color: var(--brand-500);
|
|
113
|
+
border-color: var(--brand-500);
|
|
114
|
+
|
|
115
|
+
&:not([disabled]):not(.is-disabled):hover {
|
|
116
|
+
border-color: var(--brand-600);
|
|
117
|
+
color: var(--brand-600);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&-small {
|
|
122
|
+
width: 1.75rem;
|
|
123
|
+
height: 1.75rem;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
&-medium {
|
|
127
|
+
width: 2.25rem;
|
|
128
|
+
height: 2.25rem;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
&-large {
|
|
132
|
+
width: 2.625rem;
|
|
133
|
+
height: 2.625rem;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
&--small {
|
|
138
|
+
padding: .375rem .625rem;
|
|
139
|
+
font-size: .875rem;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
&--medium {
|
|
143
|
+
padding: .5rem .75rem;
|
|
144
|
+
font-size: 1rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
&--large {
|
|
148
|
+
padding: .625rem 1rem;
|
|
149
|
+
font-size: 1.125rem;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
&:disabled {
|
|
153
|
+
opacity: .6;
|
|
154
|
+
cursor: not-allowed;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@import '../settings/_index';
|
|
2
|
+
|
|
3
|
+
.footer {
|
|
4
|
+
grid-area: footer;
|
|
5
|
+
background-color: var(--bg-surface);
|
|
6
|
+
box-shadow: var(--shadow-outline);
|
|
7
|
+
color: var(--text-secondary);
|
|
8
|
+
|
|
9
|
+
&__container {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
width: 100%;
|
|
14
|
+
max-width: @container-max;
|
|
15
|
+
margin: 0 auto;
|
|
16
|
+
padding: calc(@gutter * 2) @gutter;
|
|
17
|
+
gap: 10px;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&__text {
|
|
21
|
+
&--bold {
|
|
22
|
+
font-weight: 700;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@import '../settings/_variables';
|
|
2
|
+
|
|
3
|
+
.form-control {
|
|
4
|
+
display: block;
|
|
5
|
+
width: 100%;
|
|
6
|
+
padding: .5rem .75rem;
|
|
7
|
+
font-size: 1rem;
|
|
8
|
+
line-height: 1.5;
|
|
9
|
+
color: var(--text-primary);
|
|
10
|
+
background-color: var(--bg-subtle);
|
|
11
|
+
background-clip: padding-box;
|
|
12
|
+
border: 1px solid var(--border-subtle);
|
|
13
|
+
border-radius: @border-radius;
|
|
14
|
+
transition: border-color .15s ease, box-shadow .15s ease;
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
|
|
17
|
+
&:focus {
|
|
18
|
+
color: var(--text-primary);
|
|
19
|
+
border-color: var(--border-interactive);
|
|
20
|
+
box-shadow: var(--shadow-outline);
|
|
21
|
+
outline: none;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&::placeholder {
|
|
25
|
+
color: var(--text-secondary);
|
|
26
|
+
}
|
|
27
|
+
}
|