@nurihaus/web-design-system 3.5.0 → 3.6.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/dist/ai/components.md
CHANGED
|
@@ -164,7 +164,7 @@ import { Callout } from '@nurihaus/web-design-system/callout'; // 이 컴포
|
|
|
164
164
|
import { Callout } from '@nurihaus/web-design-system'; // 루트. 첫 로드 JS 가 커진다
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
**언제 쓴다.** 버튼 같은 대상에 붙어 늘 떠 있는 짧은 라벨 말풍선에 쓴다(예: 로그인 버튼의 "최근 사용"). 꼬리 자리는 `tail`(`bottom-start` 기본·`bottom-end`·`top-start`·`top-end`)로 고른다. 버튼에 붙일 때는 Callout 을 직접 놓지 말고 CTAButton 의 `callout` prop 을 쓴다 — 모서리 자리를 DS 가 잡는다. 그 밖의 대상에 놓을 때는 자리(`position: absolute`·위치)를 쓰는 쪽이 `className` 으로 정한다. `.base-callout` 이 꼬리 기준으로 `position: relative` 를 가지므로 한 단계 구체적인 선택자(`.slot > .x`)로 덮는다.
|
|
167
|
+
**언제 쓴다.** 버튼 같은 대상에 붙어 늘 떠 있는 짧은 라벨 말풍선에 쓴다(예: 로그인 버튼의 "최근 사용"). 꼬리 자리는 `tail`(`bottom-start` 기본·`bottom-end`·`top-start`·`top-end`)로 고른다. 나타날 때 꼬리에서 튀어나온 뒤 세 번 둥실 움직이고 멈춘다(동작 줄이기 설정이면 움직이지 않는다). 모션은 쓰는 쪽이 고르지 않는다. 버튼에 붙일 때는 Callout 을 직접 놓지 말고 CTAButton 의 `callout` prop 을 쓴다 — 모서리 자리를 DS 가 잡는다. 그 밖의 대상에 놓을 때는 자리(`position: absolute`·위치)를 쓰는 쪽이 `className` 으로 정한다. 위치는 `top`·`right` 같은 값으로 잡는다 — `transform` 은 등장 모션이 쓰므로 덮어써진다. `.base-callout` 이 꼬리 기준으로 `position: relative` 를 가지므로 한 단계 구체적인 선택자(`.slot > .x`)로 덮는다.
|
|
168
168
|
|
|
169
169
|
**쓰지 않는다.** 마우스를 올리거나 포커스했을 때만 설명을 보여 주려면 Tooltip 을 쓴다. 상태값·분류 라벨은 OptionBadge 를 쓴다.
|
|
170
170
|
|
|
@@ -22,6 +22,7 @@ declare const meta: {
|
|
|
22
22
|
title: import("react").ReactNode;
|
|
23
23
|
track?: string | undefined;
|
|
24
24
|
key?: import("react").Key | null | undefined;
|
|
25
|
+
value?: string | number | readonly string[] | undefined;
|
|
25
26
|
defaultChecked?: boolean | undefined | undefined;
|
|
26
27
|
defaultValue?: string | number | readonly string[] | undefined;
|
|
27
28
|
suppressContentEditableWarning?: boolean | undefined | undefined;
|
|
@@ -285,11 +286,10 @@ declare const meta: {
|
|
|
285
286
|
onTransitionEnd?: import("react").TransitionEventHandler<HTMLLIElement> | undefined;
|
|
286
287
|
onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLLIElement> | undefined;
|
|
287
288
|
variant?: (typeof variants)[number] | undefined;
|
|
288
|
-
|
|
289
|
+
trackProps?: Record<string, string | number | boolean> | undefined;
|
|
289
290
|
open?: boolean | undefined;
|
|
291
|
+
defaultOpen?: boolean | undefined;
|
|
290
292
|
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
291
|
-
trackProps?: Record<string, string | number | boolean> | undefined;
|
|
292
|
-
value?: string | number | readonly string[] | undefined;
|
|
293
293
|
onResume?: (() => void) | undefined;
|
|
294
294
|
duration?: number | undefined;
|
|
295
295
|
description?: import("react").ReactNode;
|
package/dist/components.css
CHANGED
|
@@ -848,9 +848,33 @@
|
|
|
848
848
|
font-weight: var(--font-weight-bold);
|
|
849
849
|
white-space: nowrap;
|
|
850
850
|
|
|
851
|
-
/*
|
|
851
|
+
/* 나타날 때 꼬리에서 튀어나온 뒤 세 번 둥실 움직이고 멈춘다 (ADR 0007). 계속 움직이면 거슬린다.
|
|
852
|
+
둥실 지연 = 팝 지연 + 팝 시간. 팝 쪽을 바꾸면 둥실 지연도 같이 바꾼다 */
|
|
853
|
+
--callout-origin: var(--spacing-16) 100%;
|
|
854
|
+
--callout-enter: translateY(var(--spacing-4));
|
|
855
|
+
|
|
856
|
+
transform-origin: var(--callout-origin);
|
|
857
|
+
animation:
|
|
858
|
+
callout-pop var(--motion-slow) var(--motion-spring) var(--motion-fast) both,
|
|
859
|
+
callout-float calc(var(--motion-base) * 8) var(--motion-ease)
|
|
860
|
+
calc(var(--motion-fast) + var(--motion-slow)) 3;
|
|
852
861
|
}
|
|
853
862
|
|
|
863
|
+
.base-callout.tail-bottom-end {
|
|
864
|
+
--callout-origin: calc(100% - var(--spacing-16)) 100%;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
.base-callout:is(.tail-top-start,.tail-top-end) {
|
|
868
|
+
--callout-origin: var(--spacing-16) 0;
|
|
869
|
+
--callout-enter: translateY(calc(var(--spacing-4) * -1));
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
.base-callout.tail-top-end {
|
|
873
|
+
--callout-origin: calc(100% - var(--spacing-16)) 0;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
/* 꼬리: --spacing-8 정사각형을 45도 돌린다. 한 변의 절반에 테두리 두께만큼 더 밖으로 내어 몸통 테두리를 덮는다 */
|
|
877
|
+
|
|
854
878
|
.base-callout::after {
|
|
855
879
|
content: '';
|
|
856
880
|
position: absolute;
|
|
@@ -881,6 +905,35 @@
|
|
|
881
905
|
right: var(--spacing-12);
|
|
882
906
|
}
|
|
883
907
|
|
|
908
|
+
@keyframes callout-pop {
|
|
909
|
+
from {
|
|
910
|
+
opacity: 0;
|
|
911
|
+
transform: var(--callout-enter) scale(0.6);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
to {
|
|
915
|
+
opacity: 1;
|
|
916
|
+
transform: none;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
@keyframes callout-float {
|
|
921
|
+
0%,
|
|
922
|
+
100% {
|
|
923
|
+
transform: none;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
50% {
|
|
927
|
+
transform: translateY(calc(var(--spacing-6) / -2));
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
@media (prefers-reduced-motion: reduce) {
|
|
932
|
+
.base-callout {
|
|
933
|
+
animation: none;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
884
937
|
.base-check-box.label {
|
|
885
938
|
font-size: var(--font-size-sm);
|
|
886
939
|
font-weight: var(--font-weight-medium);
|
package/dist/styles.css
CHANGED
|
@@ -1161,8 +1161,28 @@ p {
|
|
|
1161
1161
|
font-weight: var(--font-weight-bold);
|
|
1162
1162
|
white-space: nowrap;
|
|
1163
1163
|
|
|
1164
|
-
/*
|
|
1164
|
+
/* 나타날 때 꼬리에서 튀어나온 뒤 세 번 둥실 움직이고 멈춘다 (ADR 0007). 계속 움직이면 거슬린다.
|
|
1165
|
+
둥실 지연 = 팝 지연 + 팝 시간. 팝 쪽을 바꾸면 둥실 지연도 같이 바꾼다 */
|
|
1166
|
+
--callout-origin: var(--spacing-16) 100%;
|
|
1167
|
+
--callout-enter: translateY(var(--spacing-4));
|
|
1168
|
+
|
|
1169
|
+
transform-origin: var(--callout-origin);
|
|
1170
|
+
animation:
|
|
1171
|
+
callout-pop var(--motion-slow) var(--motion-spring) var(--motion-fast) both,
|
|
1172
|
+
callout-float calc(var(--motion-base) * 8) var(--motion-ease)
|
|
1173
|
+
calc(var(--motion-fast) + var(--motion-slow)) 3;
|
|
1165
1174
|
}
|
|
1175
|
+
.base-callout.tail-bottom-end {
|
|
1176
|
+
--callout-origin: calc(100% - var(--spacing-16)) 100%;
|
|
1177
|
+
}
|
|
1178
|
+
.base-callout:is(.tail-top-start,.tail-top-end) {
|
|
1179
|
+
--callout-origin: var(--spacing-16) 0;
|
|
1180
|
+
--callout-enter: translateY(calc(var(--spacing-4) * -1));
|
|
1181
|
+
}
|
|
1182
|
+
.base-callout.tail-top-end {
|
|
1183
|
+
--callout-origin: calc(100% - var(--spacing-16)) 0;
|
|
1184
|
+
}
|
|
1185
|
+
/* 꼬리: --spacing-8 정사각형을 45도 돌린다. 한 변의 절반에 테두리 두께만큼 더 밖으로 내어 몸통 테두리를 덮는다 */
|
|
1166
1186
|
.base-callout::after {
|
|
1167
1187
|
content: '';
|
|
1168
1188
|
position: absolute;
|
|
@@ -1188,6 +1208,32 @@ p {
|
|
|
1188
1208
|
.base-callout:is(.tail-bottom-end,.tail-top-end)::after {
|
|
1189
1209
|
right: var(--spacing-12);
|
|
1190
1210
|
}
|
|
1211
|
+
@keyframes callout-pop {
|
|
1212
|
+
from {
|
|
1213
|
+
opacity: 0;
|
|
1214
|
+
transform: var(--callout-enter) scale(0.6);
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
to {
|
|
1218
|
+
opacity: 1;
|
|
1219
|
+
transform: none;
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
@keyframes callout-float {
|
|
1223
|
+
0%,
|
|
1224
|
+
100% {
|
|
1225
|
+
transform: none;
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
50% {
|
|
1229
|
+
transform: translateY(calc(var(--spacing-6) / -2));
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1233
|
+
.base-callout {
|
|
1234
|
+
animation: none;
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1191
1237
|
.base-check-box.label {
|
|
1192
1238
|
font-size: var(--font-size-sm);
|
|
1193
1239
|
font-weight: var(--font-weight-medium);
|