@uniai-fe/uds-primitives 0.3.9 → 0.3.11

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 CHANGED
@@ -293,7 +293,8 @@
293
293
  --form-field-helper-font-size: var(--font-caption-medium-size);
294
294
  --form-field-helper-font-weight: 400;
295
295
  --form-field-helper-line-height: var(--font-caption-medium-line-height);
296
- --form-field-helper-color: var(--color-label-neutral);
296
+ --form-field-helper-color-default: var(--color-label-neutral);
297
+ --form-field-helper-color-error: var(--color-feedback-error);
297
298
  --info-box-background-color: var(--color-blue-99);
298
299
  --info-box-border-color: var(--color-secondary-standard);
299
300
  --info-box-icon-color: var(--color-feedback-information);
@@ -352,7 +353,7 @@
352
353
  --input-label-font-weight: var(--font-label-small-weight);
353
354
  --input-helper-color: var(--color-label-neutral);
354
355
  --input-helper-success-color: var(--color-success);
355
- --input-helper-error-color: var(--color-error);
356
+ --input-helper-error-color: var(--color-feedback-error);
356
357
  --input-helper-disabled-color: var(--color-label-disabled);
357
358
  --input-helper-font-size: var(--font-label-small-size);
358
359
  --input-helper-line-height: var(--font-label-small-line-height);
@@ -376,7 +377,7 @@
376
377
  --input-border-table-default-color: transparent;
377
378
  --input-border-table-disabled-color: var(--input-border-table-default-color);
378
379
  --input-border-table-readonly-color: var(--input-border-table-disabled-color);
379
- /* error는 Figma 44% alpha */
380
+ /* error border기존 RGBA 스펙을 유지한다. */
380
381
  --input-border-error-color: rgba(218, 29, 11, 0.44);
381
382
  --input-border-disabled-color: var(--color-border-standard-cool-gray);
382
383
  --input-border-underline-disabled-color: var(--color-border-assistive);
@@ -458,6 +459,7 @@
458
459
  --select-table-radius: var(--input-table-radius-base);
459
460
  --select-table-border-default-color: var(--input-border-table-default-color);
460
461
  --select-table-border-focus-color: var(--input-border-active-color);
462
+ --select-table-border-error-color: var(--input-border-error-color);
461
463
  --select-table-border-disabled-color: var(--input-border-disabled-color);
462
464
  --select-table-border-readonly-color: var(
463
465
  --select-table-border-disabled-color
@@ -511,10 +513,12 @@
511
513
  --select-primary-color-text-readonly: var(--color-label-strong);
512
514
  --select-primary-color-border: var(--input-border-color);
513
515
  --select-primary-color-border-focused: var(--input-border-active-color);
516
+ --select-primary-color-border-error: var(--input-border-error-color);
514
517
  --select-primary-color-border-disabled: var(--input-border-disabled-color);
515
518
  --select-color-border-secondary: var(--input-border-color);
516
519
  --select-color-border-secondary-hover: var(--input-border-active-color);
517
520
  --select-color-border-secondary-focused: var(--input-border-active-color);
521
+ --select-color-border-secondary-error: var(--input-border-error-color);
518
522
  --select-color-border-secondary-disabled: var(
519
523
  --input-border-underline-disabled-color
520
524
  );
@@ -2299,10 +2303,19 @@ figure.chip {
2299
2303
  margin-top: var(--form-field-gap-y);
2300
2304
  font-size: var(--form-field-helper-font-size);
2301
2305
  line-height: var(--form-field-helper-line-height);
2306
+ color: var(--form-field-helper-color-default);
2302
2307
  }
2303
2308
  .form-field-footer p,
2304
2309
  .form-field-footer span {
2305
- color: var(--form-field-helper-color);
2310
+ color: inherit;
2311
+ }
2312
+
2313
+ .form-field-container[data-state=error] .form-field-footer {
2314
+ color: var(--form-field-helper-color-error);
2315
+ }
2316
+ .form-field-container[data-state=error] .form-field-footer p,
2317
+ .form-field-container[data-state=error] .form-field-footer span {
2318
+ color: inherit;
2306
2319
  }
2307
2320
 
2308
2321
 
@@ -3684,6 +3697,18 @@ figure.chip {
3684
3697
  border-width: var(--select-primary-border-width-focus);
3685
3698
  --select-icon-fill: var(--select-table-icon-color-focused);
3686
3699
  }
3700
+ .select-button:not([data-priority=secondary])[data-state=error] {
3701
+ border-color: var(--select-primary-color-border-error);
3702
+ --select-icon-fill: var(--select-icon-color-default);
3703
+ }
3704
+ .select-button[data-priority=secondary][data-state=error]::after {
3705
+ height: var(--select-secondary-underline-width-focus);
3706
+ background-color: var(--select-color-border-secondary-error);
3707
+ }
3708
+ .select-button[data-priority=table][data-state=error] {
3709
+ border-color: var(--select-table-border-error-color);
3710
+ --select-icon-fill: var(--select-table-icon-color-default);
3711
+ }
3687
3712
  .select-button:not([data-priority=secondary])[data-readonly=true] {
3688
3713
  border-color: var(--select-primary-color-border-disabled);
3689
3714
  background-color: var(--select-primary-color-surface-disabled);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.3.9",
3
+ "version": "0.3.11",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -25,6 +25,7 @@ const FormFieldContainer = forwardRef<HTMLElement, FormFieldContainerProps>(
25
25
  className,
26
26
  children,
27
27
  width,
28
+ state = "default",
28
29
  style,
29
30
  ...containerProps
30
31
  },
@@ -43,6 +44,7 @@ const FormFieldContainer = forwardRef<HTMLElement, FormFieldContainerProps>(
43
44
  <ComponentTag
44
45
  ref={ref}
45
46
  data-width={getFormFieldWidthAttr(width)}
47
+ data-state={state}
46
48
  className={clsx("form-field form-field-container", className)}
47
49
  style={mergedStyle}
48
50
  {...containerProps}
@@ -18,6 +18,7 @@ import FormFieldContainer from "./Container";
18
18
  * @property {FormFieldHeaderProps} [headerProps] 헤더 속성
19
19
  * @property {FormFieldFooterProps} [footerProps] 푸터 속성
20
20
  * @property {FormFieldWidth} [width] form field 너비 옵션
21
+ * @property {FormFieldState} [state] visual state
21
22
  * @property {React.HTMLAttributes<HTMLElement>} [containerProps] container 속성
22
23
  * @property {React.ReactNode} children
23
24
  */
@@ -60,8 +60,19 @@
60
60
  margin-top: var(--form-field-gap-y);
61
61
  font-size: var(--form-field-helper-font-size);
62
62
  line-height: var(--form-field-helper-line-height);
63
+ color: var(--form-field-helper-color-default);
63
64
  p,
64
65
  span {
65
- color: var(--form-field-helper-color);
66
+ color: inherit;
67
+ }
68
+ }
69
+
70
+ .form-field-container[data-state="error"] {
71
+ .form-field-footer {
72
+ color: var(--form-field-helper-color-error);
73
+ p,
74
+ span {
75
+ color: inherit;
76
+ }
66
77
  }
67
78
  }
@@ -13,5 +13,6 @@
13
13
  --form-field-helper-font-size: var(--font-caption-medium-size);
14
14
  --form-field-helper-font-weight: 400;
15
15
  --form-field-helper-line-height: var(--font-caption-medium-line-height);
16
- --form-field-helper-color: var(--color-label-neutral);
16
+ --form-field-helper-color-default: var(--color-label-neutral);
17
+ --form-field-helper-color-error: var(--color-feedback-error);
17
18
  }
@@ -11,6 +11,11 @@ import type { ElementType } from "react";
11
11
  */
12
12
  export type FormFieldWidth = "full" | "fit" | "fill" | "auto" | number | string;
13
13
 
14
+ /**
15
+ * Form; field state option
16
+ */
17
+ export type FormFieldState = "default" | "error";
18
+
14
19
  /**
15
20
  * Form.Field Header props; `Header.tsx`에서 label/description/meta를 제어한다.
16
21
  * @property {string} [className] 헤더 wrapper className
@@ -78,6 +83,7 @@ export interface FormFieldFooterProps extends React.HTMLAttributes<HTMLElement>
78
83
  * @property {string} [className] container className
79
84
  * @property {React.ElementType} [as] container 태그
80
85
  * @property {FormFieldWidth} [width] width 옵션(full/fit/fill/auto/custom)
86
+ * @property {FormFieldState} [state] visual state
81
87
  * @property {React.ReactNode} children Body에 전달될 콘텐츠
82
88
  */
83
89
  export interface FormFieldContainerProps extends React.HTMLAttributes<HTMLElement> {
@@ -93,6 +99,10 @@ export interface FormFieldContainerProps extends React.HTMLAttributes<HTMLElemen
93
99
  * width 옵션
94
100
  */
95
101
  width?: FormFieldWidth;
102
+ /**
103
+ * visual state
104
+ */
105
+ state?: FormFieldState;
96
106
  /**
97
107
  * 필드 children
98
108
  */
@@ -107,6 +117,7 @@ export interface FormFieldContainerProps extends React.HTMLAttributes<HTMLElemen
107
117
  * @property {string} [className] container className
108
118
  * @property {React.ElementType} [as] container 태그
109
119
  * @property {FormFieldWidth} [width] width 옵션(full/fit/fill/auto/custom)
120
+ * @property {FormFieldState} [state] visual state
110
121
  * @property {React.ReactNode} children Body에 전달될 콘텐츠
111
122
  */
112
123
  export interface FormFieldTemplateProps extends FormFieldContainerProps {
@@ -40,7 +40,7 @@
40
40
  --input-label-font-weight: var(--font-label-small-weight);
41
41
  --input-helper-color: var(--color-label-neutral);
42
42
  --input-helper-success-color: var(--color-success);
43
- --input-helper-error-color: var(--color-error);
43
+ --input-helper-error-color: var(--color-feedback-error);
44
44
  --input-helper-disabled-color: var(--color-label-disabled);
45
45
  --input-helper-font-size: var(--font-label-small-size);
46
46
  --input-helper-line-height: var(--font-label-small-line-height);
@@ -66,8 +66,8 @@
66
66
  --input-border-table-default-color: transparent;
67
67
  --input-border-table-disabled-color: var(--input-border-table-default-color);
68
68
  --input-border-table-readonly-color: var(--input-border-table-disabled-color);
69
- /* error는 Figma 44% alpha */
70
- --input-border-error-color: rgba(218, 29, 11, 0.44); // --color-feedback-error
69
+ /* error border기존 RGBA 스펙을 유지한다. */
70
+ --input-border-error-color: rgba(218, 29, 11, 0.44);
71
71
  --input-border-disabled-color: var(--color-border-standard-cool-gray);
72
72
  --input-border-underline-disabled-color: var(--color-border-assistive);
73
73
 
@@ -13,7 +13,7 @@ import type { SelectTriggerBaseProps } from "../../types/trigger";
13
13
  * @param {SelectTriggerBaseProps} props trigger base props
14
14
  * @param {"primary" | "secondary" | "table"} [props.priority="primary"] 스타일 우선순위
15
15
  * @param {"small" | "medium" | "large"} [props.size="medium"] 높이 스케일
16
- * @param {"default" | "focused" | "disabled"} [props.state="default"] 시각 상태
16
+ * @param {"default" | "focused" | "error" | "disabled"} [props.state="default"] 시각 상태
17
17
  * @param {boolean} [props.open=false] dropdown open 상태
18
18
  * @param {boolean} [props.block=false] block 레이아웃 여부
19
19
  * @param {boolean} [props.multiple=false] multi select 여부
@@ -133,6 +133,23 @@
133
133
  --select-icon-fill: var(--select-table-icon-color-focused);
134
134
  }
135
135
 
136
+ &:not([data-priority="secondary"])[data-state="error"] {
137
+ border-color: var(--select-primary-color-border-error);
138
+ --select-icon-fill: var(--select-icon-color-default);
139
+ }
140
+
141
+ &[data-priority="secondary"][data-state="error"] {
142
+ &::after {
143
+ height: var(--select-secondary-underline-width-focus);
144
+ background-color: var(--select-color-border-secondary-error);
145
+ }
146
+ }
147
+
148
+ &[data-priority="table"][data-state="error"] {
149
+ border-color: var(--select-table-border-error-color);
150
+ --select-icon-fill: var(--select-table-icon-color-default);
151
+ }
152
+
136
153
  &:not([data-priority="secondary"])[data-readonly="true"] {
137
154
  border-color: var(--select-primary-color-border-disabled);
138
155
  background-color: var(--select-primary-color-surface-disabled);
@@ -29,6 +29,7 @@
29
29
  --select-table-radius: var(--input-table-radius-base);
30
30
  --select-table-border-default-color: var(--input-border-table-default-color);
31
31
  --select-table-border-focus-color: var(--input-border-active-color);
32
+ --select-table-border-error-color: var(--input-border-error-color);
32
33
  --select-table-border-disabled-color: var(--input-border-disabled-color);
33
34
  --select-table-border-readonly-color: var(
34
35
  --select-table-border-disabled-color
@@ -84,10 +85,12 @@
84
85
  --select-primary-color-text-readonly: var(--color-label-strong);
85
86
  --select-primary-color-border: var(--input-border-color);
86
87
  --select-primary-color-border-focused: var(--input-border-active-color);
88
+ --select-primary-color-border-error: var(--input-border-error-color);
87
89
  --select-primary-color-border-disabled: var(--input-border-disabled-color);
88
90
  --select-color-border-secondary: var(--input-border-color);
89
91
  --select-color-border-secondary-hover: var(--input-border-active-color);
90
92
  --select-color-border-secondary-focused: var(--input-border-active-color);
93
+ --select-color-border-secondary-error: var(--input-border-error-color);
91
94
  --select-color-border-secondary-disabled: var(
92
95
  --input-border-underline-disabled-color
93
96
  );
@@ -18,12 +18,13 @@ export type SelectSize = "small" | "medium" | "large";
18
18
 
19
19
  /**
20
20
  * Select visual state
21
- * @typedef {"default" | "focused" | "disabled"} SelectState
21
+ * @typedef {"default" | "focused" | "error" | "disabled"} SelectState
22
22
  * - default: 기본 상태
23
23
  * - focused: focus/open 상태
24
+ * - error: 에러 상태
24
25
  * - disabled: 비활성 상태
25
26
  */
26
- export type SelectState = "default" | "focused" | "disabled";
27
+ export type SelectState = "default" | "focused" | "error" | "disabled";
27
28
 
28
29
  /**
29
30
  * Select trigger button type