@uniai-fe/uds-primitives 0.3.34 → 0.3.35
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/styles.css +25 -27
- package/package.json +1 -1
- package/src/components/input/styles/variables.scss +9 -9
- package/src/components/select/img/chevron/table/large.svg +3 -0
- package/src/components/select/img/chevron/table/medium.svg +3 -0
- package/src/components/select/img/chevron/table/small.svg +3 -0
- package/src/components/select/markup/Default.tsx +3 -0
- package/src/components/select/markup/foundation/Container.tsx +17 -1
- package/src/components/select/markup/foundation/Icon.tsx +14 -1
- package/src/components/select/styles/select.scss +29 -2
- package/src/components/select/types/props.ts +2 -5
- package/src/components/table/styles/foundation.scss +26 -26
package/dist/styles.css
CHANGED
|
@@ -387,15 +387,15 @@
|
|
|
387
387
|
--input-textarea-counter-letter-spacing: var(
|
|
388
388
|
--font-label-medium-letter-spacing
|
|
389
389
|
);
|
|
390
|
-
--input-table-text-small-size: var(--
|
|
391
|
-
--input-table-text-small-line-height: var(--
|
|
392
|
-
--input-table-text-small-weight: var(--
|
|
393
|
-
--input-table-text-medium-size: var(--
|
|
394
|
-
--input-table-text-medium-line-height: var(--
|
|
395
|
-
--input-table-text-medium-weight: var(--
|
|
396
|
-
--input-table-text-large-size: var(--
|
|
397
|
-
--input-table-text-large-line-height: var(--
|
|
398
|
-
--input-table-text-large-weight: var(--
|
|
390
|
+
--input-table-text-small-size: var(--table-td-text-size);
|
|
391
|
+
--input-table-text-small-line-height: var(--table-td-text-line-height);
|
|
392
|
+
--input-table-text-small-weight: var(--table-td-text-weight);
|
|
393
|
+
--input-table-text-medium-size: var(--table-td-text-size);
|
|
394
|
+
--input-table-text-medium-line-height: var(--table-td-text-line-height);
|
|
395
|
+
--input-table-text-medium-weight: var(--table-td-text-weight);
|
|
396
|
+
--input-table-text-large-size: var(--table-td-text-size);
|
|
397
|
+
--input-table-text-large-line-height: var(--table-td-text-line-height);
|
|
398
|
+
--input-table-text-large-weight: var(--table-td-text-weight);
|
|
399
399
|
/* Figma size 매핑: small/medium/large typography 토큰 */
|
|
400
400
|
--input-text-small-size: var(--font-body-xsmall-size);
|
|
401
401
|
--input-text-small-line-height: var(--font-label-medium-line-height);
|
|
@@ -3812,6 +3812,14 @@ figure.chip {
|
|
|
3812
3812
|
gap: var(--select-layout-gap);
|
|
3813
3813
|
min-width: 0;
|
|
3814
3814
|
}
|
|
3815
|
+
.select:where([data-priority=table]) {
|
|
3816
|
+
width: 100%;
|
|
3817
|
+
height: 100%;
|
|
3818
|
+
display: block;
|
|
3819
|
+
}
|
|
3820
|
+
.select:where([data-priority=table]) .select-button {
|
|
3821
|
+
height: 100%;
|
|
3822
|
+
}
|
|
3815
3823
|
|
|
3816
3824
|
.select:where([data-width=auto]) {
|
|
3817
3825
|
--select-width: auto;
|
|
@@ -4215,9 +4223,16 @@ figure.chip {
|
|
|
4215
4223
|
width: 100%;
|
|
4216
4224
|
height: 100%;
|
|
4217
4225
|
}
|
|
4218
|
-
|
|
4226
|
+
|
|
4227
|
+
.select-button:not([data-size=xsmall]):not([data-priority=table]) .select-icon svg path {
|
|
4219
4228
|
fill: var(--select-icon-fill);
|
|
4220
4229
|
}
|
|
4230
|
+
.select-button :where([data-size=xsmall]) svg path {
|
|
4231
|
+
stroke: var(--select-icon-fill);
|
|
4232
|
+
}
|
|
4233
|
+
.select-button :where([data-priority=table]) svg path {
|
|
4234
|
+
stroke: var(--select-icon-fill);
|
|
4235
|
+
}
|
|
4221
4236
|
|
|
4222
4237
|
.tab-root {
|
|
4223
4238
|
/* Figma node 694:4619 측정값을 CSS 변수로 고정해 Storybook과 실 서비스 간 시각 편차를 줄인다. */
|
|
@@ -4644,23 +4659,6 @@ figure.chip {
|
|
|
4644
4659
|
margin-block: calc(var(--table-cell-padding-block) * -1);
|
|
4645
4660
|
}
|
|
4646
4661
|
|
|
4647
|
-
.table-cell-content[data-padding=default] > :where(.select.select-container:has(.select-button[data-priority=table])) {
|
|
4648
|
-
width: calc(100% + var(--table-cell-padding-inline) * 2);
|
|
4649
|
-
margin-inline: calc(var(--table-cell-padding-inline) * -1);
|
|
4650
|
-
margin-block: calc(var(--table-cell-padding-block) * -1);
|
|
4651
|
-
flex: 1 1 auto;
|
|
4652
|
-
}
|
|
4653
|
-
|
|
4654
|
-
.table-cell-content[data-padding=default] > :where(.select.select-container:has(.select-button[data-priority=table])) .select-button {
|
|
4655
|
-
width: 100%;
|
|
4656
|
-
}
|
|
4657
|
-
|
|
4658
|
-
.table-cell-content[data-padding=none] > :where(.select.select-container:has(.select-button[data-priority=table])),
|
|
4659
|
-
.table-cell-content[data-no-padding=true] > :where(.select.select-container:has(.select-button[data-priority=table])) {
|
|
4660
|
-
width: 100%;
|
|
4661
|
-
margin: 0;
|
|
4662
|
-
}
|
|
4663
|
-
|
|
4664
4662
|
.table-cell-content[data-padding=none] > :where(.input[data-priority=table]),
|
|
4665
4663
|
.table-cell-content[data-no-padding=true] > :where(.input[data-priority=table]),
|
|
4666
4664
|
.table-cell-content[data-padding=none] :where(.input[data-priority=table] .input-box,
|
package/package.json
CHANGED
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
--input-textarea-counter-letter-spacing: var(
|
|
43
43
|
--font-label-medium-letter-spacing
|
|
44
44
|
);
|
|
45
|
-
--input-table-text-small-size: var(--
|
|
46
|
-
--input-table-text-small-line-height: var(--
|
|
47
|
-
--input-table-text-small-weight: var(--
|
|
48
|
-
--input-table-text-medium-size: var(--
|
|
49
|
-
--input-table-text-medium-line-height: var(--
|
|
50
|
-
--input-table-text-medium-weight: var(--
|
|
51
|
-
--input-table-text-large-size: var(--
|
|
52
|
-
--input-table-text-large-line-height: var(--
|
|
53
|
-
--input-table-text-large-weight: var(--
|
|
45
|
+
--input-table-text-small-size: var(--table-td-text-size);
|
|
46
|
+
--input-table-text-small-line-height: var(--table-td-text-line-height);
|
|
47
|
+
--input-table-text-small-weight: var(--table-td-text-weight);
|
|
48
|
+
--input-table-text-medium-size: var(--table-td-text-size);
|
|
49
|
+
--input-table-text-medium-line-height: var(--table-td-text-line-height);
|
|
50
|
+
--input-table-text-medium-weight: var(--table-td-text-weight);
|
|
51
|
+
--input-table-text-large-size: var(--table-td-text-size);
|
|
52
|
+
--input-table-text-large-line-height: var(--table-td-text-line-height);
|
|
53
|
+
--input-table-text-large-weight: var(--table-td-text-weight);
|
|
54
54
|
/* Figma size 매핑: small/medium/large typography 토큰 */
|
|
55
55
|
--input-text-small-size: var(--font-body-xsmall-size);
|
|
56
56
|
--input-text-small-line-height: var(--font-label-medium-line-height);
|
|
@@ -228,6 +228,9 @@ export function SelectDefault<OptionData = unknown>({
|
|
|
228
228
|
className={clsx("select-trigger-container", className)}
|
|
229
229
|
block={resolvedBlock}
|
|
230
230
|
width={width}
|
|
231
|
+
priority={priority}
|
|
232
|
+
size={resolvedSize}
|
|
233
|
+
state={disabled ? "disabled" : state}
|
|
231
234
|
>
|
|
232
235
|
<Dropdown.Root
|
|
233
236
|
open={dropdownOpen}
|
|
@@ -20,7 +20,20 @@ import {
|
|
|
20
20
|
* @param {React.ReactNode} props.children trigger 및 dropdown 콘텐츠
|
|
21
21
|
*/
|
|
22
22
|
const SelectContainer = forwardRef<HTMLDivElement, SelectContainerProps>(
|
|
23
|
-
(
|
|
23
|
+
(
|
|
24
|
+
{
|
|
25
|
+
className,
|
|
26
|
+
children,
|
|
27
|
+
block = false,
|
|
28
|
+
width,
|
|
29
|
+
style,
|
|
30
|
+
priority,
|
|
31
|
+
size,
|
|
32
|
+
state,
|
|
33
|
+
...restProps
|
|
34
|
+
},
|
|
35
|
+
ref,
|
|
36
|
+
) => {
|
|
24
37
|
const widthAttr =
|
|
25
38
|
width !== undefined
|
|
26
39
|
? getFormFieldWidthAttr(width)
|
|
@@ -41,6 +54,9 @@ const SelectContainer = forwardRef<HTMLDivElement, SelectContainerProps>(
|
|
|
41
54
|
"select-block": block,
|
|
42
55
|
})}
|
|
43
56
|
data-width={widthAttr}
|
|
57
|
+
data-priority={priority}
|
|
58
|
+
data-size={size}
|
|
59
|
+
data-state={state}
|
|
44
60
|
style={mergedStyle}
|
|
45
61
|
{...restProps}
|
|
46
62
|
>
|
|
@@ -41,6 +41,19 @@ const SelectChevronSecondaryIcon: SelectChevronNonPrimaryIconSizeMap = {
|
|
|
41
41
|
large: ChevronSecondaryLarge,
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Select; Chevron 아이콘 - table
|
|
46
|
+
* size 무관하게 모두 동일한 아이콘
|
|
47
|
+
* - small
|
|
48
|
+
* - medium
|
|
49
|
+
* - large
|
|
50
|
+
*/
|
|
51
|
+
const SelectChevronTableIcon: SelectChevronNonPrimaryIconSizeMap = {
|
|
52
|
+
small: ChevronPrimaryXsmall,
|
|
53
|
+
medium: ChevronPrimaryXsmall,
|
|
54
|
+
large: ChevronPrimaryXsmall,
|
|
55
|
+
};
|
|
56
|
+
|
|
44
57
|
/**
|
|
45
58
|
* Select; Chevron 아이콘 컬렉션
|
|
46
59
|
* - primary (xsmall, small, medium, large)
|
|
@@ -51,7 +64,7 @@ const SelectChevronIcon: SelectIconPriorityMap = {
|
|
|
51
64
|
primary: SelectChevronPrimaryIcon,
|
|
52
65
|
secondary: SelectChevronSecondaryIcon,
|
|
53
66
|
// 변경: table priority는 secondary chevron 자산을 재사용한다.
|
|
54
|
-
table:
|
|
67
|
+
table: SelectChevronTableIcon,
|
|
55
68
|
};
|
|
56
69
|
|
|
57
70
|
/**
|
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
flex-direction: column;
|
|
6
6
|
gap: var(--select-layout-gap);
|
|
7
7
|
min-width: 0;
|
|
8
|
+
|
|
9
|
+
&:where([data-priority="table"]) {
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
display: block;
|
|
13
|
+
.select-button {
|
|
14
|
+
height: 100%;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
8
17
|
}
|
|
9
18
|
|
|
10
19
|
.select:where([data-width="auto"]) {
|
|
@@ -512,9 +521,27 @@
|
|
|
512
521
|
display: block;
|
|
513
522
|
width: 100%;
|
|
514
523
|
height: 100%;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
515
526
|
|
|
516
|
-
|
|
517
|
-
|
|
527
|
+
.select-button {
|
|
528
|
+
&:not([data-size="xsmall"]):not([data-priority="table"]) {
|
|
529
|
+
.select-icon {
|
|
530
|
+
svg {
|
|
531
|
+
path {
|
|
532
|
+
fill: var(--select-icon-fill);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
:where([data-size="xsmall"]) {
|
|
538
|
+
svg path {
|
|
539
|
+
stroke: var(--select-icon-fill);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
:where([data-priority="table"]) {
|
|
543
|
+
svg path {
|
|
544
|
+
stroke: var(--select-icon-fill);
|
|
518
545
|
}
|
|
519
546
|
}
|
|
520
547
|
}
|
|
@@ -94,7 +94,8 @@ export interface SelectComponentState {
|
|
|
94
94
|
* @property {boolean} [block] block 여부
|
|
95
95
|
* @property {FormFieldWidth} [width] width preset
|
|
96
96
|
*/
|
|
97
|
-
export interface SelectContainerProps
|
|
97
|
+
export interface SelectContainerProps
|
|
98
|
+
extends HTMLAttributes<HTMLDivElement>, SelectStyleOptions {
|
|
98
99
|
/**
|
|
99
100
|
* 사용자 정의 className
|
|
100
101
|
*/
|
|
@@ -103,10 +104,6 @@ export interface SelectContainerProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
103
104
|
* trigger/Dropdown 등 내부 콘텐츠
|
|
104
105
|
*/
|
|
105
106
|
children: ReactNode;
|
|
106
|
-
/**
|
|
107
|
-
* block 여부
|
|
108
|
-
*/
|
|
109
|
-
block?: boolean;
|
|
110
107
|
/**
|
|
111
108
|
* width preset
|
|
112
109
|
*/
|
|
@@ -399,32 +399,32 @@
|
|
|
399
399
|
margin-block: calc(var(--table-cell-padding-block) * -1);
|
|
400
400
|
}
|
|
401
401
|
|
|
402
|
-
.table-cell-content[data-padding="default"]
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
.table-cell-content[data-padding="default"]
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
.table-cell-content[data-padding="none"]
|
|
420
|
-
|
|
421
|
-
.table-cell-content[data-no-padding="true"]
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
}
|
|
402
|
+
// .table-cell-content[data-padding="default"]
|
|
403
|
+
// > :where(
|
|
404
|
+
// .select.select-container:has(.select-button[data-priority="table"])
|
|
405
|
+
// ) {
|
|
406
|
+
// width: calc(100% + (var(--table-cell-padding-inline) * 2));
|
|
407
|
+
// margin-inline: calc(var(--table-cell-padding-inline) * -1);
|
|
408
|
+
// margin-block: calc(var(--table-cell-padding-block) * -1);
|
|
409
|
+
// flex: 1 1 auto;
|
|
410
|
+
// }
|
|
411
|
+
|
|
412
|
+
// .table-cell-content[data-padding="default"]
|
|
413
|
+
// > :where(.select.select-container:has(.select-button[data-priority="table"]))
|
|
414
|
+
// .select-button {
|
|
415
|
+
// // 변경 설명: select 버튼 높이는 select 컴포넌트 토큰(min-height/size) 계약을 우선한다.
|
|
416
|
+
// width: 100%;
|
|
417
|
+
// }
|
|
418
|
+
|
|
419
|
+
// .table-cell-content[data-padding="none"]
|
|
420
|
+
// > :where(.select.select-container:has(.select-button[data-priority="table"])),
|
|
421
|
+
// .table-cell-content[data-no-padding="true"]
|
|
422
|
+
// > :where(
|
|
423
|
+
// .select.select-container:has(.select-button[data-priority="table"])
|
|
424
|
+
// ) {
|
|
425
|
+
// width: 100%;
|
|
426
|
+
// margin: 0;
|
|
427
|
+
// }
|
|
428
428
|
|
|
429
429
|
.table-cell-content[data-padding="none"]
|
|
430
430
|
> :where(.input[data-priority="table"]),
|