@iyulab/components 1.18.0 → 1.20.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 +190 -0
- package/dist/_virtual/_glob-assets_raw/dark.css.e8ac080d.js +1 -1
- package/dist/_virtual/_glob-assets_raw/light.css.637cb2f8.js +1 -1
- package/dist/components/UElement.styles.js +8 -3
- package/dist/components/alert/UAlert.styles.js +3 -1
- package/dist/components/badge/UBadge.d.ts +2 -1
- package/dist/components/badge/UBadge.styles.js +25 -1
- package/dist/components/button/UButton.d.ts +22 -3
- package/dist/components/button/UButton.styles.js +97 -8
- package/dist/components/card/UCard.styles.js +2 -2
- package/dist/components/carousel/UCarousel.styles.js +2 -2
- package/dist/components/checkbox/UCheckbox.d.ts +2 -1
- package/dist/components/checkbox/UCheckbox.styles.js +37 -4
- package/dist/components/dialog/UDialog.styles.js +1 -1
- package/dist/components/drawer/UDrawer.styles.js +1 -1
- package/dist/components/input/UInput.styles.js +7 -7
- package/dist/components/menu-item/UMenuItem.styles.js +1 -1
- package/dist/components/progress-bar/UProgressBar.styles.js +5 -5
- package/dist/components/progress-ring/UProgressRing.styles.js +5 -5
- package/dist/components/rating/URating.styles.js +2 -2
- package/dist/components/select/USelect.styles.js +9 -7
- package/dist/components/slider/USlider.styles.js +10 -2
- package/dist/components/spinner/USpinner.d.ts +2 -1
- package/dist/components/spinner/USpinner.styles.js +8 -0
- package/dist/components/split-panel/USplitPanel.styles.js +1 -1
- package/dist/components/switch/USwitch.styles.js +3 -3
- package/dist/components/tab-panel/UTabPanel.styles.js +1 -1
- package/dist/components/tag/UTag.d.ts +6 -1
- package/dist/components/tag/UTag.styles.js +54 -1
- package/dist/components/textarea/UTextarea.styles.js +6 -6
- package/dist/components/tooltip/UTooltip.styles.js +1 -1
- package/dist/styles/dark.css +12 -2
- package/dist/styles/light.css +27 -2
- package/package.json +4 -3
|
@@ -5,7 +5,7 @@ var styles = css`
|
|
|
5
5
|
display: flex;
|
|
6
6
|
border-radius: var(--u-radius-xl, 8px);
|
|
7
7
|
background-color: var(--u-panel-bg-color, #FFFFFF);
|
|
8
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.
|
|
8
|
+
box-shadow: var(--u-shadow-md, 0 2px 8px rgba(0, 0, 0, 0.12));
|
|
9
9
|
overflow: hidden;
|
|
10
10
|
|
|
11
11
|
--card-border-width: 1px;
|
|
@@ -41,7 +41,7 @@ var styles = css`
|
|
|
41
41
|
}
|
|
42
42
|
:host([hoverable]:hover) {
|
|
43
43
|
transform: translateY(-2px);
|
|
44
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.
|
|
44
|
+
box-shadow: var(--u-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.16));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.media {
|
|
@@ -60,11 +60,11 @@ var styles = css`
|
|
|
60
60
|
font-size: 20px;
|
|
61
61
|
color: var(--u-neutral-900, #212121);
|
|
62
62
|
background-color: var(--u-neutral-100, #F5F5F5);
|
|
63
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.
|
|
63
|
+
box-shadow: var(--u-shadow-md, 0 2px 8px rgba(0, 0, 0, 0.12));
|
|
64
64
|
}
|
|
65
65
|
.nav-button:hover {
|
|
66
66
|
background-color: var(--u-neutral-200, #EEEEEE);
|
|
67
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.
|
|
67
|
+
box-shadow: var(--u-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.16));
|
|
68
68
|
transform: translateY(-50%) scale(1.1);
|
|
69
69
|
}
|
|
70
70
|
.nav-button:active {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { PropertyValues } from 'lit';
|
|
2
2
|
import { UFormControlElement } from '../UFormControlElement.js';
|
|
3
3
|
export type CheckboxVariant = "filled" | "outline";
|
|
4
|
-
|
|
4
|
+
/** 역할 축(`primary`…`danger`, 의미 · 리브랜딩을 따라옴)과 장식 축(`blue`…, 색 자체 · 면역)이 병존한다. */
|
|
5
|
+
export type CheckboxColor = "primary" | "info" | "success" | "warning" | "danger" | "blue" | "green" | "red" | "orange" | "teal" | "cyan" | "purple" | "pink" | "neutral";
|
|
5
6
|
/**
|
|
6
7
|
* 선택/해제 상태를 토글하는 체크박스 컴포넌트입니다.
|
|
7
8
|
* indeterminate 상태도 지원합니다.
|
|
@@ -43,7 +43,8 @@ var styles = css`
|
|
|
43
43
|
/* === Variant: filled - 배경 채움 === */
|
|
44
44
|
:host([variant="filled"][checked]),
|
|
45
45
|
:host([variant="filled"][indeterminate]) {
|
|
46
|
-
|
|
46
|
+
/* 체크 표시가 **채운 면 위**에 선다 — 역할 축에서만 on-color 로 갈린다(장식 축은 폴백). */
|
|
47
|
+
--checkbox-color: var(--checkbox-hue-on-fill, var(--u-neutral-100, #F5F5F5));
|
|
47
48
|
--checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
48
49
|
--checkbox-background-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
49
50
|
}
|
|
@@ -51,11 +52,43 @@ var styles = css`
|
|
|
51
52
|
/* === Variant: outline - 테두리만 === */
|
|
52
53
|
:host([variant="outline"][checked]),
|
|
53
54
|
:host([variant="outline"][indeterminate]) {
|
|
54
|
-
|
|
55
|
+
/* 여기서는 같은 표시가 **바탕 위**에 선다 — 면 단이 아니라 -strong 이 맡는다. */
|
|
56
|
+
--checkbox-color: var(--checkbox-hue-strong, var(--checkbox-hue, var(--checkbox-fill-color)));
|
|
55
57
|
--checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
56
58
|
--checkbox-background-color: transparent;
|
|
57
59
|
}
|
|
58
60
|
|
|
61
|
+
/* ==========================================================================
|
|
62
|
+
역할 축 — 의미 슬롯. 장식 축(아래)과 달리 팔레트가 아니라 역할 토큰을 읽는다.
|
|
63
|
+
슬롯이 셋인 이유는 체크 표시가 두 자리에 서기 때문이다 —
|
|
64
|
+
filled 는 **채운 면 위**(그래서 on-color), outline 은 **바탕 위**(그래서 -strong).
|
|
65
|
+
========================================================================== */
|
|
66
|
+
:host([color="primary"]) {
|
|
67
|
+
--checkbox-hue: var(--u-primary-color, #1976D2);
|
|
68
|
+
--checkbox-hue-on-fill: var(--u-primary-txt-color, #FFFFFF);
|
|
69
|
+
--checkbox-hue-strong: var(--u-primary-color-strong, #1565C0);
|
|
70
|
+
}
|
|
71
|
+
:host([color="info"]) {
|
|
72
|
+
--checkbox-hue: var(--u-info-color, #1976D2);
|
|
73
|
+
--checkbox-hue-on-fill: var(--u-info-txt-color, #FFFFFF);
|
|
74
|
+
--checkbox-hue-strong: var(--u-info-color-strong, #1565C0);
|
|
75
|
+
}
|
|
76
|
+
:host([color="success"]) {
|
|
77
|
+
--checkbox-hue: var(--u-success-color, #2E7D32);
|
|
78
|
+
--checkbox-hue-on-fill: var(--u-success-txt-color, #FFFFFF);
|
|
79
|
+
--checkbox-hue-strong: var(--u-success-color-strong, #1B5E20);
|
|
80
|
+
}
|
|
81
|
+
:host([color="warning"]) {
|
|
82
|
+
--checkbox-hue: var(--u-warning-color, #FDD835);
|
|
83
|
+
--checkbox-hue-on-fill: var(--u-warning-txt-color, #000000);
|
|
84
|
+
--checkbox-hue-strong: var(--u-warning-color-strong, #8A4A00);
|
|
85
|
+
}
|
|
86
|
+
:host([color="danger"]) {
|
|
87
|
+
--checkbox-hue: var(--u-danger-color, #D32F2F);
|
|
88
|
+
--checkbox-hue-on-fill: var(--u-danger-txt-color, #FFFFFF);
|
|
89
|
+
--checkbox-hue-strong: var(--u-danger-color-strong, #C62828);
|
|
90
|
+
}
|
|
91
|
+
|
|
59
92
|
/* ==========================================================================
|
|
60
93
|
장식 축 — color= 는 hue 슬롯만 채운다. variant 규칙이 폴백과 함께 읽는다.
|
|
61
94
|
기본값 blue 는 규칙이 없다 = 슬롯이 비어 브랜드 훅(--checkbox-fill-color)을 탄다.
|
|
@@ -104,8 +137,8 @@ var styles = css`
|
|
|
104
137
|
}
|
|
105
138
|
input:focus-visible ~ .checkbox {
|
|
106
139
|
box-shadow:
|
|
107
|
-
0 0 0 1px var(--u-input-border-color-focus, #
|
|
108
|
-
0 0 0 3px
|
|
140
|
+
0 0 0 1px var(--u-input-border-color-focus, #1565C0),
|
|
141
|
+
0 0 0 3px color-mix(in srgb, var(--u-primary-color-strong, #1565C0) 22%, transparent);
|
|
109
142
|
}
|
|
110
143
|
|
|
111
144
|
/* 체크박스 외형 */
|
|
@@ -70,7 +70,7 @@ var styles = css`
|
|
|
70
70
|
border: 1px solid var(--u-border-color, color-mix(in srgb, CanvasText 20%, Canvas));
|
|
71
71
|
border-radius: var(--u-radius-lg, 6px);
|
|
72
72
|
background: var(--u-panel-bg-color, Canvas);
|
|
73
|
-
box-shadow: 0
|
|
73
|
+
box-shadow: var(--u-shadow-xl, 0 6px 18px rgba(0, 0, 0, 0.24));
|
|
74
74
|
pointer-events: auto;
|
|
75
75
|
opacity: 0;
|
|
76
76
|
transform: scale(0.92);
|
|
@@ -57,7 +57,7 @@ var styles = css`
|
|
|
57
57
|
display: flex;
|
|
58
58
|
flex-direction: column;
|
|
59
59
|
background: var(--u-panel-bg-color, Canvas);
|
|
60
|
-
box-shadow: 0
|
|
60
|
+
box-shadow: var(--u-shadow-xl, 0 6px 18px rgba(0, 0, 0, 0.24));
|
|
61
61
|
pointer-events: auto;
|
|
62
62
|
/*
|
|
63
63
|
* easeOutQuart (cubic-bezier(0.22, 1, 0.36, 1)) — 빠르게 시작해서 부드럽게 정착.
|
|
@@ -38,10 +38,10 @@ var styles = css`
|
|
|
38
38
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
39
39
|
}
|
|
40
40
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
41
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
41
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1565C0);
|
|
42
42
|
}
|
|
43
43
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
44
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
44
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #C62828);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/* ===== Variant: filled ===== */
|
|
@@ -63,11 +63,11 @@ var styles = css`
|
|
|
63
63
|
}
|
|
64
64
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
65
65
|
box-shadow: none;
|
|
66
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
66
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
67
67
|
}
|
|
68
68
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
69
69
|
box-shadow: none;
|
|
70
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
70
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/* ===== Variant: underlined ===== */
|
|
@@ -90,12 +90,12 @@ var styles = css`
|
|
|
90
90
|
}
|
|
91
91
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
92
92
|
box-shadow: none;
|
|
93
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
93
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
94
94
|
border-bottom-width: 2px;
|
|
95
95
|
}
|
|
96
96
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
97
97
|
box-shadow: none;
|
|
98
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
98
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/* ===== Variant: borderless ===== */
|
|
@@ -175,7 +175,7 @@ var styles = css`
|
|
|
175
175
|
border: 1px solid var(--u-border-color, #E0E0E0);
|
|
176
176
|
border-radius: var(--u-radius-lg, 6px);
|
|
177
177
|
background-color: var(--u-panel-bg-color, #FFFFFF);
|
|
178
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.
|
|
178
|
+
box-shadow: var(--u-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.16));
|
|
179
179
|
overflow-x: auto;
|
|
180
180
|
overflow-y: auto;
|
|
181
181
|
}
|
|
@@ -139,7 +139,7 @@ var styles = css`
|
|
|
139
139
|
border: 1px solid var(--u-border-color, #E0E0E0);
|
|
140
140
|
border-radius: var(--u-radius-md, 4px);
|
|
141
141
|
background-color: var(--u-panel-bg-color, #FFFFFF);
|
|
142
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.
|
|
142
|
+
box-shadow: var(--u-shadow-md, 0 2px 8px rgba(0, 0, 0, 0.12));
|
|
143
143
|
transform: scale(0.8);
|
|
144
144
|
transition: opacity 0.2s ease, visibility 0s 0.2s, transform 0.2s ease;
|
|
145
145
|
}
|
|
@@ -3,26 +3,26 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
--progress-bar-height: 0.5em;
|
|
6
|
-
--progress-bar-color: var(--u-primary-color, #
|
|
6
|
+
--progress-bar-color: var(--u-primary-color-strong, #1565C0);
|
|
7
7
|
--progress-bar-buffer-color: color-mix(in srgb, var(--progress-bar-color) 35%, var(--u-bg-color, #FFFFFF));
|
|
8
8
|
--progress-bar-track-color: var(--u-neutral-200, #EEEEEE);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/* === Status Colors === */
|
|
12
12
|
:host([status="success"]) {
|
|
13
|
-
--progress-bar-color: var(--u-success-color, #
|
|
13
|
+
--progress-bar-color: var(--u-success-color-strong, #1B5E20);
|
|
14
14
|
--progress-bar-buffer-color: var(--u-success-color-weakest, #A5D6A7);
|
|
15
15
|
}
|
|
16
16
|
:host([status="warning"]) {
|
|
17
|
-
--progress-bar-color: var(--u-warning-color-
|
|
17
|
+
--progress-bar-color: var(--u-warning-color-strong, #8A4A00);
|
|
18
18
|
--progress-bar-buffer-color: var(--u-warning-color-weakest, #FFF59D);
|
|
19
19
|
}
|
|
20
20
|
:host([status="error"]) {
|
|
21
|
-
--progress-bar-color: var(--u-danger-color, #
|
|
21
|
+
--progress-bar-color: var(--u-danger-color-strong, #C62828);
|
|
22
22
|
--progress-bar-buffer-color: var(--u-danger-color-weakest, #EF9A9A);
|
|
23
23
|
}
|
|
24
24
|
:host([status="info"]) {
|
|
25
|
-
--progress-bar-color: var(--u-info-color-
|
|
25
|
+
--progress-bar-color: var(--u-info-color-strong, #1565C0);
|
|
26
26
|
--progress-bar-buffer-color: var(--u-info-color-weakest, #90CAF9);
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -3,7 +3,7 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
--progress-ring-size: 6em;
|
|
6
|
-
--progress-ring-color: var(--u-primary-color, #
|
|
6
|
+
--progress-ring-color: var(--u-primary-color-strong, #1565C0);
|
|
7
7
|
--progress-ring-track-width: 6;
|
|
8
8
|
--progress-ring-track-color: var(--u-neutral-200, #EEEEEE);
|
|
9
9
|
--progress-ring-buffer-color: color-mix(in srgb, var(--progress-ring-color) 35%, var(--u-bg-color, #FFFFFF));
|
|
@@ -11,19 +11,19 @@ var styles = css`
|
|
|
11
11
|
|
|
12
12
|
/* === Status Colors === */
|
|
13
13
|
:host([status="success"]) {
|
|
14
|
-
--progress-ring-color: var(--u-success-color, #
|
|
14
|
+
--progress-ring-color: var(--u-success-color-strong, #1B5E20);
|
|
15
15
|
--progress-ring-buffer-color: var(--u-success-color-weakest, #A5D6A7);
|
|
16
16
|
}
|
|
17
17
|
:host([status="warning"]) {
|
|
18
|
-
--progress-ring-color: var(--u-warning-color-
|
|
18
|
+
--progress-ring-color: var(--u-warning-color-strong, #8A4A00);
|
|
19
19
|
--progress-ring-buffer-color: var(--u-warning-color-weakest, #FFF59D);
|
|
20
20
|
}
|
|
21
21
|
:host([status="error"]) {
|
|
22
|
-
--progress-ring-color: var(--u-danger-color, #
|
|
22
|
+
--progress-ring-color: var(--u-danger-color-strong, #C62828);
|
|
23
23
|
--progress-ring-buffer-color: var(--u-danger-color-weakest, #EF9A9A);
|
|
24
24
|
}
|
|
25
25
|
:host([status="info"]) {
|
|
26
|
-
--progress-ring-color: var(--u-info-color-
|
|
26
|
+
--progress-ring-color: var(--u-info-color-strong, #1565C0);
|
|
27
27
|
--progress-ring-buffer-color: var(--u-info-color-weakest, #90CAF9);
|
|
28
28
|
}
|
|
29
29
|
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/rating/URating.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--rating-symbol-color: var(--u-warning-color-
|
|
5
|
+
--rating-symbol-color: var(--u-warning-color-strong, #8A4A00);
|
|
6
6
|
--rating-symbol-off-color: var(--u-neutral-300, #E0E0E0);
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -32,7 +32,7 @@ var styles = css`
|
|
|
32
32
|
transition: color 0.15s ease, transform 0.15s ease;
|
|
33
33
|
}
|
|
34
34
|
.symbol:focus-visible {
|
|
35
|
-
outline: 2px solid var(--u-primary-color-
|
|
35
|
+
outline: 2px solid var(--u-primary-color-strong, #1565C0);
|
|
36
36
|
outline-offset: 2px;
|
|
37
37
|
}
|
|
38
38
|
:host(:not([disabled]):not([readonly])) .symbol:hover {
|
|
@@ -44,10 +44,10 @@ var styles = css`
|
|
|
44
44
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
45
45
|
}
|
|
46
46
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
47
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
47
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1565C0);
|
|
48
48
|
}
|
|
49
49
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
50
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
50
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #C62828);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/* ===== Variant: filled ===== */
|
|
@@ -69,11 +69,11 @@ var styles = css`
|
|
|
69
69
|
}
|
|
70
70
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
71
71
|
box-shadow: none;
|
|
72
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
72
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
73
73
|
}
|
|
74
74
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
75
75
|
box-shadow: none;
|
|
76
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
76
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
/* ===== Variant: underlined ===== */
|
|
@@ -96,12 +96,12 @@ var styles = css`
|
|
|
96
96
|
}
|
|
97
97
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
98
98
|
box-shadow: none;
|
|
99
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
99
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
100
100
|
border-bottom-width: 2px;
|
|
101
101
|
}
|
|
102
102
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
103
103
|
box-shadow: none;
|
|
104
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
104
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
/* ===== Variant: borderless ===== */
|
|
@@ -120,6 +120,8 @@ var styles = css`
|
|
|
120
120
|
.count {
|
|
121
121
|
color: var(--u-txt-color-weak, #757575);
|
|
122
122
|
line-height: 1.25;
|
|
123
|
+
/* n / m 은 제자리에서 n 이 바뀐다 — 비례폭이면 선택할 때마다 라벨 줄이 흔들린다 */
|
|
124
|
+
font-variant-numeric: tabular-nums;
|
|
123
125
|
}
|
|
124
126
|
|
|
125
127
|
.text-content {
|
|
@@ -173,7 +175,7 @@ var styles = css`
|
|
|
173
175
|
border: 1px solid var(--u-border-color, #E0E0E0);
|
|
174
176
|
border-radius: var(--u-radius-lg, 6px);
|
|
175
177
|
background-color: var(--u-panel-bg-color, #FFFFFF);
|
|
176
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.
|
|
178
|
+
box-shadow: var(--u-shadow-lg, 0 4px 12px rgba(0, 0, 0, 0.16));
|
|
177
179
|
overflow-x: hidden;
|
|
178
180
|
overflow-y: auto;
|
|
179
181
|
}
|
|
@@ -21,6 +21,14 @@ var styles = css`
|
|
|
21
21
|
font-family: var(--u-font-base);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/* 라이브러리가 **스스로 그리는 숫자**는 고정폭 자릿수로 낸다.
|
|
25
|
+
둘 다 제자리에서 값이 바뀌는 자리라 비례폭이면 드래그 중 글자가 흔들린다.
|
|
26
|
+
★툴팁은 슬롯을 건너 상속으로 닿는다 — font-variant-numeric 은 상속 프로퍼티다. */
|
|
27
|
+
[slot="label-aside"],
|
|
28
|
+
u-tooltip[part="thumb-tooltip"] {
|
|
29
|
+
font-variant-numeric: tabular-nums;
|
|
30
|
+
}
|
|
31
|
+
|
|
24
32
|
.container {
|
|
25
33
|
position: relative;
|
|
26
34
|
height: var(--slider-thumb-size);
|
|
@@ -67,14 +75,14 @@ var styles = css`
|
|
|
67
75
|
border: 2px solid var(--slider-thumb-border-color);
|
|
68
76
|
border-radius: var(--u-radius-circle, 50%);
|
|
69
77
|
background: var(--slider-thumb-color);
|
|
70
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.
|
|
78
|
+
box-shadow: var(--u-shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
|
|
71
79
|
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
|
72
80
|
cursor: pointer;
|
|
73
81
|
}
|
|
74
82
|
.thumb:hover .thumb-content,
|
|
75
83
|
.thumb:active .thumb-content {
|
|
76
84
|
transform: scale(1.15);
|
|
77
|
-
box-shadow: 0
|
|
85
|
+
box-shadow: var(--u-shadow-md, 0 2px 8px rgba(0, 0, 0, 0.12));
|
|
78
86
|
}
|
|
79
87
|
.thumb:focus-visible .thumb-content {
|
|
80
88
|
box-shadow: 0 0 0 1px var(--slider-fill-color);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { UElement } from '../UElement.js';
|
|
2
|
-
|
|
2
|
+
/** 역할 축(`primary`…`danger`, 의미 · 리브랜딩을 따라옴)과 장식 축(`blue`…, 색 자체 · 면역)이 병존한다. */
|
|
3
|
+
export type SpinnerColor = "neutral" | "primary" | "info" | "success" | "warning" | "danger" | "blue" | "green" | "yellow" | "red" | "orange" | "teal" | "cyan" | "purple" | "pink";
|
|
3
4
|
/**
|
|
4
5
|
* 로딩 상태를 나타내는 회전 스피너 컴포넌트입니다.
|
|
5
6
|
*
|
|
@@ -9,6 +9,14 @@ var styles = css`
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/* Color variants */
|
|
12
|
+
/* 역할 축 — 스피너는 **바탕 위의 그래픽**이므로 면 단(-color)이 아니라 -strong 을
|
|
13
|
+
읽는다. 다크에서 -color 는 바탕 위 3.07 까지 떨어진다(Cycle 141 실측). */
|
|
14
|
+
:host([color="primary"]) { --spinner-indicator-color: var(--u-primary-color-strong, #1565C0); }
|
|
15
|
+
:host([color="info"]) { --spinner-indicator-color: var(--u-info-color-strong, #1565C0); }
|
|
16
|
+
:host([color="success"]) { --spinner-indicator-color: var(--u-success-color-strong, #1B5E20); }
|
|
17
|
+
:host([color="warning"]) { --spinner-indicator-color: var(--u-warning-color-strong, #8A4A00); }
|
|
18
|
+
:host([color="danger"]) { --spinner-indicator-color: var(--u-danger-color-strong, #C62828); }
|
|
19
|
+
|
|
12
20
|
:host([color="blue"]) { --spinner-indicator-color: var(--u-blue-600, #1E88E5); }
|
|
13
21
|
:host([color="green"]) { --spinner-indicator-color: var(--u-green-600, #43A047); }
|
|
14
22
|
:host([color="yellow"]) { --spinner-indicator-color: var(--u-yellow-600, #FDD835); }
|
|
@@ -5,7 +5,7 @@ var styles = css`
|
|
|
5
5
|
--splitter-size: 4px;
|
|
6
6
|
--splitter-color: var(--u-neutral-200, #EEEEEE);
|
|
7
7
|
--splitter-color-hover: var(--u-primary-color-weaker, #64B5F6);
|
|
8
|
-
--splitter-color-active: var(--u-primary-color-
|
|
8
|
+
--splitter-color-active: var(--u-primary-color-strong, #1565C0);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
:host {
|
|
@@ -56,8 +56,8 @@ var styles = css`
|
|
|
56
56
|
}
|
|
57
57
|
input:focus-visible ~ .track {
|
|
58
58
|
box-shadow:
|
|
59
|
-
0 0 0 1px var(--u-input-border-color-focus, #
|
|
60
|
-
0 0 0 3px
|
|
59
|
+
0 0 0 1px var(--u-input-border-color-focus, #1565C0),
|
|
60
|
+
0 0 0 3px color-mix(in srgb, var(--u-primary-color-strong, #1565C0) 22%, transparent);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
/* === 트랙 === */
|
|
@@ -123,7 +123,7 @@ var styles = css`
|
|
|
123
123
|
height: var(--switch-thumb-size);
|
|
124
124
|
border-radius: var(--switch-radius);
|
|
125
125
|
background: var(--switch-thumb-color);
|
|
126
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.
|
|
126
|
+
box-shadow: var(--u-shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
|
|
127
127
|
overflow: hidden;
|
|
128
128
|
transition:
|
|
129
129
|
transform var(--switch-duration) cubic-bezier(0.4, 0, 0.2, 1),
|
|
@@ -188,7 +188,7 @@ var styles = css`
|
|
|
188
188
|
:host([variant="pill"]) ::slotted(u-tab[active]) {
|
|
189
189
|
border-color: var(--u-border-color, #E0E0E0);
|
|
190
190
|
background-color: var(--u-neutral-0, #FFFFFF);
|
|
191
|
-
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
|
|
191
|
+
box-shadow: var(--u-shadow-sm, 0 1px 3px rgba(0, 0, 0, 0.08));
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
/* Variant: plain */
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { UElement } from '../UElement.js';
|
|
2
2
|
export type TagVariant = "solid" | "surface" | "filled" | "outlined";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* 두 축이 병존한다 — **역할 축**(`primary`·`info`·`success`·`warning`·`danger`)은 *의미*를
|
|
5
|
+
* 말하고 리브랜딩을 따라오며 대비 계약을 물려받는다. **장식 축**(`blue`·`purple` …)은
|
|
6
|
+
* *색 자체*를 말하고 리브랜딩에 의도적으로 면역이다.
|
|
7
|
+
*/
|
|
8
|
+
export type TagColor = "neutral" | "primary" | "info" | "success" | "warning" | "danger" | "blue" | "green" | "yellow" | "red" | "orange" | "teal" | "cyan" | "purple" | "pink";
|
|
4
9
|
/**
|
|
5
10
|
* 레이블, 카테고리, 상태 등을 표시하는 태그 컴포넌트입니다.
|
|
6
11
|
*
|
|
@@ -8,6 +8,57 @@ var styles = css`
|
|
|
8
8
|
--tag-border-color: transparent;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
/* ==========================================================================
|
|
12
|
+
역할 축 — 의미 슬롯 매핑
|
|
13
|
+
color="danger" 는 색이 아니라 *"위험"* 을 뜻한다. 장식 축(아래)과 달리 팔레트가 아니라
|
|
14
|
+
**역할 토큰**을 읽으므로 리브랜딩을 따라오고, 대비 계약이 지키는 짝을 물려받는다.
|
|
15
|
+
|
|
16
|
+
슬롯이 여섯인 이유는 자리마다 대비 요구가 다르기 때문이다(실측, 두 테마 전건 AA):
|
|
17
|
+
solid 면 --u-{role}-color + 그 위 글자 --u-{role}-txt-color (4.60~15.05)
|
|
18
|
+
surface 연한 면 --u-{role}-bg-color + 그 위 글자 --u-{role}-color-strong (4.58~7.00)
|
|
19
|
+
outlined 바탕 위 글자 --u-{role}-color-strong (계약 검사 대상)
|
|
20
|
+
========================================================================== */
|
|
21
|
+
:host([color="primary"]) {
|
|
22
|
+
--tag-hue-solid: var(--u-primary-color, #1976D2);
|
|
23
|
+
--tag-hue-on-solid: var(--u-primary-txt-color, #FFFFFF);
|
|
24
|
+
--tag-hue-line: var(--u-primary-color-weak, #2196F3);
|
|
25
|
+
--tag-hue-surface: var(--u-primary-bg-color, #E3F2FD);
|
|
26
|
+
--tag-hue-text: var(--u-primary-color-strong, #1565C0);
|
|
27
|
+
--tag-hue-text-outlined: var(--u-primary-color-strong, #1565C0);
|
|
28
|
+
}
|
|
29
|
+
:host([color="info"]) {
|
|
30
|
+
--tag-hue-solid: var(--u-info-color, #1976D2);
|
|
31
|
+
--tag-hue-on-solid: var(--u-info-txt-color, #FFFFFF);
|
|
32
|
+
--tag-hue-line: var(--u-info-color-weak, #2196F3);
|
|
33
|
+
--tag-hue-surface: var(--u-info-bg-color, #E3F2FD);
|
|
34
|
+
--tag-hue-text: var(--u-info-color-strong, #1565C0);
|
|
35
|
+
--tag-hue-text-outlined: var(--u-info-color-strong, #1565C0);
|
|
36
|
+
}
|
|
37
|
+
:host([color="success"]) {
|
|
38
|
+
--tag-hue-solid: var(--u-success-color, #2E7D32);
|
|
39
|
+
--tag-hue-on-solid: var(--u-success-txt-color, #FFFFFF);
|
|
40
|
+
--tag-hue-line: var(--u-success-color-weak, #4CAF50);
|
|
41
|
+
--tag-hue-surface: var(--u-success-bg-color, #E8F5E9);
|
|
42
|
+
--tag-hue-text: var(--u-success-color-strong, #1B5E20);
|
|
43
|
+
--tag-hue-text-outlined: var(--u-success-color-strong, #1B5E20);
|
|
44
|
+
}
|
|
45
|
+
:host([color="warning"]) {
|
|
46
|
+
--tag-hue-solid: var(--u-warning-color, #FDD835);
|
|
47
|
+
--tag-hue-on-solid: var(--u-warning-txt-color, #000000);
|
|
48
|
+
--tag-hue-line: var(--u-warning-color-weak, #FFEB3B);
|
|
49
|
+
--tag-hue-surface: var(--u-warning-bg-color, #FFF59D);
|
|
50
|
+
--tag-hue-text: var(--u-warning-color-strong, #8A4A00);
|
|
51
|
+
--tag-hue-text-outlined: var(--u-warning-color-strong, #8A4A00);
|
|
52
|
+
}
|
|
53
|
+
:host([color="danger"]) {
|
|
54
|
+
--tag-hue-solid: var(--u-danger-color, #D32F2F);
|
|
55
|
+
--tag-hue-on-solid: var(--u-danger-txt-color, #FFFFFF);
|
|
56
|
+
--tag-hue-line: var(--u-danger-color-weak, #F44336);
|
|
57
|
+
--tag-hue-surface: var(--u-danger-bg-color, #FFEBEE);
|
|
58
|
+
--tag-hue-text: var(--u-danger-color-strong, #C62828);
|
|
59
|
+
--tag-hue-text-outlined: var(--u-danger-color-strong, #C62828);
|
|
60
|
+
}
|
|
61
|
+
|
|
11
62
|
/* ==========================================================================
|
|
12
63
|
장식 축 — 색 슬롯 매핑
|
|
13
64
|
color="purple" 에는 역할 의미가 없다(장식이다). 그래서 역할 토큰이 아니라
|
|
@@ -82,7 +133,9 @@ var styles = css`
|
|
|
82
133
|
|
|
83
134
|
/* Variant: solid (강한 채움, 색 미지정 시 --tag-fill-color = 브랜드) */
|
|
84
135
|
:host([variant="solid"]) {
|
|
85
|
-
|
|
136
|
+
/* 면 위의 글자. 장식 축은 슬롯이 비어 흰색으로 떨어진다(현행 보존) — 역할 축에서만
|
|
137
|
+
갈린다. warning 이 그 이유다: 노란 면 위의 흰 글자는 읽히지 않는다. */
|
|
138
|
+
--tag-color: var(--tag-hue-on-solid, var(--u-neutral-0, #FFFFFF));
|
|
86
139
|
--tag-bg-color: var(--tag-hue-solid, var(--tag-fill-color));
|
|
87
140
|
--tag-border-color: var(--tag-hue-solid, var(--tag-fill-color));
|
|
88
141
|
}
|
|
@@ -26,10 +26,10 @@ var styles = css`
|
|
|
26
26
|
box-shadow: 0 0 0 1px var(--u-input-border-color-hover, #BDBDBD);
|
|
27
27
|
}
|
|
28
28
|
:host(:not([readonly]):not([disabled])) .container:focus-within {
|
|
29
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #
|
|
29
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-focus, #1565C0);
|
|
30
30
|
}
|
|
31
31
|
:host([invalid]:not([readonly]):not([disabled])) .container {
|
|
32
|
-
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #
|
|
32
|
+
box-shadow: 0 0 0 1px var(--u-input-border-color-invalid, #C62828);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/* ===== Variant: filled ===== */
|
|
@@ -51,11 +51,11 @@ var styles = css`
|
|
|
51
51
|
}
|
|
52
52
|
:host([variant="filled"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
53
53
|
box-shadow: none;
|
|
54
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
54
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
55
55
|
}
|
|
56
56
|
:host([variant="filled"][invalid]:not([readonly]):not([disabled])) .container {
|
|
57
57
|
box-shadow: none;
|
|
58
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
58
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
/* ===== Variant: underlined ===== */
|
|
@@ -78,12 +78,12 @@ var styles = css`
|
|
|
78
78
|
}
|
|
79
79
|
:host([variant="underlined"]:not([readonly]):not([disabled])) .container:focus-within {
|
|
80
80
|
box-shadow: none;
|
|
81
|
-
border-bottom-color: var(--u-input-border-color-focus, #
|
|
81
|
+
border-bottom-color: var(--u-input-border-color-focus, #1565C0);
|
|
82
82
|
border-bottom-width: 2px;
|
|
83
83
|
}
|
|
84
84
|
:host([variant="underlined"][invalid]:not([readonly]):not([disabled])) .container {
|
|
85
85
|
box-shadow: none;
|
|
86
|
-
border-bottom-color: var(--u-input-border-color-invalid, #
|
|
86
|
+
border-bottom-color: var(--u-input-border-color-invalid, #C62828);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/* ===== Variant: borderless ===== */
|
|
@@ -12,7 +12,7 @@ var styles = css`
|
|
|
12
12
|
line-height: 1.25;
|
|
13
13
|
border-radius: var(--u-radius-md, 4px);
|
|
14
14
|
background-color: var(--u-tooltip-bg-color, rgba(0, 0, 0, 0.75));
|
|
15
|
-
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.
|
|
15
|
+
box-shadow: var(--u-shadow-xl, 0 6px 18px rgba(0, 0, 0, 0.24));
|
|
16
16
|
transform: scale(0.9);
|
|
17
17
|
transition: opacity 0.2s ease, transform 0.2s ease, visibility 0s 0.2s;
|
|
18
18
|
|
package/dist/styles/dark.css
CHANGED
|
@@ -246,10 +246,12 @@
|
|
|
246
246
|
--u-border-color-strong: var(--u-neutral-500);
|
|
247
247
|
--u-border-color-hover: var(--u-neutral-500);
|
|
248
248
|
|
|
249
|
+
/* ★상태 테두리는 `-strong` 단이다 — light.css 의 같은 자리 주석 참조.
|
|
250
|
+
이 테마가 실제로 미달이었다: focus 2.74 · invalid 2.44 → 4.74 / 4.34. */
|
|
249
251
|
--u-input-border-color: var(--u-neutral-400);
|
|
250
252
|
--u-input-border-color-hover: var(--u-neutral-500);
|
|
251
|
-
--u-input-border-color-focus: var(--u-primary-color);
|
|
252
|
-
--u-input-border-color-invalid: var(--u-danger-color);
|
|
253
|
+
--u-input-border-color-focus: var(--u-primary-color-strong);
|
|
254
|
+
--u-input-border-color-invalid: var(--u-danger-color-strong);
|
|
253
255
|
|
|
254
256
|
/* Background Colors */
|
|
255
257
|
--u-bg-color: var(--u-neutral-100);
|
|
@@ -285,6 +287,14 @@
|
|
|
285
287
|
--u-shadow-color-strong: rgba(0, 0, 0, 0.45);
|
|
286
288
|
--u-shadow-color-stronger: rgba(0, 0, 0, 0.60);
|
|
287
289
|
|
|
290
|
+
/* Elevation Scale — 근거는 light.css 의 같은 자리 주석 참조.
|
|
291
|
+
★다크는 알파가 3배 가까이 진하다 — 리터럴로 흩어져 있던 종전에는 이 차이가
|
|
292
|
+
적용되지 않아 다크에서 그림자가 사실상 보이지 않았다. */
|
|
293
|
+
--u-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.25); /* = shadow-color-weak */
|
|
294
|
+
--u-shadow-md: 0 2px 8px rgba(0, 0, 0, 0.35); /* = shadow-color-normal */
|
|
295
|
+
--u-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.45); /* = shadow-color-strong */
|
|
296
|
+
--u-shadow-xl: 0 6px 18px rgba(0, 0, 0, 0.60); /* = shadow-color-stronger */
|
|
297
|
+
|
|
288
298
|
/* Scrollbar Colors */
|
|
289
299
|
--u-scrollbar-color: var(--u-neutral-500);
|
|
290
300
|
--u-scrollbar-color-hover: var(--u-neutral-600);
|