@iyulab/components 1.18.0 → 1.21.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 +279 -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/UFloatingElement.styles.js +1 -1
- package/dist/components/UOverlayElement.styles.js +1 -1
- package/dist/components/alert/UAlert.styles.js +10 -6
- package/dist/components/badge/UBadge.d.ts +2 -1
- package/dist/components/badge/UBadge.styles.js +25 -1
- package/dist/components/breadcrumb-item/UBreadcrumbItem.styles.js +1 -1
- package/dist/components/button/UButton.d.ts +22 -3
- package/dist/components/button/UButton.styles.js +98 -9
- package/dist/components/card/UCard.styles.js +3 -3
- package/dist/components/carousel/UCarousel.styles.js +4 -4
- package/dist/components/checkbox/UCheckbox.d.ts +2 -1
- package/dist/components/checkbox/UCheckbox.styles.js +39 -6
- package/dist/components/dialog/UDialog.styles.js +2 -2
- package/dist/components/drawer/UDrawer.styles.js +2 -2
- package/dist/components/input/UInput.styles.js +9 -9
- package/dist/components/menu-item/UMenuItem.styles.js +4 -4
- package/dist/components/option/UOption.styles.js +3 -3
- package/dist/components/progress-bar/UProgressBar.styles.js +7 -7
- package/dist/components/progress-ring/UProgressRing.styles.js +6 -6
- package/dist/components/rating/URating.styles.js +3 -3
- package/dist/components/select/USelect.styles.js +11 -9
- package/dist/components/slider/USlider.styles.js +11 -3
- 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 +2 -2
- package/dist/components/switch/USwitch.styles.js +13 -10
- package/dist/components/tab/UTab.styles.js +1 -1
- 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 +55 -2
- package/dist/components/textarea/UTextarea.styles.js +7 -7
- package/dist/components/tooltip/UTooltip.styles.js +3 -3
- package/dist/components/tree-item/UTreeItem.styles.js +2 -2
- package/dist/styles/dark.css +107 -4
- package/dist/styles/light.css +140 -5
- package/package.json +4 -3
|
@@ -2,7 +2,18 @@ import { TemplateResult } from 'lit';
|
|
|
2
2
|
import { UElement } from '../UElement.js';
|
|
3
3
|
export type ButtonVariant = "solid" | "surface" | "filled" | "outlined" | "ghost" | "link";
|
|
4
4
|
export type ButtonType = "button" | "submit" | "reset";
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* 두 축이 한 속성에 병존한다.
|
|
7
|
+
*
|
|
8
|
+
* - **역할 축**(`primary`·`info`·`success`·`warning`·`danger`) — *의미*를 말한다.
|
|
9
|
+
* 색은 소비자의 역할 토큰이 정하므로 **리브랜딩을 따라오고**, 대비 계약을 물려받는다.
|
|
10
|
+
* - **장식 축**(`blue`·`purple` …) — *색 자체*를 말한다. 소비자가 고른 색이므로
|
|
11
|
+
* 리브랜딩에 **의도적으로 면역**이다.
|
|
12
|
+
*
|
|
13
|
+
* ★브랜드가 빨강인 제품에서 `color="red"` 는 브랜드와 위험을 같은 이름으로 만든다 —
|
|
14
|
+
* 그래서 위험은 `color="danger"` 로 쓴다.
|
|
15
|
+
*/
|
|
16
|
+
export type ButtonColor = "neutral" | "primary" | "info" | "success" | "warning" | "danger" | "blue" | "green" | "red" | "orange" | "teal" | "cyan" | "purple" | "pink";
|
|
6
17
|
export type ButtonSize = "sm" | "md" | "lg";
|
|
7
18
|
/**
|
|
8
19
|
* 클릭 가능한 버튼 컴포넌트입니다. href가 설정되면 앵커 태그로 렌더링됩니다.
|
|
@@ -19,11 +30,19 @@ export type ButtonSize = "sm" | "md" | "lg";
|
|
|
19
30
|
*
|
|
20
31
|
* @cssprop --u-primary-color - color="neutral"일 때 버튼 기준색. 지정 시 hover/active/surface 톤이 color-mix()로 자동 파생.
|
|
21
32
|
* @cssprop --btn-padding-block - 내부 버튼의 상하 여백 (기본: 0.5em)
|
|
22
|
-
* @cssprop --btn-padding-inline - 내부 버튼의 좌우 여백 (기본:
|
|
33
|
+
* @cssprop --btn-padding-inline - 내부 버튼의 좌우 여백 (기본: 1em, variant="link"는 0).
|
|
34
|
+
* ⚠1.20.0 에서 0.5em → 1em. 세로와 같은 값이라 글자가 테두리에 붙어 있었다.
|
|
35
|
+
* 최소높이는 상하 여백에서 파생되므로(`1.5em + 상하×2 + 2px`) 이 값을 덮어도 높이는 안 변한다.
|
|
23
36
|
* @cssprop --btn-border-color - 내부 버튼의 테두리 색. variant/hover/active 규칙이 이 값을 정한다
|
|
24
37
|
* (기본: transparent)
|
|
25
|
-
* @cssprop --btn-color - 버튼의
|
|
38
|
+
* @cssprop --btn-color - 버튼의 **면** 색. 아래 파생 토큰이 전부 이 값에서 color-mix()로 계산된다 —
|
|
26
39
|
* 보통 이것 하나만 덮으면 된다.
|
|
40
|
+
* @cssprop --btn-txt-color - 그 **면 위**의 글자색 — variant="solid" 가 읽는다
|
|
41
|
+
* (기본: #fff · 역할 값 지정 시 --u-{role}-txt-color)
|
|
42
|
+
* @cssprop --btn-color-strong - **바탕 위**의 글자색 — variant="link" 가 읽는다.
|
|
43
|
+
* 면과 요구가 반대라 슬롯이 따로 있다 (기본: --btn-color 와 동일 · 역할 값 지정 시 --u-{role}-color-strong)
|
|
44
|
+
* @cssprop --btn-color-strong-hover - 바탕 위 글자 hover (기본: 85% + black · 역할 값은 움직이지 않고 밑줄로 강조)
|
|
45
|
+
* @cssprop --btn-color-strong-active - 바탕 위 글자 active (기본: 70% + black · 역할 값은 고정)
|
|
27
46
|
* @cssprop --btn-color-hover - solid 배경 hover (기본: --btn-color 85% + black)
|
|
28
47
|
* @cssprop --btn-color-active - solid 배경 active (기본: --btn-color 70% + black)
|
|
29
48
|
* @cssprop --btn-color-surface - surface 배경 (기본: --btn-color 12% + 배경색)
|
|
@@ -4,6 +4,23 @@ var styles = css`
|
|
|
4
4
|
:host {
|
|
5
5
|
/* --btn-color 하나만 정해지면 hover/active/surface/outline 톤이 전부 자동 파생 */
|
|
6
6
|
--btn-color: var(--u-primary-color, #1976D2);
|
|
7
|
+
|
|
8
|
+
/* ★색 슬롯이 셋인 이유 — 같은 색이 세 자리에서 요구가 다르다.
|
|
9
|
+
시트의 역할 층이 이미 이 구분을 갖고 있어(-color = 면 · -strong = 바탕 위 글자 ·
|
|
10
|
+
-txt-color = 면 위 글자) 슬롯 이름을 그 어법에 1:1 로 맞춘다.
|
|
11
|
+
|
|
12
|
+
--btn-color 면(solid 배경 · 테두리 · surface 혼합의 원료)
|
|
13
|
+
--btn-txt-color 그 면 **위**의 글자 ← solid
|
|
14
|
+
--btn-color-strong 바탕 **위**의 글자 ← link
|
|
15
|
+
|
|
16
|
+
⚠셋을 하나로 접으면 다크에서 깨진다: 바탕(#121212)과 on-color(#FFFFFF)가 정반대라
|
|
17
|
+
한 단이 둘을 맡을 수 없다(Cycle 141 실측 — 다크 primary 면 6.09 ✓ / 바탕 3.07 ✗).
|
|
18
|
+
장식 축(color="purple" 등)은 세 슬롯이 종전 값으로 수렴하므로 렌더가 변하지 않는다. */
|
|
19
|
+
--btn-txt-color: #fff;
|
|
20
|
+
--btn-color-strong: var(--btn-color);
|
|
21
|
+
--btn-color-strong-hover: color-mix(in srgb, var(--btn-color-strong) 85%, black);
|
|
22
|
+
--btn-color-strong-active: color-mix(in srgb, var(--btn-color-strong) 70%, black);
|
|
23
|
+
|
|
7
24
|
--btn-color-hover: color-mix(in srgb, var(--btn-color) 85%, black);
|
|
8
25
|
--btn-color-active: color-mix(in srgb, var(--btn-color) 70%, black);
|
|
9
26
|
--btn-color-surface: color-mix(in srgb, var(--btn-color) 12%, var(--u-bg-color, #FFFFFF));
|
|
@@ -26,13 +43,59 @@ var styles = css`
|
|
|
26
43
|
border-radius: var(--u-radius-lg, 6px);
|
|
27
44
|
background-color: transparent;
|
|
28
45
|
|
|
29
|
-
transition: all 0.
|
|
46
|
+
transition: all var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
30
47
|
overflow: hidden;
|
|
31
48
|
user-select: none;
|
|
32
49
|
cursor: pointer;
|
|
33
50
|
}
|
|
34
51
|
|
|
35
|
-
/* ===
|
|
52
|
+
/* === Role tokens (의미 축) ===
|
|
53
|
+
color="danger" 는 *"위험한 동작"* 을 뜻하고, 그 색이 무엇인지는 소비자의 역할 토큰이
|
|
54
|
+
정한다. 장식 축과 반대로 **리브랜딩을 따라오고**, 대비 계약(token-contrast.test.ts)이
|
|
55
|
+
지키는 짝을 그대로 물려받는다.
|
|
56
|
+
|
|
57
|
+
★장식 램프(shade-600)로 해석하면 안 된다 — 라이트에서 그 단 위의 흰 글자는 8색 중
|
|
58
|
+
6색이 AA 미달이다(green 3.30 · orange 2.37 · cyan 2.74 …). 역할 값을 쓰는 이유가
|
|
59
|
+
*의미 이름*인데 그 대가로 대비를 잃으면 앞뒤가 맞지 않는다. */
|
|
60
|
+
:host([color="primary"]) {
|
|
61
|
+
--btn-color: var(--u-primary-color, #1976D2);
|
|
62
|
+
--btn-color-strong: var(--u-primary-color-strong, #1565C0);
|
|
63
|
+
--btn-txt-color: var(--u-primary-txt-color, #FFFFFF);
|
|
64
|
+
}
|
|
65
|
+
:host([color="info"]) {
|
|
66
|
+
--btn-color: var(--u-info-color, #1976D2);
|
|
67
|
+
--btn-color-strong: var(--u-info-color-strong, #1565C0);
|
|
68
|
+
--btn-txt-color: var(--u-info-txt-color, #FFFFFF);
|
|
69
|
+
}
|
|
70
|
+
:host([color="success"]) {
|
|
71
|
+
--btn-color: var(--u-success-color, #2E7D32);
|
|
72
|
+
--btn-color-strong: var(--u-success-color-strong, #1B5E20);
|
|
73
|
+
--btn-txt-color: var(--u-success-txt-color, #FFFFFF);
|
|
74
|
+
}
|
|
75
|
+
:host([color="warning"]) {
|
|
76
|
+
--btn-color: var(--u-warning-color, #FDD835);
|
|
77
|
+
--btn-color-strong: var(--u-warning-color-strong, #8A4A00);
|
|
78
|
+
--btn-txt-color: var(--u-warning-txt-color, #000000);
|
|
79
|
+
}
|
|
80
|
+
:host([color="danger"]) {
|
|
81
|
+
--btn-color: var(--u-danger-color, #D32F2F);
|
|
82
|
+
--btn-color-strong: var(--u-danger-color-strong, #C62828);
|
|
83
|
+
--btn-txt-color: var(--u-danger-txt-color, #FFFFFF);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* 역할 축의 link 는 쉬는 상태가 **이미 대비로 선택된 단**(-strong)이라 더 어둡게 하면
|
|
87
|
+
계약을 벗어난다. 강조는 밑줄이 맡는다 — neutral link 가 쓰는 어법과 같다.
|
|
88
|
+
장식 축은 종전대로 혼합 파생을 유지한다. */
|
|
89
|
+
:host([color="primary"]),
|
|
90
|
+
:host([color="info"]),
|
|
91
|
+
:host([color="success"]),
|
|
92
|
+
:host([color="warning"]),
|
|
93
|
+
:host([color="danger"]) {
|
|
94
|
+
--btn-color-strong-hover: var(--btn-color-strong);
|
|
95
|
+
--btn-color-strong-active: var(--btn-color-strong);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* === Color tokens (장식 축) === */
|
|
36
99
|
:host([color="blue"]) { --btn-color: var(--u-blue-600, #1E88E5); }
|
|
37
100
|
:host([color="green"]) { --btn-color: var(--u-green-600, #43A047); }
|
|
38
101
|
:host([color="red"]) { --btn-color: var(--u-red-600, #E53935); }
|
|
@@ -42,7 +105,20 @@ var styles = css`
|
|
|
42
105
|
:host([color="purple"]) { --btn-color: var(--u-purple-600, #8E24AA); }
|
|
43
106
|
:host([color="pink"]) { --btn-color: var(--u-pink-600, #D81B60); }
|
|
44
107
|
|
|
45
|
-
/* === Size ===
|
|
108
|
+
/* === Size ===
|
|
109
|
+
*
|
|
110
|
+
* ★**크기 축은 font-size 하나로 움직인다** — 여백·최소높이가 전부 em 이라 비례로 따라온다.
|
|
111
|
+
* 이것은 결손이 아니라 설계다: 폼·인라인 요소의 여백은 상속된 font-size 에 비례하는 것이
|
|
112
|
+
* 의도이며(--u-space-* 는 컨테이너/오버레이의 레이아웃 여백 축이라 여기 닿지 않는다),
|
|
113
|
+
* px 계단을 따로 두면 두 축이 갈라진다.
|
|
114
|
+
*
|
|
115
|
+
* ⚠**그런데 두 값이 그 비례에서 빠져 있었다** (1.20.0 에서 해소):
|
|
116
|
+
* ⑴ 가로 여백이 세로와 **같은 0.5em** 이라 글자가 테두리에 붙었다(실측 md 7px/7px).
|
|
117
|
+
* ⑵ min-height 가 **없어서** 아이콘만 든 버튼이 글자 버튼과 높이가 달랐다 —
|
|
118
|
+
* 실측: 같은 size 인데 md 아이콘 32px vs 글자 37px. 툴바에서 5px 어긋난다.
|
|
119
|
+
* 그리고 아이콘 버튼의 계단(30/32/34)이 글자 버튼(32/37/42)과 기울기가 달라
|
|
120
|
+
* size 를 올릴수록 어긋남이 커졌다.
|
|
121
|
+
*/
|
|
46
122
|
:host([size="sm"]) {
|
|
47
123
|
font-size: 12px;
|
|
48
124
|
}
|
|
@@ -79,7 +155,7 @@ var styles = css`
|
|
|
79
155
|
|
|
80
156
|
/* solid: 강한 채움 (기본 color="neutral") */
|
|
81
157
|
:host([variant="solid"]) {
|
|
82
|
-
color:
|
|
158
|
+
color: var(--btn-txt-color);
|
|
83
159
|
background-color: var(--btn-color);
|
|
84
160
|
--btn-border-color: var(--btn-color);
|
|
85
161
|
}
|
|
@@ -164,15 +240,17 @@ var styles = css`
|
|
|
164
240
|
color: var(--u-primary-color-strong, #1565C0);
|
|
165
241
|
text-decoration: underline;
|
|
166
242
|
}
|
|
167
|
-
/* link + 명시적 non-neutral color: 링크 자체 색상을 재정의 (예: 파괴적 액션 링크)
|
|
243
|
+
/* link + 명시적 non-neutral color: 링크 자체 색상을 재정의 (예: 파괴적 액션 링크)
|
|
244
|
+
★여기는 **바탕 위의 글자**다 — 면 슬롯(--btn-color)이 아니라 --btn-color-strong 을
|
|
245
|
+
읽는다. 장식 축에서는 둘이 같은 값이라 렌더가 변하지 않고, 역할 축에서만 갈린다. */
|
|
168
246
|
:host([variant="link"][color]:not([color="neutral"])) {
|
|
169
|
-
color: var(--btn-color);
|
|
247
|
+
color: var(--btn-color-strong);
|
|
170
248
|
}
|
|
171
249
|
:host([variant="link"][color]:not([color="neutral"]):hover) {
|
|
172
|
-
color: var(--btn-color-hover);
|
|
250
|
+
color: var(--btn-color-strong-hover);
|
|
173
251
|
}
|
|
174
252
|
:host([variant="link"][color]:not([color="neutral"]):active) {
|
|
175
|
-
color: var(--btn-color-active);
|
|
253
|
+
color: var(--btn-color-strong-active);
|
|
176
254
|
}
|
|
177
255
|
|
|
178
256
|
/* === Inner ===
|
|
@@ -194,9 +272,20 @@ var styles = css`
|
|
|
194
272
|
align-items: center;
|
|
195
273
|
justify-content: space-between;
|
|
196
274
|
|
|
197
|
-
padding: var(--btn-padding-block, 0.5em) var(--btn-padding-inline,
|
|
275
|
+
padding: var(--btn-padding-block, 0.5em) var(--btn-padding-inline, 1em);
|
|
198
276
|
border: 1px solid var(--btn-border-color, transparent);
|
|
199
277
|
border-radius: inherit;
|
|
278
|
+
|
|
279
|
+
/* ★**글자 버튼의 자연 높이를 그대로 바닥값으로 쓴다** — 값을 새로 고른 것이 아니라
|
|
280
|
+
* 같은 식을 다시 쓴 것이다:
|
|
281
|
+
*
|
|
282
|
+
* line-height(1.5em) + 상하 여백 ×2 + 테두리 ×2
|
|
283
|
+
*
|
|
284
|
+
* 그래서 글자 버튼의 높이는 **변하지 않고**(sm 32 · md 37 · lg 42 그대로),
|
|
285
|
+
* 아이콘만 든 버튼이 같은 높이로 올라온다. 상수를 박으면 이 성질이 깨진다 —
|
|
286
|
+
* 소비자가 --btn-padding-block 을 덮는 순간 둘이 다시 갈라진다. */
|
|
287
|
+
min-height: calc(1.5em + 2 * var(--btn-padding-block, 0.5em) + 2px);
|
|
288
|
+
|
|
200
289
|
}
|
|
201
290
|
a {
|
|
202
291
|
text-decoration: none;
|
|
@@ -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), 0 1px 2px rgba(0, 0, 0, 0.05));
|
|
9
9
|
overflow: hidden;
|
|
10
10
|
|
|
11
11
|
--card-border-width: 1px;
|
|
@@ -37,11 +37,11 @@ var styles = css`
|
|
|
37
37
|
}
|
|
38
38
|
:host([hoverable]) {
|
|
39
39
|
cursor: pointer;
|
|
40
|
-
transition: all 0.
|
|
40
|
+
transition: all var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
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), 0 2px 4px rgba(0, 0, 0, 0.06));
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
.media {
|
|
@@ -39,7 +39,7 @@ var styles = css`
|
|
|
39
39
|
width: 100%;
|
|
40
40
|
height: 100%;
|
|
41
41
|
gap: var(--slide-gap, 0px);
|
|
42
|
-
transition: transform
|
|
42
|
+
transition: transform var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
::slotted(*) {
|
|
@@ -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), 0 1px 2px rgba(0, 0, 0, 0.05));
|
|
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), 0 2px 4px rgba(0, 0, 0, 0.06));
|
|
68
68
|
transform: translateY(-50%) scale(1.1);
|
|
69
69
|
}
|
|
70
70
|
.nav-button:active {
|
|
@@ -97,7 +97,7 @@ var styles = css`
|
|
|
97
97
|
border-radius: var(--u-radius-circle, 50%);
|
|
98
98
|
background-color: var(--u-neutral-400, #BDBDBD);
|
|
99
99
|
cursor: pointer;
|
|
100
|
-
transition: all 0.
|
|
100
|
+
transition: all var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
101
101
|
}
|
|
102
102
|
.dot:hover {
|
|
103
103
|
background-color: var(--u-neutral-200, #EEEEEE);
|
|
@@ -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
|
/* 체크박스 외형 */
|
|
@@ -121,14 +154,14 @@ var styles = css`
|
|
|
121
154
|
border: 2px solid var(--checkbox-border-color);
|
|
122
155
|
border-radius: 0.2em;
|
|
123
156
|
background-color: var(--checkbox-background-color);
|
|
124
|
-
transition: border-color 0.
|
|
157
|
+
transition: border-color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), background-color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
125
158
|
}
|
|
126
159
|
|
|
127
160
|
/* 체크박스 아이콘 */
|
|
128
161
|
.checkbox u-icon {
|
|
129
162
|
font-size: 0.85em;
|
|
130
163
|
transform: scale(0);
|
|
131
|
-
transition: transform 0.
|
|
164
|
+
transition: transform var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
132
165
|
}
|
|
133
166
|
|
|
134
167
|
.label {
|
|
@@ -70,11 +70,11 @@ 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), 0 2px 6px rgba(0, 0, 0, 0.08));
|
|
74
74
|
pointer-events: auto;
|
|
75
75
|
opacity: 0;
|
|
76
76
|
transform: scale(0.92);
|
|
77
|
-
transition: opacity 0.
|
|
77
|
+
transition: opacity var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
78
78
|
}
|
|
79
79
|
:host([open]) .panel {
|
|
80
80
|
opacity: 1;
|
|
@@ -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), 0 2px 6px rgba(0, 0, 0, 0.08));
|
|
61
61
|
pointer-events: auto;
|
|
62
62
|
/*
|
|
63
63
|
* easeOutQuart (cubic-bezier(0.22, 1, 0.36, 1)) — 빠르게 시작해서 부드럽게 정착.
|
|
@@ -66,7 +66,7 @@ var styles = css`
|
|
|
66
66
|
* UOverlayElement의 backdrop opacity transition과 동일 duration/easing으로 맞춤.
|
|
67
67
|
* 호스트 앱이 ::part(panel) { transition: ... }로 추가 override 가능.
|
|
68
68
|
*/
|
|
69
|
-
transition: transform
|
|
69
|
+
transition: transform var(--u-duration-slow, 320ms) var(--u-ease-decelerate, cubic-bezier(0, 0, 0, 1));
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
.header {
|
|
@@ -26,7 +26,7 @@ var styles = css`
|
|
|
26
26
|
border: 1px solid var(--u-input-border-color, #E0E0E0);
|
|
27
27
|
border-radius: 0.25em;
|
|
28
28
|
background-color: var(--u-input-bg-color, #FFFFFF);
|
|
29
|
-
transition: border-color 0.
|
|
29
|
+
transition: border-color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), box-shadow var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
30
30
|
overflow: hidden;
|
|
31
31
|
}
|
|
32
32
|
:host([readonly]) .container,
|
|
@@ -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 ===== */
|
|
@@ -157,7 +157,7 @@ var styles = css`
|
|
|
157
157
|
margin-left: 0.25em;
|
|
158
158
|
color: var(--u-icon-color, #616161);
|
|
159
159
|
font-size: 1em;
|
|
160
|
-
transition: color 0.
|
|
160
|
+
transition: color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
161
161
|
cursor: pointer;
|
|
162
162
|
}
|
|
163
163
|
.suffix-item:hover {
|
|
@@ -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), 0 2px 4px rgba(0, 0, 0, 0.06));
|
|
179
179
|
overflow-x: auto;
|
|
180
180
|
overflow-y: auto;
|
|
181
181
|
}
|
|
@@ -25,7 +25,7 @@ var styles = css`
|
|
|
25
25
|
padding: 0.25em 0.5em;
|
|
26
26
|
padding-left: calc(var(--menu-indent-size) * var(--menu-item-depth) + 0.5em);
|
|
27
27
|
background-color: transparent;
|
|
28
|
-
transition: background-color 0.
|
|
28
|
+
transition: background-color var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), color var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
29
29
|
user-select: none;
|
|
30
30
|
cursor: pointer;
|
|
31
31
|
}
|
|
@@ -77,7 +77,7 @@ var styles = css`
|
|
|
77
77
|
position: absolute;
|
|
78
78
|
border-radius: 1px;
|
|
79
79
|
background-color: currentColor;
|
|
80
|
-
transition: transform
|
|
80
|
+
transition: transform var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
81
81
|
}
|
|
82
82
|
/* 기본: 위 방향 chevron (∧) */
|
|
83
83
|
.suffix-toggler::before {
|
|
@@ -139,9 +139,9 @@ 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), 0 1px 2px rgba(0, 0, 0, 0.05));
|
|
143
143
|
transform: scale(0.8);
|
|
144
|
-
transition: opacity 0.
|
|
144
|
+
transition: opacity var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), visibility 0s var(--u-duration-normal, 220ms), transform var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
145
145
|
}
|
|
146
146
|
.popover[open] {
|
|
147
147
|
transform: scale(1);
|
|
@@ -18,7 +18,7 @@ var styles = css`
|
|
|
18
18
|
|
|
19
19
|
:host {
|
|
20
20
|
display: flex;
|
|
21
|
-
transition: background-color 0.
|
|
21
|
+
transition: background-color var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), color var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
22
22
|
user-select: none;
|
|
23
23
|
cursor: pointer;
|
|
24
24
|
|
|
@@ -102,7 +102,7 @@ var styles = css`
|
|
|
102
102
|
border: 2px solid var(--u-neutral-400, #BDBDBD);
|
|
103
103
|
border-radius: var(--u-radius-circle, 50%);
|
|
104
104
|
background-color: var(--u-bg-color, #FFFFFF);
|
|
105
|
-
transition: border-color 0.
|
|
105
|
+
transition: border-color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), background-color var(--u-duration-normal, 220ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
106
106
|
}
|
|
107
107
|
:host([marker="radio"]:not([disabled]):hover) .radio-marker,
|
|
108
108
|
:host([marker="radio"]:not([disabled]):focus-visible) .radio-marker {
|
|
@@ -127,7 +127,7 @@ var styles = css`
|
|
|
127
127
|
border-radius: var(--u-radius-circle, 50%);
|
|
128
128
|
background-color: var(--option-color-active);
|
|
129
129
|
transform: scale(0);
|
|
130
|
-
transition: transform 0.
|
|
130
|
+
transition: transform var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
131
131
|
}
|
|
132
132
|
:host([marker="radio"][selected]) .radio-marker::after {
|
|
133
133
|
transform: scale(1);
|
|
@@ -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
|
|
|
@@ -77,7 +77,7 @@ var styles = css`
|
|
|
77
77
|
background-color: var(--progress-bar-color);
|
|
78
78
|
transform-origin: left center;
|
|
79
79
|
transform: scaleX(0);
|
|
80
|
-
transition: transform
|
|
80
|
+
transition: transform var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
81
81
|
will-change: transform;
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -89,7 +89,7 @@ var styles = css`
|
|
|
89
89
|
background-color: var(--progress-bar-buffer-color);
|
|
90
90
|
transform-origin: left center;
|
|
91
91
|
transform: scaleX(0);
|
|
92
|
-
transition: transform
|
|
92
|
+
transition: transform var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
93
93
|
will-change: transform;
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -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
|
|
|
@@ -60,7 +60,7 @@ var styles = css`
|
|
|
60
60
|
/* === Mask === */
|
|
61
61
|
.mask-progress,
|
|
62
62
|
.mask-buffer {
|
|
63
|
-
transition: stroke-dashoffset
|
|
63
|
+
transition: stroke-dashoffset var(--u-duration-slow, 320ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/* === Track === */
|
|
@@ -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
|
|
|
@@ -29,10 +29,10 @@ var styles = css`
|
|
|
29
29
|
outline: none;
|
|
30
30
|
border-radius: 0.15em;
|
|
31
31
|
color: var(--rating-symbol-off-color);
|
|
32
|
-
transition: color 0.
|
|
32
|
+
transition: color var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1)), transform var(--u-duration-fast, 140ms) var(--u-ease-standard, cubic-bezier(0.2, 0, 0, 1));
|
|
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 {
|