@iyulab/components 1.10.0 → 1.13.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 +135 -9
- package/README.md +3 -1
- 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 +2 -2
- package/dist/components/alert/UAlert.d.ts +3 -0
- package/dist/components/alert/UAlert.styles.js +32 -22
- package/dist/components/avatar/UAvatar.styles.js +2 -2
- package/dist/components/badge/UBadge.d.ts +2 -0
- package/dist/components/badge/UBadge.js +5 -3
- package/dist/components/badge/UBadge.styles.js +16 -5
- package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
- package/dist/components/button/UButton.d.ts +3 -2
- package/dist/components/button/UButton.styles.js +6 -6
- package/dist/components/button-group/UButtonGroup.styles.js +1 -1
- package/dist/components/card/UCard.d.ts +2 -0
- package/dist/components/card/UCard.js +2 -0
- package/dist/components/card/UCard.styles.js +20 -6
- package/dist/components/carousel/UCarousel.styles.js +3 -3
- package/dist/components/checkbox/UCheckbox.d.ts +1 -1
- package/dist/components/checkbox/UCheckbox.styles.js +39 -99
- package/dist/components/copy-button/UCopyButton.styles.js +2 -2
- package/dist/components/dialog/UDialog.styles.js +8 -8
- package/dist/components/divider/UDivider.js +7 -5
- package/dist/components/divider/UDivider.styles.js +25 -5
- package/dist/components/drawer/UDrawer.styles.js +7 -7
- package/dist/components/field/UField.styles.js +2 -2
- package/dist/components/icon-button/UIconButton.styles.js +1 -1
- package/dist/components/input/UInput.styles.js +3 -3
- package/dist/components/menu/UMenu.d.ts +3 -0
- package/dist/components/menu/UMenu.js +3 -1
- package/dist/components/menu/UMenu.styles.js +19 -6
- package/dist/components/menu-item/UMenuItem.d.ts +1 -1
- package/dist/components/menu-item/UMenuItem.styles.js +2 -2
- package/dist/components/option/UOption.d.ts +3 -1
- package/dist/components/option/UOption.js +7 -5
- package/dist/components/option/UOption.styles.js +17 -6
- package/dist/components/progress-bar/UProgressBar.styles.js +10 -10
- package/dist/components/progress-ring/UProgressRing.styles.js +9 -9
- package/dist/components/radio/URadio.d.ts +1 -1
- package/dist/components/radio/URadio.styles.js +2 -2
- package/dist/components/rating/URating.styles.js +2 -2
- package/dist/components/select/USelect.styles.js +3 -3
- package/dist/components/skeleton/USkeleton.styles.js +3 -3
- package/dist/components/slider/USlider.styles.js +5 -5
- package/dist/components/spinner/USpinner.styles.js +1 -1
- package/dist/components/split-panel/USplitPanel.styles.js +2 -2
- package/dist/components/switch/USwitch.styles.js +4 -4
- package/dist/components/tab/UTab.d.ts +2 -0
- package/dist/components/tab/UTab.js +7 -5
- package/dist/components/tab/UTab.styles.js +15 -3
- package/dist/components/tab-panel/UTabPanel.d.ts +1 -1
- package/dist/components/tab-panel/UTabPanel.styles.js +3 -3
- package/dist/components/tag/UTag.d.ts +4 -1
- package/dist/components/tag/UTag.js +7 -5
- package/dist/components/tag/UTag.styles.js +108 -177
- package/dist/components/textarea/UTextarea.styles.js +2 -2
- package/dist/components/tooltip/UTooltip.d.ts +2 -0
- package/dist/components/tooltip/UTooltip.js +3 -1
- package/dist/components/tooltip/UTooltip.styles.js +12 -3
- package/dist/components/tree-item/UTreeItem.d.ts +1 -1
- package/dist/components/tree-item/UTreeItem.styles.js +3 -3
- package/dist/styles/dark.css +77 -7
- package/dist/styles/light.css +78 -7
- package/package.json +3 -2
|
@@ -13,6 +13,8 @@ export type CardOrientation = 'vertical' | 'horizontal';
|
|
|
13
13
|
* @csspart header - 헤더 영역 컨테이너
|
|
14
14
|
* @csspart body - 본문 영역 컨테이너
|
|
15
15
|
* @csspart footer - 푸터 영역 컨테이너
|
|
16
|
+
* @cssprop --card-border-width - 테두리 두께 (`borderless` 는 0)
|
|
17
|
+
* @cssprop --card-border-color - 테두리 색
|
|
16
18
|
*/
|
|
17
19
|
export declare class UCard extends UElement {
|
|
18
20
|
static styles: import('lit').CSSResultGroup[];
|
|
@@ -18,6 +18,7 @@ var UCard = class UCard extends UElement {
|
|
|
18
18
|
}
|
|
19
19
|
render() {
|
|
20
20
|
return html`
|
|
21
|
+
<div class="base" part="base">
|
|
21
22
|
<div class="media" part="media">
|
|
22
23
|
<slot name="media" @slotchange=${this.handleSlotChange}></slot>
|
|
23
24
|
</div>
|
|
@@ -32,6 +33,7 @@ var UCard = class UCard extends UElement {
|
|
|
32
33
|
<slot name="footer" @slotchange=${this.handleSlotChange}></slot>
|
|
33
34
|
</footer>
|
|
34
35
|
</div>
|
|
36
|
+
</div>
|
|
35
37
|
`;
|
|
36
38
|
}
|
|
37
39
|
handleSlotChange(e) {
|
|
@@ -3,12 +3,26 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
display: flex;
|
|
6
|
-
border:
|
|
7
|
-
border-radius: 8px;
|
|
6
|
+
border-radius: var(--u-radius-xl);
|
|
8
7
|
background-color: var(--u-panel-bg-color);
|
|
9
8
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
10
9
|
overflow: hidden;
|
|
10
|
+
|
|
11
|
+
--card-border-width: 1px;
|
|
12
|
+
--card-border-color: var(--u-border-color);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* 테두리는 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
|
|
16
|
+
.base {
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
width: 100%;
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: inherit;
|
|
21
|
+
border: var(--card-border-width) solid var(--card-border-color);
|
|
22
|
+
border-radius: inherit;
|
|
23
|
+
overflow: hidden;
|
|
11
24
|
}
|
|
25
|
+
|
|
12
26
|
:host([orientation="vertical"]) {
|
|
13
27
|
flex-direction: column;
|
|
14
28
|
}
|
|
@@ -16,7 +30,7 @@ var styles = css`
|
|
|
16
30
|
flex-direction: row;
|
|
17
31
|
}
|
|
18
32
|
:host([borderless]) {
|
|
19
|
-
border:
|
|
33
|
+
--card-border-width: 0;
|
|
20
34
|
}
|
|
21
35
|
:host([shadowless]) {
|
|
22
36
|
box-shadow: none;
|
|
@@ -48,7 +62,7 @@ var styles = css`
|
|
|
48
62
|
|
|
49
63
|
.header {
|
|
50
64
|
display: none;
|
|
51
|
-
padding: 16px;
|
|
65
|
+
padding: var(--u-space-lg, 16px);
|
|
52
66
|
border-bottom: 1px solid var(--u-border-color);
|
|
53
67
|
}
|
|
54
68
|
.header.has-content {
|
|
@@ -58,7 +72,7 @@ var styles = css`
|
|
|
58
72
|
.body {
|
|
59
73
|
display: none;
|
|
60
74
|
flex: 1;
|
|
61
|
-
padding: 16px;
|
|
75
|
+
padding: var(--u-space-lg, 16px);
|
|
62
76
|
}
|
|
63
77
|
.body.has-content {
|
|
64
78
|
display: block;
|
|
@@ -66,7 +80,7 @@ var styles = css`
|
|
|
66
80
|
|
|
67
81
|
.footer {
|
|
68
82
|
display: none;
|
|
69
|
-
padding: 16px;
|
|
83
|
+
padding: var(--u-space-lg, 16px);
|
|
70
84
|
border-top: 1px solid var(--u-border-color);
|
|
71
85
|
}
|
|
72
86
|
.footer.has-content {
|
|
@@ -56,7 +56,7 @@ var styles = css`
|
|
|
56
56
|
z-index: 10;
|
|
57
57
|
top: 50%;
|
|
58
58
|
transform: translateY(-50%);
|
|
59
|
-
padding: 8px;
|
|
59
|
+
padding: var(--u-space-sm, 8px);
|
|
60
60
|
font-size: 20px;
|
|
61
61
|
color: var(--u-neutral-900);
|
|
62
62
|
background-color: var(--u-neutral-100);
|
|
@@ -85,7 +85,7 @@ var styles = css`
|
|
|
85
85
|
flex-direction: row;
|
|
86
86
|
align-items: center;
|
|
87
87
|
justify-content: center;
|
|
88
|
-
gap: 8px;
|
|
88
|
+
gap: var(--u-space-sm, 8px);
|
|
89
89
|
transform: translateX(-50%);
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -94,7 +94,7 @@ var styles = css`
|
|
|
94
94
|
height: 10px;
|
|
95
95
|
padding: 0;
|
|
96
96
|
border: none;
|
|
97
|
-
border-radius:
|
|
97
|
+
border-radius: var(--u-radius-circle);
|
|
98
98
|
background-color: var(--u-neutral-400);
|
|
99
99
|
cursor: pointer;
|
|
100
100
|
transition: all 0.2s ease;
|
|
@@ -20,7 +20,7 @@ export type CheckboxColor = "blue" | "green" | "red" | "orange" | "teal" | "cyan
|
|
|
20
20
|
*
|
|
21
21
|
* @event change - 체크 상태 변경 시 발생
|
|
22
22
|
*
|
|
23
|
-
* @cssprop --checkbox-fill-color - 체크된 상태의 채움색 (기본: --u-primary-color
|
|
23
|
+
* @cssprop --checkbox-fill-color - 체크된 상태의 채움색 (기본: --u-primary-color)
|
|
24
24
|
*/
|
|
25
25
|
export declare class UCheckbox extends UFormControlElement<string> {
|
|
26
26
|
static styles: import('lit').CSSResultGroup[];
|
|
@@ -2,7 +2,7 @@ import { css } from "lit";
|
|
|
2
2
|
//#region src/components/checkbox/UCheckbox.styles.ts
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
|
-
--checkbox-fill-color: var(--u-primary-color
|
|
5
|
+
--checkbox-fill-color: var(--u-primary-color);
|
|
6
6
|
--checkbox-color: inherit;
|
|
7
7
|
--checkbox-border-color: var(--u-input-border-color);
|
|
8
8
|
--checkbox-background-color: var(--u-input-bg-color);
|
|
@@ -27,10 +27,10 @@ var styles = css`
|
|
|
27
27
|
cursor: default;
|
|
28
28
|
}
|
|
29
29
|
:host([invalid]) {
|
|
30
|
-
--checkbox-border-color: var(--u-
|
|
30
|
+
--checkbox-border-color: var(--u-danger-color);
|
|
31
31
|
}
|
|
32
32
|
:host([invalid]) .footer {
|
|
33
|
-
color: var(--u-
|
|
33
|
+
color: var(--u-danger-color);
|
|
34
34
|
}
|
|
35
35
|
:host([checked]) .checkbox u-icon,
|
|
36
36
|
:host([indeterminate]) .checkbox u-icon {
|
|
@@ -44,110 +44,50 @@ var styles = css`
|
|
|
44
44
|
:host([variant="filled"][checked]),
|
|
45
45
|
:host([variant="filled"][indeterminate]) {
|
|
46
46
|
--checkbox-color: var(--u-neutral-100);
|
|
47
|
-
--checkbox-border-color: var(--checkbox-fill-color);
|
|
48
|
-
--checkbox-background-color: var(--checkbox-fill-color);
|
|
47
|
+
--checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
48
|
+
--checkbox-background-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/* === Variant: outline - 테두리만 === */
|
|
52
52
|
:host([variant="outline"][checked]),
|
|
53
53
|
:host([variant="outline"][indeterminate]) {
|
|
54
|
-
--checkbox-
|
|
54
|
+
--checkbox-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
55
|
+
--checkbox-border-color: var(--checkbox-hue, var(--checkbox-fill-color));
|
|
55
56
|
--checkbox-background-color: transparent;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
/*
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
:host([
|
|
65
|
-
|
|
66
|
-
--checkbox-border-color: var(--u-green-600);
|
|
67
|
-
--checkbox-background-color: var(--u-green-600);
|
|
68
|
-
}
|
|
69
|
-
:host([variant="filled"][color="red"][checked]),
|
|
70
|
-
:host([variant="filled"][color="red"][indeterminate]) {
|
|
71
|
-
--checkbox-border-color: var(--u-red-600);
|
|
72
|
-
--checkbox-background-color: var(--u-red-600);
|
|
73
|
-
}
|
|
74
|
-
:host([variant="filled"][color="orange"][checked]),
|
|
75
|
-
:host([variant="filled"][color="orange"][indeterminate]) {
|
|
76
|
-
--checkbox-border-color: var(--u-orange-600);
|
|
77
|
-
--checkbox-background-color: var(--u-orange-600);
|
|
78
|
-
}
|
|
79
|
-
:host([variant="filled"][color="teal"][checked]),
|
|
80
|
-
:host([variant="filled"][color="teal"][indeterminate]) {
|
|
81
|
-
--checkbox-border-color: var(--u-teal-600);
|
|
82
|
-
--checkbox-background-color: var(--u-teal-600);
|
|
83
|
-
}
|
|
84
|
-
:host([variant="filled"][color="cyan"][checked]),
|
|
85
|
-
:host([variant="filled"][color="cyan"][indeterminate]) {
|
|
86
|
-
--checkbox-border-color: var(--u-cyan-600);
|
|
87
|
-
--checkbox-background-color: var(--u-cyan-600);
|
|
88
|
-
}
|
|
89
|
-
:host([variant="filled"][color="purple"][checked]),
|
|
90
|
-
:host([variant="filled"][color="purple"][indeterminate]) {
|
|
91
|
-
--checkbox-border-color: var(--u-purple-600);
|
|
92
|
-
--checkbox-background-color: var(--u-purple-600);
|
|
93
|
-
}
|
|
94
|
-
:host([variant="filled"][color="pink"][checked]),
|
|
95
|
-
:host([variant="filled"][color="pink"][indeterminate]) {
|
|
96
|
-
--checkbox-border-color: var(--u-pink-600);
|
|
97
|
-
--checkbox-background-color: var(--u-pink-600);
|
|
98
|
-
}
|
|
99
|
-
:host([variant="filled"][color="neutral"][checked]),
|
|
100
|
-
:host([variant="filled"][color="neutral"][indeterminate]) {
|
|
101
|
-
--checkbox-border-color: var(--u-neutral-600);
|
|
102
|
-
--checkbox-background-color: var(--u-neutral-600);
|
|
59
|
+
/* ==========================================================================
|
|
60
|
+
장식 축 — color= 는 hue 슬롯만 채운다. variant 규칙이 폴백과 함께 읽는다.
|
|
61
|
+
기본값 blue 는 규칙이 없다 = 슬롯이 비어 브랜드 훅(--checkbox-fill-color)을 탄다.
|
|
62
|
+
u-tag 와 같은 방식이다 — 슬롯이 채워지면 color= 가 최종 권한을 갖는다.
|
|
63
|
+
즉 blue 는 장식 축의 한 값이 아니라 "색을 지정하지 않음" 의 표기다.
|
|
64
|
+
========================================================================== */
|
|
65
|
+
:host([color="green"]) {
|
|
66
|
+
--checkbox-hue: var(--u-green-600);
|
|
103
67
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
:host([
|
|
108
|
-
--checkbox-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
--checkbox-
|
|
115
|
-
}
|
|
116
|
-
:host([
|
|
117
|
-
|
|
118
|
-
--checkbox-color: var(--u-red-600);
|
|
119
|
-
--checkbox-border-color: var(--u-red-600);
|
|
120
|
-
}
|
|
121
|
-
:host([variant="outline"][color="orange"][checked]),
|
|
122
|
-
:host([variant="outline"][color="orange"][indeterminate]) {
|
|
123
|
-
--checkbox-color: var(--u-orange-600);
|
|
124
|
-
--checkbox-border-color: var(--u-orange-600);
|
|
125
|
-
}
|
|
126
|
-
:host([variant="outline"][color="teal"][checked]),
|
|
127
|
-
:host([variant="outline"][color="teal"][indeterminate]) {
|
|
128
|
-
--checkbox-color: var(--u-teal-600);
|
|
129
|
-
--checkbox-border-color: var(--u-teal-600);
|
|
130
|
-
}
|
|
131
|
-
:host([variant="outline"][color="cyan"][checked]),
|
|
132
|
-
:host([variant="outline"][color="cyan"][indeterminate]) {
|
|
133
|
-
--checkbox-color: var(--u-cyan-600);
|
|
134
|
-
--checkbox-border-color: var(--u-cyan-600);
|
|
135
|
-
}
|
|
136
|
-
:host([variant="outline"][color="purple"][checked]),
|
|
137
|
-
:host([variant="outline"][color="purple"][indeterminate]) {
|
|
138
|
-
--checkbox-color: var(--u-purple-600);
|
|
139
|
-
--checkbox-border-color: var(--u-purple-600);
|
|
140
|
-
}
|
|
141
|
-
:host([variant="outline"][color="pink"][checked]),
|
|
142
|
-
:host([variant="outline"][color="pink"][indeterminate]) {
|
|
143
|
-
--checkbox-color: var(--u-pink-600);
|
|
144
|
-
--checkbox-border-color: var(--u-pink-600);
|
|
145
|
-
}
|
|
146
|
-
:host([variant="outline"][color="neutral"][checked]),
|
|
147
|
-
:host([variant="outline"][color="neutral"][indeterminate]) {
|
|
148
|
-
--checkbox-color: var(--u-neutral-600);
|
|
149
|
-
--checkbox-border-color: var(--u-neutral-600);
|
|
68
|
+
:host([color="red"]) {
|
|
69
|
+
--checkbox-hue: var(--u-red-600);
|
|
70
|
+
}
|
|
71
|
+
:host([color="orange"]) {
|
|
72
|
+
--checkbox-hue: var(--u-orange-600);
|
|
73
|
+
}
|
|
74
|
+
:host([color="teal"]) {
|
|
75
|
+
--checkbox-hue: var(--u-teal-600);
|
|
76
|
+
}
|
|
77
|
+
:host([color="cyan"]) {
|
|
78
|
+
--checkbox-hue: var(--u-cyan-600);
|
|
79
|
+
}
|
|
80
|
+
:host([color="purple"]) {
|
|
81
|
+
--checkbox-hue: var(--u-purple-600);
|
|
150
82
|
}
|
|
83
|
+
:host([color="pink"]) {
|
|
84
|
+
--checkbox-hue: var(--u-pink-600);
|
|
85
|
+
}
|
|
86
|
+
:host([color="neutral"]) {
|
|
87
|
+
--checkbox-hue: var(--u-neutral-600);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
151
91
|
|
|
152
92
|
.wrapper {
|
|
153
93
|
display: inline-flex;
|
|
@@ -197,7 +137,7 @@ var styles = css`
|
|
|
197
137
|
}
|
|
198
138
|
|
|
199
139
|
.required {
|
|
200
|
-
color: var(--u-
|
|
140
|
+
color: var(--u-danger-color);
|
|
201
141
|
font-weight: 500;
|
|
202
142
|
}
|
|
203
143
|
|
|
@@ -209,7 +149,7 @@ var styles = css`
|
|
|
209
149
|
}
|
|
210
150
|
|
|
211
151
|
:host([invalid]) .description {
|
|
212
|
-
color: var(--u-
|
|
152
|
+
color: var(--u-danger-color);
|
|
213
153
|
}
|
|
214
154
|
`;
|
|
215
155
|
//#endregion
|
|
@@ -14,12 +14,12 @@ var styles = css`
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
:host([copied]) u-icon-button {
|
|
17
|
-
color: var(--u-
|
|
17
|
+
color: var(--u-success-color-weak);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
/* 라벨 형태(아이콘+텍스트): 복사 완료 시 아이콘/텍스트를 성공색으로 강조 */
|
|
21
21
|
:host([copied]) u-button {
|
|
22
|
-
color: var(--u-
|
|
22
|
+
color: var(--u-success-color-weak);
|
|
23
23
|
}
|
|
24
24
|
`;
|
|
25
25
|
//#endregion
|
|
@@ -68,7 +68,7 @@ var styles = css`
|
|
|
68
68
|
* 테두리는 CanvasText 원색이 과해 옅게 혼합.
|
|
69
69
|
*/
|
|
70
70
|
border: 1px solid var(--u-border-color, color-mix(in srgb, CanvasText 20%, Canvas));
|
|
71
|
-
border-radius:
|
|
71
|
+
border-radius: var(--u-radius-lg);
|
|
72
72
|
background: var(--u-panel-bg-color, Canvas);
|
|
73
73
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
|
|
74
74
|
pointer-events: auto;
|
|
@@ -87,8 +87,8 @@ var styles = css`
|
|
|
87
87
|
display: flex;
|
|
88
88
|
align-items: center;
|
|
89
89
|
justify-content: space-between;
|
|
90
|
-
gap: 8px;
|
|
91
|
-
padding: 12px 16px;
|
|
90
|
+
gap: var(--u-space-sm, 8px);
|
|
91
|
+
padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
|
|
92
92
|
font-size: 18px;
|
|
93
93
|
font-weight: 600;
|
|
94
94
|
line-height: 1.3;
|
|
@@ -96,16 +96,16 @@ var styles = css`
|
|
|
96
96
|
}
|
|
97
97
|
.header .close-btn {
|
|
98
98
|
flex-shrink: 0;
|
|
99
|
-
padding: 4px;
|
|
99
|
+
padding: var(--u-space-2xs, 4px);
|
|
100
100
|
font-size: inherit;
|
|
101
|
-
border-radius:
|
|
101
|
+
border-radius: var(--u-radius-md);
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
.body {
|
|
105
105
|
flex: 1 1 auto;
|
|
106
106
|
min-height: 0;
|
|
107
107
|
display: block;
|
|
108
|
-
padding: 16px;
|
|
108
|
+
padding: var(--u-space-lg, 16px);
|
|
109
109
|
overflow: auto;
|
|
110
110
|
}
|
|
111
111
|
|
|
@@ -114,8 +114,8 @@ var styles = css`
|
|
|
114
114
|
display: flex;
|
|
115
115
|
align-items: center;
|
|
116
116
|
justify-content: flex-end;
|
|
117
|
-
gap: 8px;
|
|
118
|
-
padding: 12px 16px;
|
|
117
|
+
gap: var(--u-space-sm, 8px);
|
|
118
|
+
padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
|
|
119
119
|
border-top: 1px solid var(--u-border-color);
|
|
120
120
|
}
|
|
121
121
|
`;
|
|
@@ -17,11 +17,13 @@ var UDivider = class UDivider extends UElement {
|
|
|
17
17
|
}
|
|
18
18
|
render() {
|
|
19
19
|
return html`
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
<div class="base" part="base">
|
|
21
|
+
<span class="line" part="line-start"></span>
|
|
22
|
+
<span class="label" part="label">
|
|
23
|
+
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
24
|
+
</span>
|
|
25
|
+
<span class="line" part="line-end"></span>
|
|
26
|
+
</div>
|
|
25
27
|
`;
|
|
26
28
|
}
|
|
27
29
|
handleSlotChange(e) {
|
|
@@ -7,10 +7,24 @@ var styles = css`
|
|
|
7
7
|
--divider-spacing: 8px;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
/*
|
|
11
|
+
* 간격은 **내부 요소의 padding** 이 진다 — :host 에 margin 으로 두면 소비 앱의
|
|
12
|
+
* CSS 리셋(전역 셀렉터로 margin 을 0 으로 두는 관행)에 에러 없이 지워진다.
|
|
13
|
+
*
|
|
14
|
+
* ★ 여기만 다른 8개 컴포넌트와 방식이 갈린다. 구분선의 간격은 *형제를 밀어내는* 것이라
|
|
15
|
+
* 내부 요소의 margin 으로 옮기면 호스트 박스 안에서 상쇄되어 아무것도 밀지 못한다.
|
|
16
|
+
* 그러나 **padding** 은 호스트 박스 자체를 키우므로 형제는 종전대로 밀려나고,
|
|
17
|
+
* padding 은 섀도 내부에 있어 문서 리셋이 닿지 못한다.
|
|
18
|
+
*/
|
|
10
19
|
:host {
|
|
20
|
+
display: block;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.base {
|
|
24
|
+
box-sizing: border-box;
|
|
11
25
|
display: flex;
|
|
12
26
|
align-items: center;
|
|
13
|
-
|
|
27
|
+
padding: var(--divider-spacing) 0;
|
|
14
28
|
}
|
|
15
29
|
|
|
16
30
|
/* variant */
|
|
@@ -43,7 +57,7 @@ var styles = css`
|
|
|
43
57
|
/* 슬롯 콘텐츠 */
|
|
44
58
|
.label {
|
|
45
59
|
display: none;
|
|
46
|
-
padding: 0 12px;
|
|
60
|
+
padding: 0 var(--u-space-md, 12px);
|
|
47
61
|
color: var(--u-txt-color-weak);
|
|
48
62
|
font-size: 0.85em;
|
|
49
63
|
white-space: nowrap;
|
|
@@ -52,10 +66,16 @@ var styles = css`
|
|
|
52
66
|
|
|
53
67
|
/* vertical */
|
|
54
68
|
:host([vertical]) {
|
|
55
|
-
|
|
56
|
-
margin: 0 var(--divider-spacing);
|
|
69
|
+
display: inline-block;
|
|
57
70
|
height: auto;
|
|
58
71
|
min-height: 1em;
|
|
72
|
+
align-self: stretch;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
:host([vertical]) .base {
|
|
76
|
+
flex-direction: column;
|
|
77
|
+
padding: 0 var(--divider-spacing);
|
|
78
|
+
height: 100%;
|
|
59
79
|
}
|
|
60
80
|
|
|
61
81
|
:host([vertical]) .line {
|
|
@@ -86,7 +106,7 @@ var styles = css`
|
|
|
86
106
|
}
|
|
87
107
|
|
|
88
108
|
:host([vertical]) .label {
|
|
89
|
-
padding: 12px 0;
|
|
109
|
+
padding: var(--u-space-md, 12px) 0;
|
|
90
110
|
}
|
|
91
111
|
`;
|
|
92
112
|
//#endregion
|
|
@@ -75,8 +75,8 @@ var styles = css`
|
|
|
75
75
|
display: flex;
|
|
76
76
|
align-items: center;
|
|
77
77
|
justify-content: space-between;
|
|
78
|
-
gap: 8px;
|
|
79
|
-
padding: 12px 16px;
|
|
78
|
+
gap: var(--u-space-sm, 8px);
|
|
79
|
+
padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
|
|
80
80
|
font-size: 18px;
|
|
81
81
|
font-weight: 600;
|
|
82
82
|
line-height: 1.3;
|
|
@@ -84,16 +84,16 @@ var styles = css`
|
|
|
84
84
|
}
|
|
85
85
|
.header .close-btn {
|
|
86
86
|
flex-shrink: 0;
|
|
87
|
-
padding: 4px;
|
|
87
|
+
padding: var(--u-space-2xs, 4px);
|
|
88
88
|
font-size: inherit;
|
|
89
|
-
border-radius:
|
|
89
|
+
border-radius: var(--u-radius-md);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
.body {
|
|
93
93
|
flex: 1 1 auto;
|
|
94
94
|
min-height: 0;
|
|
95
95
|
display: block;
|
|
96
|
-
padding: 16px;
|
|
96
|
+
padding: var(--u-space-lg, 16px);
|
|
97
97
|
overflow: auto;
|
|
98
98
|
}
|
|
99
99
|
|
|
@@ -102,8 +102,8 @@ var styles = css`
|
|
|
102
102
|
display: flex;
|
|
103
103
|
align-items: center;
|
|
104
104
|
justify-content: flex-end;
|
|
105
|
-
gap: 8px;
|
|
106
|
-
padding: 12px 16px;
|
|
105
|
+
gap: var(--u-space-sm, 8px);
|
|
106
|
+
padding: var(--u-space-md, 12px) var(--u-space-lg, 16px);
|
|
107
107
|
border-top: 1px solid var(--u-border-color);
|
|
108
108
|
}
|
|
109
109
|
`;
|
|
@@ -12,7 +12,7 @@ var styles = css`
|
|
|
12
12
|
cursor: not-allowed;
|
|
13
13
|
}
|
|
14
14
|
:host([invalid]) .footer {
|
|
15
|
-
color: var(--u-
|
|
15
|
+
color: var(--u-danger-color);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
.header {
|
|
@@ -32,7 +32,7 @@ var styles = css`
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
.required {
|
|
35
|
-
color: var(--u-
|
|
35
|
+
color: var(--u-danger-color);
|
|
36
36
|
margin-right: 0.2em;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -75,7 +75,7 @@ var styles = css`
|
|
|
75
75
|
padding-left: 0;
|
|
76
76
|
padding-right: 0;
|
|
77
77
|
border: none;
|
|
78
|
-
border-radius:
|
|
78
|
+
border-radius: var(--u-radius-none);
|
|
79
79
|
border-bottom: 1px solid var(--u-input-border-color);
|
|
80
80
|
background-color: transparent;
|
|
81
81
|
}
|
|
@@ -101,7 +101,7 @@ var styles = css`
|
|
|
101
101
|
/* ===== Variant: borderless ===== */
|
|
102
102
|
:host([variant="borderless"]) .container {
|
|
103
103
|
border: none;
|
|
104
|
-
border-radius:
|
|
104
|
+
border-radius: var(--u-radius-none);
|
|
105
105
|
background-color: transparent;
|
|
106
106
|
padding: 0;
|
|
107
107
|
box-shadow: none;
|
|
@@ -173,7 +173,7 @@ var styles = css`
|
|
|
173
173
|
max-height: var(--input-popover-max-height);
|
|
174
174
|
padding: 4px;
|
|
175
175
|
border: 1px solid var(--u-border-color);
|
|
176
|
-
border-radius:
|
|
176
|
+
border-radius: var(--u-radius-lg);
|
|
177
177
|
background-color: var(--u-panel-bg-color);
|
|
178
178
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
|
|
179
179
|
overflow-x: auto;
|
|
@@ -8,6 +8,9 @@ export type MenuSelection = 'none' | 'single' | 'multiple';
|
|
|
8
8
|
* @slot - 메뉴 아이템 (u-menu-item, u-divider)
|
|
9
9
|
*
|
|
10
10
|
* @cssprop --menu-indent-size - 하위 메뉴 아이템의 들여쓰기 크기 (기본값: 20px)
|
|
11
|
+
* @cssprop --menu-padding - 내부 여백 (`borderless` 는 0)
|
|
12
|
+
* @cssprop --menu-border-width - 테두리 두께 (`borderless` 는 0)
|
|
13
|
+
* @cssprop --menu-border-color - 테두리 색
|
|
11
14
|
*
|
|
12
15
|
* @event change - 선택된 아이템이 변경될 때 발생
|
|
13
16
|
*/
|
|
@@ -120,7 +120,9 @@ var UMenu = class UMenu extends UElement {
|
|
|
120
120
|
].some((k) => changedProperties.has(k))) this.propagate();
|
|
121
121
|
}
|
|
122
122
|
render() {
|
|
123
|
-
return html`<
|
|
123
|
+
return html`<div class="base" part="base">
|
|
124
|
+
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
125
|
+
</div>`;
|
|
124
126
|
}
|
|
125
127
|
getItems(fn) {
|
|
126
128
|
const result = [];
|
|
@@ -8,16 +8,29 @@ var styles = css`
|
|
|
8
8
|
:host {
|
|
9
9
|
display: flex;
|
|
10
10
|
flex-direction: column;
|
|
11
|
-
padding: 4px;
|
|
12
11
|
min-width: 160px;
|
|
13
|
-
border:
|
|
14
|
-
border-radius: 6px;
|
|
12
|
+
border-radius: var(--u-radius-lg);
|
|
15
13
|
background-color: var(--u-panel-bg-color);
|
|
14
|
+
|
|
15
|
+
--menu-padding: var(--u-space-2xs, 4px);
|
|
16
|
+
--menu-border-width: 1px;
|
|
17
|
+
--menu-border-color: var(--u-border-color);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* 여백/테두리는 내부 요소가 진다 — :host 에 두면 소비 앱 CSS 리셋에 지워진다. */
|
|
21
|
+
.base {
|
|
22
|
+
box-sizing: border-box;
|
|
23
|
+
width: 100%;
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
padding: var(--menu-padding);
|
|
27
|
+
border: var(--menu-border-width) solid var(--menu-border-color);
|
|
28
|
+
border-radius: inherit;
|
|
16
29
|
}
|
|
17
30
|
:host([borderless]) {
|
|
18
|
-
padding: 0;
|
|
19
|
-
border:
|
|
20
|
-
border-radius:
|
|
31
|
+
--menu-padding: 0;
|
|
32
|
+
--menu-border-width: 0;
|
|
33
|
+
border-radius: var(--u-radius-none);
|
|
21
34
|
background-color: transparent;
|
|
22
35
|
}
|
|
23
36
|
`;
|
|
@@ -17,7 +17,7 @@ export type MenuItemAlign = 'left' | 'center' | 'right';
|
|
|
17
17
|
*
|
|
18
18
|
* @event pick - 아이템 선택 시 발생 (하위 메뉴가 없는 경우)
|
|
19
19
|
*
|
|
20
|
-
* @cssprop --menu-item-color - 선택/활성 상태의 기준색 (기본: --u-primary-color
|
|
20
|
+
* @cssprop --menu-item-color - 선택/활성 상태의 기준색 (기본: --u-primary-color)
|
|
21
21
|
*/
|
|
22
22
|
export declare class UMenuItem extends UElement {
|
|
23
23
|
static styles: import('lit').CSSResultGroup[];
|
|
@@ -3,7 +3,7 @@ import { css } from "lit";
|
|
|
3
3
|
var styles = css`
|
|
4
4
|
:host {
|
|
5
5
|
--menu-item-depth: 0;
|
|
6
|
-
--menu-item-color: var(--u-primary-color
|
|
6
|
+
--menu-item-color: var(--u-primary-color);
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
:host {
|
|
@@ -137,7 +137,7 @@ var styles = css`
|
|
|
137
137
|
flex-direction: column;
|
|
138
138
|
padding: 4px;
|
|
139
139
|
border: 1px solid var(--u-border-color);
|
|
140
|
-
border-radius:
|
|
140
|
+
border-radius: var(--u-radius-md);
|
|
141
141
|
background-color: var(--u-panel-bg-color);
|
|
142
142
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
143
143
|
transform: scale(0.8);
|
|
@@ -21,7 +21,9 @@ export type OptionMarker = 'radio' | 'check';
|
|
|
21
21
|
* @cssprop --option-border-color-active-interactive - 선택된 상태에서 호버/포커스 시 테두리 색상
|
|
22
22
|
* @cssprop --option-background-color-active-interactive - 선택된 상태에서 호버/포커스 시 배경 색상
|
|
23
23
|
* @cssprop --option-color - 선택 상태의 기준색. 위 active 계열이 이 값에서 파생된다
|
|
24
|
-
* (기본: --u-primary-color
|
|
24
|
+
* (기본: --u-primary-color)
|
|
25
|
+
* @cssprop --option-padding-block - 세로 여백
|
|
26
|
+
* @cssprop --option-padding-inline - 가로 여백
|
|
25
27
|
*/
|
|
26
28
|
export declare class UOption extends UElement {
|
|
27
29
|
static styles: import('lit').CSSResultGroup[];
|