@blank-software/core-components 0.0.1 → 0.0.2
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/fesm2022/blank-software-core-components.mjs +118 -2
- package/fesm2022/blank-software-core-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/accordion/accordion.css +5 -0
- package/src/lib/alert/alert.css +27 -0
- package/src/lib/avatar/avatar.css +0 -0
- package/src/lib/badge/badge.css +0 -0
- package/src/lib/breadcrumb/breadcrumb.css +0 -0
- package/src/lib/button/button.css +83 -0
- package/src/lib/card/card.css +31 -0
- package/src/lib/checkbox/checkbox.css +53 -0
- package/src/lib/date-picker/date-picker.css +0 -0
- package/src/lib/dropdown/dropdown.css +0 -0
- package/src/lib/file-upload/file-upload.css +0 -0
- package/src/lib/footer/footer.css +0 -0
- package/src/lib/form-field/form-field.css +0 -0
- package/src/lib/header/header.css +23 -0
- package/src/lib/icon/icon.css +0 -0
- package/src/lib/input/input.css +29 -0
- package/src/lib/label/label.css +27 -0
- package/src/lib/modal/modal-dialog.css +117 -0
- package/src/lib/modal/modal.css +69 -0
- package/src/lib/navigation/navigation.css +0 -0
- package/src/lib/pagination/pagination.css +76 -0
- package/src/lib/progress-bar/progress-bar.css +88 -0
- package/src/lib/radio/radio.css +35 -0
- package/src/lib/search-bar/search-bar.css +0 -0
- package/src/lib/select/select.css +75 -0
- package/src/lib/sidebar/sidebar.css +41 -0
- package/src/lib/skeleton/skeleton.css +46 -0
- package/src/lib/spinner/spinner.css +0 -0
- package/src/lib/stepper/stepper.css +0 -0
- package/src/lib/table/table.css +97 -0
- package/src/lib/tabs/tabs.css +0 -0
- package/src/lib/toggle/toggle.css +52 -0
- package/src/lib/tooltip/tooltip.css +0 -0
- package/src/styles/index.css +34 -0
- package/src/styles/theme.css +133 -0
- package/types/blank-software-core-components.d.ts +51 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
.card {
|
|
4
|
+
@apply rounded-2xl overflow-hidden;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.card-default {
|
|
8
|
+
@apply bg-surface shadow-sm;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.card-outlined {
|
|
12
|
+
@apply bg-surface border border-ink-200;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.card-padded > .card-body,
|
|
16
|
+
.card-padded > [cardHeader],
|
|
17
|
+
.card-padded > [cardFooter] {
|
|
18
|
+
@apply px-6;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.card-padded > .card-body {
|
|
22
|
+
@apply py-6;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.card-padded > [cardHeader] {
|
|
26
|
+
@apply pt-6 pb-4 border-b border-ink-100;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.card-padded > [cardFooter] {
|
|
30
|
+
@apply pb-6 pt-4 border-t border-ink-100;
|
|
31
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Wrapper ── */
|
|
4
|
+
.checkbox {
|
|
5
|
+
@apply inline-flex items-center gap-2 cursor-pointer select-none;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ── Hidden native input ── */
|
|
9
|
+
.checkbox-input {
|
|
10
|
+
@apply sr-only;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* ── Custom box ── */
|
|
14
|
+
.checkbox-box {
|
|
15
|
+
@apply w-5 h-5 flex-shrink-0 border-2 border-ink-300 rounded
|
|
16
|
+
flex items-center justify-center
|
|
17
|
+
transition-all duration-200;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.checkbox-input:checked + .checkbox-box {
|
|
21
|
+
@apply bg-primary border-primary text-white;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.checkbox-input:focus-visible + .checkbox-box {
|
|
25
|
+
@apply ring-4 ring-primary-200;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.checkbox-input:disabled ~ .checkbox-box,
|
|
29
|
+
.checkbox-input:disabled ~ .checkbox-label {
|
|
30
|
+
@apply opacity-50 cursor-not-allowed;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.checkbox-input:disabled ~ .checkbox-box {
|
|
34
|
+
@apply bg-surface-muted;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* ── Check icon ── */
|
|
38
|
+
.checkbox-check {
|
|
39
|
+
@apply w-3 h-3 opacity-0 transition-opacity duration-150;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.checkbox-input:checked + .checkbox-box .checkbox-check {
|
|
43
|
+
@apply opacity-100;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* ── Indeterminate ── */
|
|
47
|
+
.checkbox-indeterminate {
|
|
48
|
+
@apply bg-primary border-primary text-white;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.checkbox-indeterminate .checkbox-check {
|
|
52
|
+
@apply opacity-100;
|
|
53
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Navbar container ── */
|
|
4
|
+
.header {
|
|
5
|
+
@apply fixed top-0 left-0 right-0 z-50
|
|
6
|
+
bg-surface border-b border-ink-200
|
|
7
|
+
px-4 py-2.5;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* ── Inner layout ── */
|
|
11
|
+
.header-inner {
|
|
12
|
+
@apply flex items-center justify-between h-9;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* ── Left section ── */
|
|
16
|
+
.header-left {
|
|
17
|
+
@apply flex items-center;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* ── Right section ── */
|
|
21
|
+
.header-right {
|
|
22
|
+
@apply flex items-center gap-2;
|
|
23
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Base ── */
|
|
4
|
+
.input {
|
|
5
|
+
@apply w-full border border-ink-300 rounded-base bg-surface text-ink-900
|
|
6
|
+
placeholder:text-ink-400
|
|
7
|
+
transition-colors duration-200
|
|
8
|
+
focus:outline-none focus:ring-4 focus:ring-primary-200 focus:border-primary
|
|
9
|
+
disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-surface-muted;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* ── Sizes ── */
|
|
13
|
+
.input-sm {
|
|
14
|
+
@apply text-sm px-3 py-2;
|
|
15
|
+
}
|
|
16
|
+
.input-md {
|
|
17
|
+
@apply text-sm px-4 py-2.5;
|
|
18
|
+
}
|
|
19
|
+
.input-lg {
|
|
20
|
+
@apply text-base px-5 py-3;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* ── States ── */
|
|
24
|
+
.input-error {
|
|
25
|
+
@apply border-error-500 focus:ring-error-200 focus:border-error-500;
|
|
26
|
+
}
|
|
27
|
+
.input-success {
|
|
28
|
+
@apply border-success-500 focus:ring-success-200 focus:border-success-500;
|
|
29
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Base ── */
|
|
4
|
+
.label {
|
|
5
|
+
@apply font-medium text-ink-700 inline-flex items-center gap-1;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ── Sizes ── */
|
|
9
|
+
.label-sm {
|
|
10
|
+
@apply text-xs;
|
|
11
|
+
}
|
|
12
|
+
.label-md {
|
|
13
|
+
@apply text-sm;
|
|
14
|
+
}
|
|
15
|
+
.label-lg {
|
|
16
|
+
@apply text-base;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* ── States ── */
|
|
20
|
+
.label-disabled {
|
|
21
|
+
@apply opacity-50 cursor-not-allowed;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ── Required indicator ── */
|
|
25
|
+
.label-required {
|
|
26
|
+
@apply text-error font-bold;
|
|
27
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Backdrop ── */
|
|
4
|
+
.bsc-modal-backdrop {
|
|
5
|
+
@apply fixed inset-0 z-40 bg-black/40;
|
|
6
|
+
animation: bsc-modal-fade-in 0.2s ease-out;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* ── Overlay (centering) ── */
|
|
10
|
+
.bsc-modal-overlay {
|
|
11
|
+
@apply overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50
|
|
12
|
+
flex justify-center items-center w-full h-[calc(100%-1rem)] max-h-full
|
|
13
|
+
md:inset-0;
|
|
14
|
+
animation: bsc-modal-slide-in 0.2s ease-out;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* ── Animations ── */
|
|
18
|
+
@keyframes bsc-modal-fade-in {
|
|
19
|
+
from {
|
|
20
|
+
opacity: 0;
|
|
21
|
+
}
|
|
22
|
+
to {
|
|
23
|
+
opacity: 1;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@keyframes bsc-modal-slide-in {
|
|
28
|
+
from {
|
|
29
|
+
opacity: 0;
|
|
30
|
+
transform: translateY(-1rem) scale(0.95);
|
|
31
|
+
}
|
|
32
|
+
to {
|
|
33
|
+
opacity: 1;
|
|
34
|
+
transform: translateY(0) scale(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ── Panel wrapper ── */
|
|
39
|
+
.bsc-modal-panel {
|
|
40
|
+
@apply relative p-4 w-full max-h-full;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ── Sizes ── */
|
|
44
|
+
.bsc-modal-sm {
|
|
45
|
+
@apply max-w-sm;
|
|
46
|
+
}
|
|
47
|
+
.bsc-modal-md {
|
|
48
|
+
@apply max-w-md;
|
|
49
|
+
}
|
|
50
|
+
.bsc-modal-lg {
|
|
51
|
+
@apply max-w-2xl;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* ── Dialog card ── */
|
|
55
|
+
.bsc-modal-dialog {
|
|
56
|
+
@apply relative bg-surface border border-ink-200 rounded-base shadow-sm
|
|
57
|
+
p-6 md:p-8 text-center;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* ── Icon ── */
|
|
61
|
+
.bsc-modal-dialog-icon {
|
|
62
|
+
@apply mx-auto mb-4 flex items-center justify-center w-16 h-16 rounded-full;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.bsc-modal-dialog-icon-success {
|
|
66
|
+
@apply bg-green-100 text-green-500;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.bsc-modal-dialog-icon-error {
|
|
70
|
+
@apply bg-red-100 text-red-500;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.bsc-modal-dialog-icon-confirm {
|
|
74
|
+
@apply bg-amber-100 text-amber-500;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* ── Title ── */
|
|
78
|
+
.bsc-modal-dialog-title {
|
|
79
|
+
@apply text-lg font-semibold text-ink-900 mb-2;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ── Text ── */
|
|
83
|
+
.bsc-modal-dialog-text {
|
|
84
|
+
@apply text-sm text-ink-500 mb-6;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* ── Actions ── */
|
|
88
|
+
.bsc-modal-dialog-actions {
|
|
89
|
+
@apply flex items-center justify-center gap-3;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/* ── Confirm button ── */
|
|
93
|
+
.bsc-modal-dialog-confirm-btn {
|
|
94
|
+
@apply inline-flex items-center font-medium rounded-base text-sm
|
|
95
|
+
px-5 py-2.5 text-white shadow-xs cursor-pointer
|
|
96
|
+
focus:ring-4 focus:outline-none;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.bsc-modal-dialog-btn-success {
|
|
100
|
+
@apply bg-green-500 hover:bg-green-600 focus:ring-green-200;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.bsc-modal-dialog-btn-error {
|
|
104
|
+
@apply bg-red-500 hover:bg-red-600 focus:ring-red-200;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.bsc-modal-dialog-btn-confirm {
|
|
108
|
+
@apply bg-primary hover:bg-primary-700 focus:ring-primary-200;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* ── Cancel button ── */
|
|
112
|
+
.bsc-modal-dialog-cancel-btn {
|
|
113
|
+
@apply inline-flex items-center font-medium rounded-base text-sm
|
|
114
|
+
px-5 py-2.5 text-ink-700 bg-ink-100 hover:bg-ink-200
|
|
115
|
+
shadow-xs cursor-pointer focus:ring-4 focus:ring-ink-100
|
|
116
|
+
focus:outline-none;
|
|
117
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Backdrop ── */
|
|
4
|
+
.bsc-modal-backdrop {
|
|
5
|
+
@apply fixed inset-0 z-40 bg-black/40;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ── Overlay (centering) ── */
|
|
9
|
+
.bsc-modal-overlay {
|
|
10
|
+
@apply overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50
|
|
11
|
+
flex justify-center items-center w-full h-[calc(100%-1rem)] max-h-full
|
|
12
|
+
md:inset-0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* ── Panel wrapper ── */
|
|
16
|
+
.bsc-modal-panel {
|
|
17
|
+
@apply relative p-4 w-full max-h-full;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* ── Sizes ── */
|
|
21
|
+
.bsc-modal-sm {
|
|
22
|
+
@apply max-w-sm;
|
|
23
|
+
}
|
|
24
|
+
.bsc-modal-md {
|
|
25
|
+
@apply max-w-md;
|
|
26
|
+
}
|
|
27
|
+
.bsc-modal-lg {
|
|
28
|
+
@apply max-w-2xl;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* ── Content ── */
|
|
32
|
+
.bsc-modal-content {
|
|
33
|
+
@apply relative bg-surface border border-ink-200 rounded-base shadow-sm p-4 md:p-6;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* ── Header ── */
|
|
37
|
+
.bsc-modal-header {
|
|
38
|
+
@apply flex items-center justify-between border-b border-ink-200 pb-4 md:pb-5;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.bsc-modal-title {
|
|
42
|
+
@apply text-lg font-medium text-ink-900;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.bsc-modal-close {
|
|
46
|
+
@apply text-ink-500 bg-transparent hover:bg-ink-100 hover:text-ink-900
|
|
47
|
+
rounded-base text-sm w-9 h-9 ms-auto
|
|
48
|
+
inline-flex justify-center items-center cursor-pointer;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* ── Body ── */
|
|
52
|
+
.bsc-modal-body {
|
|
53
|
+
@apply py-4 md:py-6;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ── Footer ── */
|
|
57
|
+
.bsc-modal-footer {
|
|
58
|
+
@apply flex items-center space-x-4 border-t border-ink-200 pt-4 md:pt-6;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ── Confirm button ── */
|
|
62
|
+
.bsc-modal-confirm-btn {
|
|
63
|
+
@apply inline-flex items-center text-white bg-primary
|
|
64
|
+
hover:bg-primary-700 box-border border border-transparent
|
|
65
|
+
focus:ring-4 focus:ring-primary-200 shadow-xs
|
|
66
|
+
font-medium leading-5 rounded-base text-sm px-4 py-2.5
|
|
67
|
+
focus:outline-none cursor-pointer
|
|
68
|
+
disabled:opacity-50 disabled:cursor-not-allowed;
|
|
69
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
.pagination {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
gap: 1rem;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.pagination-list {
|
|
8
|
+
display: flex;
|
|
9
|
+
list-style: none;
|
|
10
|
+
margin: 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
font-size: var(--text-sm);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.pagination-list > li + li > .pagination-btn {
|
|
16
|
+
margin-left: -1px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.pagination-btn {
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
background: var(--color-surface);
|
|
24
|
+
border: 1px solid var(--color-ink-200);
|
|
25
|
+
color: var(--color-ink-700);
|
|
26
|
+
font-weight: 500;
|
|
27
|
+
font-size: var(--text-sm);
|
|
28
|
+
height: 2.25rem;
|
|
29
|
+
cursor: pointer;
|
|
30
|
+
box-shadow: var(--shadow-xs);
|
|
31
|
+
transition:
|
|
32
|
+
background 150ms,
|
|
33
|
+
color 150ms;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.pagination-btn:hover:not(:disabled):not(.pagination-ellipsis) {
|
|
37
|
+
background: var(--color-ink-100);
|
|
38
|
+
color: var(--color-ink-900);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.pagination-btn-first {
|
|
42
|
+
border-radius: var(--radius-base) 0 0 var(--radius-base);
|
|
43
|
+
padding: 0 0.5rem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.pagination-btn-prev {
|
|
47
|
+
padding: 0 0.5rem;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.pagination-btn-next {
|
|
51
|
+
padding: 0 0.5rem;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.pagination-btn-last {
|
|
55
|
+
border-radius: 0 var(--radius-base) var(--radius-base) 0;
|
|
56
|
+
padding: 0 0.5rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.pagination-btn-page {
|
|
60
|
+
width: 2.25rem;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.pagination-btn-active {
|
|
64
|
+
color: var(--color-primary);
|
|
65
|
+
background: var(--color-ink-100);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.pagination-btn-disabled {
|
|
69
|
+
opacity: 0.5;
|
|
70
|
+
pointer-events: none;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.pagination-ellipsis {
|
|
74
|
+
cursor: default;
|
|
75
|
+
pointer-events: none;
|
|
76
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Label ── */
|
|
4
|
+
.progress-label {
|
|
5
|
+
@apply text-sm font-medium;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.progress-label-dark {
|
|
9
|
+
@apply text-ink-900;
|
|
10
|
+
}
|
|
11
|
+
.progress-label-brand {
|
|
12
|
+
@apply text-primary-700;
|
|
13
|
+
}
|
|
14
|
+
.progress-label-success {
|
|
15
|
+
@apply text-success-700;
|
|
16
|
+
}
|
|
17
|
+
.progress-label-danger {
|
|
18
|
+
@apply text-error-700;
|
|
19
|
+
}
|
|
20
|
+
.progress-label-warning {
|
|
21
|
+
@apply text-warning-700;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ── Outside header ── */
|
|
25
|
+
.progress-outside-header {
|
|
26
|
+
@apply flex justify-between mb-1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.progress-outside-value {
|
|
30
|
+
@apply text-sm font-medium text-ink-500;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* ── Track ── */
|
|
34
|
+
.progress-track {
|
|
35
|
+
@apply w-full bg-ink-200 rounded-full;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.progress-track-sm {
|
|
39
|
+
@apply h-1.5;
|
|
40
|
+
}
|
|
41
|
+
.progress-track-md {
|
|
42
|
+
@apply h-2;
|
|
43
|
+
}
|
|
44
|
+
.progress-track-lg {
|
|
45
|
+
@apply h-3;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.progress-track-inside {
|
|
49
|
+
@apply h-4;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* ── Bar ── */
|
|
53
|
+
.progress-bar {
|
|
54
|
+
@apply rounded-full transition-all duration-300;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.progress-bar-sm {
|
|
58
|
+
@apply h-1.5;
|
|
59
|
+
}
|
|
60
|
+
.progress-bar-md {
|
|
61
|
+
@apply h-2;
|
|
62
|
+
}
|
|
63
|
+
.progress-bar-lg {
|
|
64
|
+
@apply h-3;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* ── Bar inside (with text) ── */
|
|
68
|
+
.progress-bar-inside {
|
|
69
|
+
@apply h-4 text-xs font-medium text-white text-center p-0.5 leading-none
|
|
70
|
+
flex items-center justify-center;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* ── Bar variants ── */
|
|
74
|
+
.progress-bar-dark {
|
|
75
|
+
@apply bg-ink-900;
|
|
76
|
+
}
|
|
77
|
+
.progress-bar-brand {
|
|
78
|
+
@apply bg-primary;
|
|
79
|
+
}
|
|
80
|
+
.progress-bar-success {
|
|
81
|
+
@apply bg-success;
|
|
82
|
+
}
|
|
83
|
+
.progress-bar-danger {
|
|
84
|
+
@apply bg-error;
|
|
85
|
+
}
|
|
86
|
+
.progress-bar-warning {
|
|
87
|
+
@apply bg-warning;
|
|
88
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Wrapper ── */
|
|
4
|
+
.radio {
|
|
5
|
+
@apply inline-flex items-center gap-2 cursor-pointer select-none;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ── Hidden native input ── */
|
|
9
|
+
.radio-input {
|
|
10
|
+
@apply sr-only;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/* ── Custom circle ── */
|
|
14
|
+
.radio-circle {
|
|
15
|
+
@apply w-5 h-5 flex-shrink-0 rounded-full border-2 border-ink-300
|
|
16
|
+
transition-all duration-200;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.radio-input:checked + .radio-circle {
|
|
20
|
+
@apply border-primary;
|
|
21
|
+
box-shadow: inset 0 0 0 4px var(--color-primary);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.radio-input:focus-visible + .radio-circle {
|
|
25
|
+
@apply ring-4 ring-primary-200;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.radio-input:disabled ~ .radio-circle,
|
|
29
|
+
.radio-input:disabled ~ .radio-label {
|
|
30
|
+
@apply opacity-50 cursor-not-allowed;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.radio-input:disabled ~ .radio-circle {
|
|
34
|
+
@apply bg-surface-muted;
|
|
35
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Wrapper ── */
|
|
4
|
+
.select-wrapper {
|
|
5
|
+
@apply relative inline-block w-full;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/* ── Trigger ── */
|
|
9
|
+
.select-trigger {
|
|
10
|
+
@apply w-full appearance-none border border-ink-300 rounded-base bg-surface text-ink-900
|
|
11
|
+
pr-10 cursor-pointer text-left relative
|
|
12
|
+
transition-colors duration-200
|
|
13
|
+
focus:outline-none focus:ring-4 focus:ring-primary-200 focus:border-primary;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.select-disabled {
|
|
17
|
+
@apply opacity-50 cursor-not-allowed bg-surface-muted;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.select-placeholder {
|
|
21
|
+
@apply text-ink-400;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ── Sizes ── */
|
|
25
|
+
.select-sm {
|
|
26
|
+
@apply text-sm px-3 py-2;
|
|
27
|
+
}
|
|
28
|
+
.select-md {
|
|
29
|
+
@apply text-sm px-4 py-2.5;
|
|
30
|
+
}
|
|
31
|
+
.select-lg {
|
|
32
|
+
@apply text-base px-5 py-3;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* ── States ── */
|
|
36
|
+
.select-error {
|
|
37
|
+
@apply border-error-500 focus:ring-error-200 focus:border-error-500;
|
|
38
|
+
}
|
|
39
|
+
.select-success {
|
|
40
|
+
@apply border-success-500 focus:ring-success-200 focus:border-success-500;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* ── Chevron icon ── */
|
|
44
|
+
.select-icon {
|
|
45
|
+
@apply absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-ink-400
|
|
46
|
+
transition-transform duration-200;
|
|
47
|
+
}
|
|
48
|
+
.select-chevron-open {
|
|
49
|
+
@apply rotate-180;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/* ── Dropdown panel ── */
|
|
53
|
+
.select-panel {
|
|
54
|
+
@apply absolute z-50 mt-1 w-full bg-surface border border-ink-200 rounded-base shadow-lg
|
|
55
|
+
max-h-60 overflow-y-auto py-1 list-none m-0 p-0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* ── Option item ── */
|
|
59
|
+
.select-option {
|
|
60
|
+
@apply px-4 py-2.5 text-sm text-ink-900 cursor-pointer flex items-center gap-2
|
|
61
|
+
transition-colors duration-100
|
|
62
|
+
hover:bg-ink-50;
|
|
63
|
+
}
|
|
64
|
+
.select-option-selected {
|
|
65
|
+
@apply bg-primary-50 text-primary-700;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* ── Checkbox (multi-select) ── */
|
|
69
|
+
.select-checkbox {
|
|
70
|
+
@apply inline-flex items-center justify-center w-4 h-4 border border-ink-300 rounded-sm
|
|
71
|
+
bg-surface flex-shrink-0;
|
|
72
|
+
}
|
|
73
|
+
.select-checkbox-checked {
|
|
74
|
+
@apply bg-primary border-primary text-white;
|
|
75
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
@reference "tailwindcss";
|
|
2
|
+
|
|
3
|
+
/* ── Sidebar container ── */
|
|
4
|
+
.sidebar {
|
|
5
|
+
@apply fixed top-0 left-0 z-40 w-64 h-screen
|
|
6
|
+
bg-surface border-r border-ink-200
|
|
7
|
+
flex flex-col
|
|
8
|
+
transition-transform duration-200 ease-in-out;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.sidebar-with-header {
|
|
12
|
+
@apply pt-14;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.sidebar-hidden {
|
|
16
|
+
@apply -translate-x-full invisible pointer-events-none;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sidebar-visible {
|
|
20
|
+
@apply translate-x-0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* ── Header slot ── */
|
|
24
|
+
.sidebar-header {
|
|
25
|
+
@apply p-5 border-b border-ink-200 flex items-center justify-between;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* ── Scrollable body ── */
|
|
29
|
+
.sidebar-body {
|
|
30
|
+
@apply mt-6 flex-1 overflow-y-auto p-4;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* ── Footer slot ── */
|
|
34
|
+
.sidebar-footer {
|
|
35
|
+
@apply p-4 border-t border-ink-200;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ── Hover trigger strip (left edge, invisible) ── */
|
|
39
|
+
.sidebar-trigger {
|
|
40
|
+
@apply fixed top-0 left-0 z-30 w-3 h-screen;
|
|
41
|
+
}
|