@reopt-ai/opt-ui 1.10.0 → 1.11.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/COMPONENT_CATALOG.md +177 -66
- package/README.md +21 -5
- package/dist/core/index.cjs +10 -8
- package/dist/core/index.d.cts +3 -3
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +3 -3
- package/dist/docs/02-components/01-core.md +92 -41
- package/dist/docs/02-components/02-visuals.md +1 -1
- package/dist/docs/02-components/03-shells.md +96 -26
- package/dist/docs/02-components/04-surfaces.md +1 -1
- package/dist/docs/02-components/index.md +5 -5
- package/dist/{field-sidebar-DWfJAJlx.d.ts → field-sidebar-B5SQC35J.d.cts} +214 -3
- package/dist/field-sidebar-B5SQC35J.d.cts.map +1 -0
- package/dist/{field-sidebar-BXjvV7Cz.js → field-sidebar-BXl5RJ3q.js} +589 -40
- package/dist/field-sidebar-BXl5RJ3q.js.map +1 -0
- package/dist/{field-sidebar-nwcE9LC4.d.cts → field-sidebar-CBeWE8xX.d.ts} +214 -3
- package/dist/field-sidebar-CBeWE8xX.d.ts.map +1 -0
- package/dist/{field-sidebar-B6Ndr8HE.cjs → field-sidebar-DAuN4jPV.cjs} +605 -38
- package/dist/id-registry.cjs +46 -6
- package/dist/id-registry.d.cts.map +1 -1
- package/dist/id-registry.d.ts.map +1 -1
- package/dist/id-registry.js +46 -6
- package/dist/id-registry.js.map +1 -1
- package/dist/id-registry.json +97 -12
- package/dist/index.cjs +39 -33
- package/dist/index.d.cts +10 -6
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -19
- package/dist/index.js.map +1 -1
- package/dist/{key-pad-menu-DfZbeXhG.d.cts → key-pad-menu-BxTy_u0Q.d.cts} +152 -7
- package/dist/key-pad-menu-BxTy_u0Q.d.cts.map +1 -0
- package/dist/{key-pad-menu-D5mQcS5v.cjs → key-pad-menu-Cg6rZBie.cjs} +490 -609
- package/dist/{key-pad-menu-BsgJMjD4.d.ts → key-pad-menu-u5GTJl9B.d.ts} +152 -7
- package/dist/key-pad-menu-u5GTJl9B.d.ts.map +1 -0
- package/dist/{key-pad-menu-BQunU20e.js → key-pad-menu-wXkWn1I1.js} +387 -458
- package/dist/key-pad-menu-wXkWn1I1.js.map +1 -0
- package/dist/meta.cjs +486 -9
- package/dist/meta.d.cts.map +1 -1
- package/dist/meta.d.ts.map +1 -1
- package/dist/meta.js +486 -9
- package/dist/meta.js.map +1 -1
- package/dist/shells/index.cjs +4 -1
- package/dist/shells/index.d.cts +2 -2
- package/dist/shells/index.d.ts +2 -2
- package/dist/shells/index.js +2 -2
- package/dist/{text-truncate-CxdzAnhS.cjs → text-truncate-BZdL1k5Z.cjs} +474 -83
- package/dist/{text-truncate-j6X3z7Pv.js → text-truncate-C17HHCR-.js} +405 -86
- package/dist/text-truncate-C17HHCR-.js.map +1 -0
- package/dist/{text-truncate-BGr7bB_8.d.ts → text-truncate-DW78lg4S.d.cts} +18 -3
- package/dist/text-truncate-DW78lg4S.d.cts.map +1 -0
- package/dist/{text-truncate-BGr7bB_8.d.cts → text-truncate-DW78lg4S.d.ts} +18 -3
- package/dist/text-truncate-DW78lg4S.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/field-sidebar-BXjvV7Cz.js.map +0 -1
- package/dist/field-sidebar-DWfJAJlx.d.ts.map +0 -1
- package/dist/field-sidebar-nwcE9LC4.d.cts.map +0 -1
- package/dist/key-pad-menu-BQunU20e.js.map +0 -1
- package/dist/key-pad-menu-BsgJMjD4.d.ts.map +0 -1
- package/dist/key-pad-menu-DfZbeXhG.d.cts.map +0 -1
- package/dist/text-truncate-BGr7bB_8.d.cts.map +0 -1
- package/dist/text-truncate-BGr7bB_8.d.ts.map +0 -1
- package/dist/text-truncate-j6X3z7Pv.js.map +0 -1
package/dist/meta.cjs
CHANGED
|
@@ -1050,7 +1050,7 @@ const coreMetas = [
|
|
|
1050
1050
|
{
|
|
1051
1051
|
name: "StatCard",
|
|
1052
1052
|
category: "core",
|
|
1053
|
-
description: "
|
|
1053
|
+
description: "단일 지표를 값·변화량·보조 설명으로 표시하는 통계 카드. 비교 기준이 없으면 변화량 줄을 렌더하지 않는다.",
|
|
1054
1054
|
slug: "stat-card",
|
|
1055
1055
|
exports: ["StatCard"],
|
|
1056
1056
|
props: { StatCard: [
|
|
@@ -1069,14 +1069,61 @@ const coreMetas = [
|
|
|
1069
1069
|
{
|
|
1070
1070
|
name: "change",
|
|
1071
1071
|
type: "string",
|
|
1072
|
-
|
|
1073
|
-
description: "변화량 텍스트 (예: '+12.5%')"
|
|
1072
|
+
description: "변화량 텍스트 (예: '+12.5%'). 비교 기준이 없으면 생략 — trend와 함께 있을 때만 렌더된다"
|
|
1074
1073
|
},
|
|
1075
1074
|
{
|
|
1076
1075
|
name: "trend",
|
|
1077
1076
|
type: "\"up\" | \"down\" | \"neutral\"",
|
|
1078
|
-
|
|
1079
|
-
|
|
1077
|
+
description: "변화 방향. change와 함께 있을 때만 의미를 갖는다"
|
|
1078
|
+
},
|
|
1079
|
+
{
|
|
1080
|
+
name: "polarity",
|
|
1081
|
+
type: "\"positive\" | \"negative\"",
|
|
1082
|
+
default: "\"positive\"",
|
|
1083
|
+
description: "상승이 좋은 지표인지. 이탈률·에러 수처럼 반대인 지표는 negative로 색을 뒤집는다"
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
name: "description",
|
|
1087
|
+
type: "string",
|
|
1088
|
+
description: "값 아래 한 줄 보조 설명 (집계 대상·기간 등)"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
name: "hint",
|
|
1092
|
+
type: "string",
|
|
1093
|
+
description: "산출 근거 등 긴 설명. 툴팁과 aria-describedby로 노출"
|
|
1094
|
+
},
|
|
1095
|
+
{
|
|
1096
|
+
name: "size",
|
|
1097
|
+
type: "\"sm\" | \"md\"",
|
|
1098
|
+
default: "\"md\"",
|
|
1099
|
+
description: "밀도 프리셋. 요약 행에는 sm"
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
name: "loading",
|
|
1103
|
+
type: "boolean",
|
|
1104
|
+
default: "false",
|
|
1105
|
+
description: "값 로딩 중 스켈레톤 표시"
|
|
1106
|
+
},
|
|
1107
|
+
{
|
|
1108
|
+
name: "href",
|
|
1109
|
+
type: "string",
|
|
1110
|
+
description: "드릴다운 링크. 지정 시 카드가 앵커로 렌더된다"
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
name: "onSelect",
|
|
1114
|
+
type: "() => void",
|
|
1115
|
+
description: "드릴다운 핸들러. 지정 시 카드가 버튼으로 렌더된다"
|
|
1116
|
+
},
|
|
1117
|
+
{
|
|
1118
|
+
name: "selected",
|
|
1119
|
+
type: "boolean",
|
|
1120
|
+
default: "false",
|
|
1121
|
+
description: "선택 가능한 카드 행에서 현재 선택 상태"
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
name: "sparklineData",
|
|
1125
|
+
type: "number[]",
|
|
1126
|
+
description: "값 옆에 그릴 미니 추세선 데이터"
|
|
1080
1127
|
}
|
|
1081
1128
|
] },
|
|
1082
1129
|
ariaRole: "presentation",
|
|
@@ -3103,12 +3150,180 @@ const store = useFormStore({ defaultValues: { name: "" } });
|
|
|
3103
3150
|
},
|
|
3104
3151
|
{
|
|
3105
3152
|
name: "actions",
|
|
3106
|
-
type: "EmptyStateAction[]",
|
|
3107
|
-
description: "액션 버튼
|
|
3153
|
+
type: "EmptyStateAction[] | ReactNode",
|
|
3154
|
+
description: "액션 버튼 배열 { label, onClick, variant? } 또는 직접 렌더할 노드"
|
|
3155
|
+
},
|
|
3156
|
+
{
|
|
3157
|
+
name: "body",
|
|
3158
|
+
type: "ReactNode",
|
|
3159
|
+
description: "description 대신 넣는 리치 본문 (문단·목록·코드 스니펫)"
|
|
3160
|
+
},
|
|
3161
|
+
{
|
|
3162
|
+
name: "footer",
|
|
3163
|
+
type: "ReactNode",
|
|
3164
|
+
description: "구분선 아래 보조 콘텐츠. 문서 링크·단축키 안내 등"
|
|
3165
|
+
},
|
|
3166
|
+
{
|
|
3167
|
+
name: "layout",
|
|
3168
|
+
type: "\"vertical\" | \"horizontal\"",
|
|
3169
|
+
default: "\"vertical\"",
|
|
3170
|
+
description: "horizontal은 아이콘을 텍스트 옆으로 옮긴다 (전체 페이지용)"
|
|
3171
|
+
},
|
|
3172
|
+
{
|
|
3173
|
+
name: "titleSize",
|
|
3174
|
+
type: "\"sm\" | \"md\" | \"lg\"",
|
|
3175
|
+
default: "\"md\"",
|
|
3176
|
+
description: "제목 시각 크기. headingLevel과 독립"
|
|
3177
|
+
},
|
|
3178
|
+
{
|
|
3179
|
+
name: "hasBorder",
|
|
3180
|
+
type: "boolean",
|
|
3181
|
+
default: "false",
|
|
3182
|
+
description: "테두리 있는 패널로 렌더"
|
|
3183
|
+
},
|
|
3184
|
+
{
|
|
3185
|
+
name: "tone",
|
|
3186
|
+
type: "\"default\" | \"subdued\" | \"error\"",
|
|
3187
|
+
default: "\"default\"",
|
|
3188
|
+
description: "error는 실패를 알리고 role=alert로 렌더. subdued는 아직 데이터가 없음을 뜻한다"
|
|
3189
|
+
},
|
|
3190
|
+
{
|
|
3191
|
+
name: "iconSize",
|
|
3192
|
+
type: "\"sm\" | \"md\" | \"lg\"",
|
|
3193
|
+
default: "\"md\"",
|
|
3194
|
+
description: "아이콘 크기 프리셋"
|
|
3195
|
+
},
|
|
3196
|
+
{
|
|
3197
|
+
name: "headingLevel",
|
|
3198
|
+
type: "\"h2\" | \"h3\" | \"h4\"",
|
|
3199
|
+
default: "\"h3\"",
|
|
3200
|
+
description: "문서 구조상 제목 레벨"
|
|
3108
3201
|
}
|
|
3109
3202
|
] },
|
|
3110
3203
|
testDescribe: "EmptyState"
|
|
3111
3204
|
},
|
|
3205
|
+
{
|
|
3206
|
+
name: "DescriptionList",
|
|
3207
|
+
category: "core",
|
|
3208
|
+
functionalCategory: "data-display",
|
|
3209
|
+
maturity: "stable",
|
|
3210
|
+
keywords: [
|
|
3211
|
+
"detail",
|
|
3212
|
+
"definition",
|
|
3213
|
+
"key-value",
|
|
3214
|
+
"metadata",
|
|
3215
|
+
"dl"
|
|
3216
|
+
],
|
|
3217
|
+
description: "한 대상의 라벨 있는 사실들을 시맨틱 <dl>로 표시한다. 상세 패널의 필드 나열을 표준화하고 식별자 복사를 제공한다.",
|
|
3218
|
+
slug: "description-list",
|
|
3219
|
+
exports: ["DescriptionList"],
|
|
3220
|
+
props: { DescriptionList: [
|
|
3221
|
+
{
|
|
3222
|
+
name: "items",
|
|
3223
|
+
type: "DescriptionListItem[]",
|
|
3224
|
+
required: true,
|
|
3225
|
+
description: "term/description 쌍 배열. { id, term, description, copyValue?, hint?, wrap? }"
|
|
3226
|
+
},
|
|
3227
|
+
{
|
|
3228
|
+
name: "layout",
|
|
3229
|
+
type: "\"grid\" | \"stack\" | \"inline\"",
|
|
3230
|
+
default: "\"grid\"",
|
|
3231
|
+
description: "grid는 각 쌍을 박스로 감싼다(필드가 많은 상세 패널). stack은 평범한 정의 목록, inline은 헤더 스트립용 한 줄 배치"
|
|
3232
|
+
},
|
|
3233
|
+
{
|
|
3234
|
+
name: "columns",
|
|
3235
|
+
type: "1 | 2 | 3 | 4",
|
|
3236
|
+
default: "2",
|
|
3237
|
+
description: "grid/stack 레이아웃의 컬럼 수"
|
|
3238
|
+
},
|
|
3239
|
+
{
|
|
3240
|
+
name: "compressed",
|
|
3241
|
+
type: "boolean",
|
|
3242
|
+
default: "false",
|
|
3243
|
+
description: "밀도 축소"
|
|
3244
|
+
},
|
|
3245
|
+
{
|
|
3246
|
+
name: "labels",
|
|
3247
|
+
type: "DescriptionListLabels",
|
|
3248
|
+
description: "복사/복사됨/빈 값 문구"
|
|
3249
|
+
}
|
|
3250
|
+
] },
|
|
3251
|
+
usage: {
|
|
3252
|
+
bestPractices: ["세션 ID·프로필 ID처럼 다른 화면에 붙여넣게 되는 값에는 copyValue를 준다.", "값이 비면 빈 셀 대신 labels.empty가 렌더되므로 로딩 중과 구분된다."],
|
|
3253
|
+
avoid: ["표 형태로 비교해야 하는 다건 데이터에는 쓰지 않는다 — 그건 DataTable의 일이다."]
|
|
3254
|
+
},
|
|
3255
|
+
testDescribe: "DescriptionList"
|
|
3256
|
+
},
|
|
3257
|
+
{
|
|
3258
|
+
name: "Identity",
|
|
3259
|
+
category: "core",
|
|
3260
|
+
functionalCategory: "data-display",
|
|
3261
|
+
maturity: "stable",
|
|
3262
|
+
keywords: [
|
|
3263
|
+
"user",
|
|
3264
|
+
"profile",
|
|
3265
|
+
"avatar",
|
|
3266
|
+
"person",
|
|
3267
|
+
"anonymous"
|
|
3268
|
+
],
|
|
3269
|
+
description: "사람(또는 익명 디바이스)을 목록 셀 한 칸으로 표현한다. 이름→이메일→ID 폴백과 익명 표식을 한 곳에서 처리한다.",
|
|
3270
|
+
slug: "identity",
|
|
3271
|
+
exports: ["Identity"],
|
|
3272
|
+
props: { Identity: [
|
|
3273
|
+
{
|
|
3274
|
+
name: "name",
|
|
3275
|
+
type: "string | null",
|
|
3276
|
+
description: "표시 이름. 없으면 secondary, 그다음 id로 폴백한다"
|
|
3277
|
+
},
|
|
3278
|
+
{
|
|
3279
|
+
name: "secondary",
|
|
3280
|
+
type: "string | null",
|
|
3281
|
+
description: "보통 이메일. 이름이 없으면 주 라벨로 승격된다"
|
|
3282
|
+
},
|
|
3283
|
+
{
|
|
3284
|
+
name: "id",
|
|
3285
|
+
type: "string",
|
|
3286
|
+
description: "최후 폴백 라벨이자 hover 시 title"
|
|
3287
|
+
},
|
|
3288
|
+
{
|
|
3289
|
+
name: "avatarSrc",
|
|
3290
|
+
type: "string | null",
|
|
3291
|
+
description: "아바타 이미지 URL"
|
|
3292
|
+
},
|
|
3293
|
+
{
|
|
3294
|
+
name: "state",
|
|
3295
|
+
type: "\"identified\" | \"anonymous\"",
|
|
3296
|
+
description: "익명 여부. 디바이스를 사람으로 오독하지 않게 배지로 표시한다"
|
|
3297
|
+
},
|
|
3298
|
+
{
|
|
3299
|
+
name: "badge",
|
|
3300
|
+
type: "ReactNode",
|
|
3301
|
+
description: "state 배지 대신 표시할 내용 (라이프사이클 단계 등)"
|
|
3302
|
+
},
|
|
3303
|
+
{
|
|
3304
|
+
name: "size",
|
|
3305
|
+
type: "\"sm\" | \"md\"",
|
|
3306
|
+
default: "\"md\"",
|
|
3307
|
+
description: "밀도 프리셋"
|
|
3308
|
+
},
|
|
3309
|
+
{
|
|
3310
|
+
name: "hideAvatar",
|
|
3311
|
+
type: "boolean",
|
|
3312
|
+
default: "false",
|
|
3313
|
+
description: "이미 밀도가 높은 행에서 아바타 제거"
|
|
3314
|
+
},
|
|
3315
|
+
{
|
|
3316
|
+
name: "labels",
|
|
3317
|
+
type: "{ identified?: string; anonymous?: string }",
|
|
3318
|
+
description: "식별/익명 배지 문구"
|
|
3319
|
+
}
|
|
3320
|
+
] },
|
|
3321
|
+
usage: {
|
|
3322
|
+
bestPractices: ["사용자·세션·이벤트 표에서 주체를 나타내는 컬럼에 일관되게 사용한다."],
|
|
3323
|
+
avoid: ["아바타만 필요하면 Avatar를 직접 쓴다."]
|
|
3324
|
+
},
|
|
3325
|
+
testDescribe: "Identity"
|
|
3326
|
+
},
|
|
3112
3327
|
{
|
|
3113
3328
|
name: "Card",
|
|
3114
3329
|
category: "core",
|
|
@@ -6790,14 +7005,25 @@ const filters = [
|
|
|
6790
7005
|
},
|
|
6791
7006
|
{
|
|
6792
7007
|
name: "columns",
|
|
6793
|
-
type: "2 | 3 | 4",
|
|
7008
|
+
type: "2 | 3 | 4 | 5 | 6",
|
|
6794
7009
|
default: "4",
|
|
6795
7010
|
description: "컬럼 수"
|
|
6796
7011
|
},
|
|
6797
7012
|
{
|
|
6798
7013
|
name: "onStatClick",
|
|
6799
7014
|
type: "(stat: StatCardType) => void",
|
|
6800
|
-
description: "카드 클릭
|
|
7015
|
+
description: "카드 클릭 핸들러. 지정 시 카드 자체가 버튼으로 렌더된다"
|
|
7016
|
+
},
|
|
7017
|
+
{
|
|
7018
|
+
name: "selectedStatId",
|
|
7019
|
+
type: "string",
|
|
7020
|
+
description: "선택 가능한 행에서 현재 뷰를 이끄는 카드 id"
|
|
7021
|
+
},
|
|
7022
|
+
{
|
|
7023
|
+
name: "size",
|
|
7024
|
+
type: "\"sm\" | \"md\"",
|
|
7025
|
+
default: "\"md\"",
|
|
7026
|
+
description: "카드 밀도. 표 위 헤더 스트립에는 sm"
|
|
6801
7027
|
},
|
|
6802
7028
|
{
|
|
6803
7029
|
name: "formatValue",
|
|
@@ -6832,6 +7058,257 @@ const filters = [
|
|
|
6832
7058
|
}],
|
|
6833
7059
|
testDescribe: "SummaryRow"
|
|
6834
7060
|
},
|
|
7061
|
+
{
|
|
7062
|
+
name: "EventTimeline",
|
|
7063
|
+
category: "shell",
|
|
7064
|
+
functionalCategory: "data-display",
|
|
7065
|
+
maturity: "stable",
|
|
7066
|
+
keywords: [
|
|
7067
|
+
"timeline",
|
|
7068
|
+
"events",
|
|
7069
|
+
"session",
|
|
7070
|
+
"activity",
|
|
7071
|
+
"sequence"
|
|
7072
|
+
],
|
|
7073
|
+
description: "이벤트를 순서로 읽히게 하는 타임라인. 인접 이벤트 사이의 경과 시간을 라벨링하고, 속성 페이로드를 제자리에서 펼치며, 세션 단위 그룹핑을 지원한다.",
|
|
7074
|
+
slug: "event-timeline",
|
|
7075
|
+
exports: ["EventTimeline"],
|
|
7076
|
+
props: { EventTimeline: [
|
|
7077
|
+
{
|
|
7078
|
+
name: "items",
|
|
7079
|
+
type: "EventTimelineItem[]",
|
|
7080
|
+
description: "평면 목록. groups가 있으면 무시된다"
|
|
7081
|
+
},
|
|
7082
|
+
{
|
|
7083
|
+
name: "groups",
|
|
7084
|
+
type: "EventTimelineGroup[]",
|
|
7085
|
+
description: "그룹(주로 세션) 단위 목록. 접기/펼치기와 그룹 요약을 제공"
|
|
7086
|
+
},
|
|
7087
|
+
{
|
|
7088
|
+
name: "showGaps",
|
|
7089
|
+
type: "boolean",
|
|
7090
|
+
default: "true",
|
|
7091
|
+
description: "인접 이벤트 사이 경과 시간 표시. 체크아웃 직전 4분 정지 같은 것이 발견이 된다"
|
|
7092
|
+
},
|
|
7093
|
+
{
|
|
7094
|
+
name: "order",
|
|
7095
|
+
type: "\"desc\" | \"asc\"",
|
|
7096
|
+
default: "\"desc\"",
|
|
7097
|
+
description: "전달된 items의 정렬 방향. 경과 시간 계산 기준"
|
|
7098
|
+
},
|
|
7099
|
+
{
|
|
7100
|
+
name: "minGapMs",
|
|
7101
|
+
type: "number",
|
|
7102
|
+
default: "1000",
|
|
7103
|
+
description: "이 값 미만의 간격은 라벨을 생략"
|
|
7104
|
+
},
|
|
7105
|
+
{
|
|
7106
|
+
name: "loading",
|
|
7107
|
+
type: "boolean",
|
|
7108
|
+
default: "false",
|
|
7109
|
+
description: "스켈레톤 표시"
|
|
7110
|
+
},
|
|
7111
|
+
{
|
|
7112
|
+
name: "hasMore",
|
|
7113
|
+
type: "boolean",
|
|
7114
|
+
default: "false",
|
|
7115
|
+
description: "더 불러올 항목 존재"
|
|
7116
|
+
},
|
|
7117
|
+
{
|
|
7118
|
+
name: "onLoadMore",
|
|
7119
|
+
type: "() => void",
|
|
7120
|
+
description: "더 보기 핸들러"
|
|
7121
|
+
},
|
|
7122
|
+
{
|
|
7123
|
+
name: "onItemSelect",
|
|
7124
|
+
type: "(item: EventTimelineItem) => void",
|
|
7125
|
+
description: "이벤트 헤드라인 클릭 핸들러"
|
|
7126
|
+
},
|
|
7127
|
+
{
|
|
7128
|
+
name: "locale",
|
|
7129
|
+
type: "string",
|
|
7130
|
+
description: "경과 시간 포맷 로케일"
|
|
7131
|
+
},
|
|
7132
|
+
{
|
|
7133
|
+
name: "labels",
|
|
7134
|
+
type: "EventTimelineLabels",
|
|
7135
|
+
description: "문구 오버라이드"
|
|
7136
|
+
}
|
|
7137
|
+
] },
|
|
7138
|
+
usage: {
|
|
7139
|
+
bestPractices: ["사용자 히스토리는 세션으로 그룹핑한다 — 세션 경계가 없으면 히스토리를 읽을 수 없다.", "이벤트 속성은 properties로 넘겨 제자리에서 펼치게 한다."],
|
|
7140
|
+
avoid: ["수천 건을 한 번에 넘기지 않는다. 페이지네이션이나 onLoadMore로 나눈다."]
|
|
7141
|
+
},
|
|
7142
|
+
testDescribe: "EventTimeline"
|
|
7143
|
+
},
|
|
7144
|
+
{
|
|
7145
|
+
name: "ScoreBreakdown",
|
|
7146
|
+
category: "shell",
|
|
7147
|
+
functionalCategory: "data-display",
|
|
7148
|
+
maturity: "stable",
|
|
7149
|
+
keywords: [
|
|
7150
|
+
"score",
|
|
7151
|
+
"engagement",
|
|
7152
|
+
"health",
|
|
7153
|
+
"rubric",
|
|
7154
|
+
"breakdown"
|
|
7155
|
+
],
|
|
7156
|
+
description: "합성 점수를 축별로 분해해 보여준다. 총점과 함께 각 축의 값·가중치·의미를 노출해 '43'을 판정이 아니라 발견으로 만든다.",
|
|
7157
|
+
slug: "score-breakdown",
|
|
7158
|
+
exports: ["ScoreBreakdown"],
|
|
7159
|
+
props: { ScoreBreakdown: [
|
|
7160
|
+
{
|
|
7161
|
+
name: "score",
|
|
7162
|
+
type: "number",
|
|
7163
|
+
required: true,
|
|
7164
|
+
description: "총점"
|
|
7165
|
+
},
|
|
7166
|
+
{
|
|
7167
|
+
name: "max",
|
|
7168
|
+
type: "number",
|
|
7169
|
+
default: "100",
|
|
7170
|
+
description: "총점 상한"
|
|
7171
|
+
},
|
|
7172
|
+
{
|
|
7173
|
+
name: "axes",
|
|
7174
|
+
type: "ScoreAxis[]",
|
|
7175
|
+
required: true,
|
|
7176
|
+
description: "기여 축 배열. { id, label, value, hint?, weight? }"
|
|
7177
|
+
},
|
|
7178
|
+
{
|
|
7179
|
+
name: "bands",
|
|
7180
|
+
type: "ScoreBand[]",
|
|
7181
|
+
description: "점수 구간 이름과 색. { min, label, tone? }"
|
|
7182
|
+
},
|
|
7183
|
+
{
|
|
7184
|
+
name: "formula",
|
|
7185
|
+
type: "ReactNode",
|
|
7186
|
+
description: "총점 산출식 설명 한 줄"
|
|
7187
|
+
},
|
|
7188
|
+
{
|
|
7189
|
+
name: "loading",
|
|
7190
|
+
type: "boolean",
|
|
7191
|
+
default: "false",
|
|
7192
|
+
description: "스켈레톤 표시"
|
|
7193
|
+
},
|
|
7194
|
+
{
|
|
7195
|
+
name: "labels",
|
|
7196
|
+
type: "ScoreBreakdownLabels",
|
|
7197
|
+
description: "문구 오버라이드"
|
|
7198
|
+
}
|
|
7199
|
+
] },
|
|
7200
|
+
usage: {
|
|
7201
|
+
bestPractices: ["축의 weight 합이 1이 되도록 넘겨 총점이 검산 가능하게 한다.", "각 축에 hint를 붙여 낮은 값이 무엇을 뜻하는지 설명한다."],
|
|
7202
|
+
avoid: ["축 없이 총점만 넘기지 않는다 — 그건 StatCard의 일이다."]
|
|
7203
|
+
},
|
|
7204
|
+
testDescribe: "ScoreBreakdown"
|
|
7205
|
+
},
|
|
7206
|
+
{
|
|
7207
|
+
name: "Flyout",
|
|
7208
|
+
category: "shell",
|
|
7209
|
+
functionalCategory: "overlay",
|
|
7210
|
+
maturity: "stable",
|
|
7211
|
+
keywords: [
|
|
7212
|
+
"panel",
|
|
7213
|
+
"detail",
|
|
7214
|
+
"preview",
|
|
7215
|
+
"side-panel",
|
|
7216
|
+
"inspector"
|
|
7217
|
+
],
|
|
7218
|
+
description: "목록을 화면에 둔 채 레코드를 옆에서 보여주는 상세 패널. 모달이 아니다 — 포커스 트랩·aria-modal·inert 없이 Escape로 닫고 포커스를 되돌린다.",
|
|
7219
|
+
slug: "flyout",
|
|
7220
|
+
exports: ["Flyout"],
|
|
7221
|
+
props: { Flyout: [
|
|
7222
|
+
{
|
|
7223
|
+
name: "open",
|
|
7224
|
+
type: "boolean",
|
|
7225
|
+
required: true,
|
|
7226
|
+
description: "열림 상태"
|
|
7227
|
+
},
|
|
7228
|
+
{
|
|
7229
|
+
name: "onClose",
|
|
7230
|
+
type: "() => void",
|
|
7231
|
+
required: true,
|
|
7232
|
+
description: "닫기 핸들러"
|
|
7233
|
+
},
|
|
7234
|
+
{
|
|
7235
|
+
name: "title",
|
|
7236
|
+
type: "ReactNode",
|
|
7237
|
+
description: "패널 제목"
|
|
7238
|
+
},
|
|
7239
|
+
{
|
|
7240
|
+
name: "description",
|
|
7241
|
+
type: "ReactNode",
|
|
7242
|
+
description: "제목 아래 한 줄 설명"
|
|
7243
|
+
},
|
|
7244
|
+
{
|
|
7245
|
+
name: "type",
|
|
7246
|
+
type: "\"overlay\" | \"inline\"",
|
|
7247
|
+
default: "\"overlay\"",
|
|
7248
|
+
description: "overlay는 페이지 위에 띄우고, inline은 aside로 렌더해 배치를 부모 레이아웃에 맡긴다"
|
|
7249
|
+
},
|
|
7250
|
+
{
|
|
7251
|
+
name: "side",
|
|
7252
|
+
type: "\"right\" | \"left\"",
|
|
7253
|
+
default: "\"right\"",
|
|
7254
|
+
description: "overlay일 때 붙는 방향"
|
|
7255
|
+
},
|
|
7256
|
+
{
|
|
7257
|
+
name: "size",
|
|
7258
|
+
type: "\"sm\" | \"md\" | \"lg\"",
|
|
7259
|
+
default: "\"md\"",
|
|
7260
|
+
description: "패널 너비"
|
|
7261
|
+
},
|
|
7262
|
+
{
|
|
7263
|
+
name: "actions",
|
|
7264
|
+
type: "ReactNode",
|
|
7265
|
+
description: "닫기 버튼 앞 컨트롤"
|
|
7266
|
+
},
|
|
7267
|
+
{
|
|
7268
|
+
name: "footer",
|
|
7269
|
+
type: "ReactNode",
|
|
7270
|
+
description: "하단 고정 영역"
|
|
7271
|
+
},
|
|
7272
|
+
{
|
|
7273
|
+
name: "scrim",
|
|
7274
|
+
type: "boolean",
|
|
7275
|
+
default: "false",
|
|
7276
|
+
description: "뒤 페이지를 어둡게. 기본 off — 목록이 계속 읽혀야 한다"
|
|
7277
|
+
},
|
|
7278
|
+
{
|
|
7279
|
+
name: "closeOnOutsideClick",
|
|
7280
|
+
type: "boolean",
|
|
7281
|
+
default: "true",
|
|
7282
|
+
description: "바깥 클릭 시 닫기 (overlay 전용)"
|
|
7283
|
+
},
|
|
7284
|
+
{
|
|
7285
|
+
name: "hideCloseButton",
|
|
7286
|
+
type: "boolean",
|
|
7287
|
+
default: "false",
|
|
7288
|
+
description: "닫기 버튼 숨김"
|
|
7289
|
+
},
|
|
7290
|
+
{
|
|
7291
|
+
name: "labels",
|
|
7292
|
+
type: "FlyoutLabels",
|
|
7293
|
+
description: "문구 오버라이드"
|
|
7294
|
+
},
|
|
7295
|
+
{
|
|
7296
|
+
name: "children",
|
|
7297
|
+
type: "ReactNode",
|
|
7298
|
+
required: true,
|
|
7299
|
+
description: "패널 본문"
|
|
7300
|
+
}
|
|
7301
|
+
] },
|
|
7302
|
+
keyboardShortcuts: [{
|
|
7303
|
+
keys: "Escape",
|
|
7304
|
+
action: "패널 닫고 여는 컨트롤로 포커스 복귀"
|
|
7305
|
+
}],
|
|
7306
|
+
usage: {
|
|
7307
|
+
bestPractices: ["목록에서 행을 미리 볼 때 쓴다. 딥링크가 필요한 상세는 별도 페이지를 함께 유지한다.", "넓은 화면에서는 type=\"inline\"으로 목록 옆에 나란히 둔다."],
|
|
7308
|
+
avoid: ["확인이 필요한 파괴적 작업에는 쓰지 않는다 — 그건 Dialog다."]
|
|
7309
|
+
},
|
|
7310
|
+
testDescribe: "Flyout"
|
|
7311
|
+
},
|
|
6835
7312
|
{
|
|
6836
7313
|
name: "ComparisonSelector",
|
|
6837
7314
|
category: "shell",
|
package/dist/meta.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.cts","names":[],"sources":["../src/core/_meta.ts","../src/visuals/_meta.ts","../src/shells/_meta.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"meta.d.cts","names":[],"sources":["../src/core/_meta.ts","../src/visuals/_meta.ts","../src/shells/_meta.ts"],"mappings":";;cAsnJa,WAAS;;;;cCnnJT,aAAa;;;cCmtHb,YAAU"}
|
package/dist/meta.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","names":[],"sources":["../src/core/_meta.ts","../src/visuals/_meta.ts","../src/shells/_meta.ts"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"meta.d.ts","names":[],"sources":["../src/core/_meta.ts","../src/visuals/_meta.ts","../src/shells/_meta.ts"],"mappings":";;cAsnJa,WAAS;;;;cCnnJT,aAAa;;;cCmtHb,YAAU"}
|