@uniai-fe/uds-primitives 0.10.4 → 0.12.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.
Files changed (35) hide show
  1. package/README.md +38 -452
  2. package/dist/styles.css +1233 -508
  3. package/package.json +3 -3
  4. package/src/components/button/markup/Base.tsx +1 -1
  5. package/src/components/button/styles/button.scss +84 -1
  6. package/src/components/button/styles/variables.scss +73 -0
  7. package/src/components/button/types/options.ts +8 -0
  8. package/src/components/button/types/props.ts +30 -6
  9. package/src/components/input/markup/address/Button.tsx +1 -1
  10. package/src/components/input/markup/time/Template.tsx +423 -0
  11. package/src/components/input/markup/time/Trigger.tsx +289 -0
  12. package/src/components/input/markup/time/index.tsx +2 -2
  13. package/src/components/input/styles/time.scss +160 -317
  14. package/src/components/input/styles/variables.scss +9 -47
  15. package/src/components/input/types/time.ts +61 -120
  16. package/src/components/time-picker/img/minus.svg +3 -0
  17. package/src/components/time-picker/img/plus.svg +3 -0
  18. package/src/components/time-picker/index.scss +1 -0
  19. package/src/components/time-picker/index.tsx +11 -0
  20. package/src/components/time-picker/markup/Footer.tsx +71 -0
  21. package/src/components/time-picker/markup/HourSection.tsx +99 -0
  22. package/src/components/time-picker/markup/MinuteSection.tsx +86 -0
  23. package/src/components/time-picker/markup/Summary.tsx +24 -0
  24. package/src/components/time-picker/markup/Template.tsx +86 -0
  25. package/src/components/time-picker/markup/index.tsx +10 -0
  26. package/src/components/time-picker/styles/index.scss +2 -0
  27. package/src/components/time-picker/styles/template.scss +174 -0
  28. package/src/components/time-picker/styles/variables.scss +64 -0
  29. package/src/components/time-picker/types/index.ts +1 -0
  30. package/src/components/time-picker/types/time-picker.ts +94 -0
  31. package/src/components/time-picker/utils/index.ts +1 -0
  32. package/src/components/time-picker/utils/time.ts +110 -0
  33. package/src/index.scss +1 -0
  34. package/src/index.tsx +1 -0
  35. package/src/components/input/markup/time/Picker.tsx +0 -378
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.10.4",
3
+ "version": "0.12.0",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -88,9 +88,9 @@
88
88
  "sass": "^1.101.3",
89
89
  "typescript": "6.0.3",
90
90
  "@uniai-fe/eslint-config": "0.4.2",
91
- "@uniai-fe/tsconfig": "0.2.0",
92
- "@uniai-fe/util-functions": "0.4.3",
93
91
  "@uniai-fe/next-devkit": "0.4.0",
92
+ "@uniai-fe/util-functions": "0.4.3",
93
+ "@uniai-fe/tsconfig": "0.2.0",
94
94
  "@uniai-fe/uds-foundation": "0.5.0"
95
95
  },
96
96
  "scripts": {
@@ -19,7 +19,7 @@ import {
19
19
  * @param {"solid-xlarge" | "solid-large" | "solid-medium" | "solid-small" | "outlined-xlarge" | "outlined-large" | "outlined-medium" | "outlined-small"} [props.scale] legacy fill/size fallback 식별자.
20
20
  * @param {"solid" | "outlined"} props.fill 채움 스타일.
21
21
  * @param {"xlarge" | "large" | "medium" | "small" | "table"} props.size 버튼 크기. `table`은 Table 셀 액션용 compact 규격이다.
22
- * @param {"primary" | "secondary" | "tertiary"} props.priority semantic color priority.
22
+ * @param {"primary" | "secondary" | "tertiary" | "green" | "yellow" | "orange" | "teal" | "pink" | "red" | "darkGray" | "lightGray"} props.priority semantic color priority.
23
23
  * @param {"default" | "readonly" | "disabled"} [props.state="default"] 내부 상태. `disabled`/`loading`과 병합된다.
24
24
  * @param {boolean} [props.block=false] true면 폭을 100%로 확장한다.
25
25
  * @param {"full" | "fit" | "fill" | "auto" | number | string} [props.width] Form.Field width preset 또는 custom width.
@@ -36,6 +36,7 @@ $button-priorities: (
36
36
  --button-default-primary-outline-hover-foreground,
37
37
  var(--color-common-100)
38
38
  ),
39
+ outline-active-bg: var(--button-default-primary-solid-bg),
39
40
  ),
40
41
  secondary: (
41
42
  solid-bg: var(
@@ -64,6 +65,7 @@ $button-priorities: (
64
65
  --button-default-secondary-outline-hover-foreground,
65
66
  var(--color-primary-heavy)
66
67
  ),
68
+ outline-active-bg: var(--button-default-secondary-solid-bg),
67
69
  ),
68
70
  tertiary: (
69
71
  solid-bg: var(
@@ -98,6 +100,87 @@ $button-priorities: (
98
100
  --button-default-tertiary-outline-hover-foreground,
99
101
  var(--color-neutral-20)
100
102
  ),
103
+ outline-active-bg: var(--button-default-tertiary-solid-bg),
104
+ ),
105
+ "green": (
106
+ solid-bg: var(--button-default-green-solid-bg),
107
+ solid-hover: var(--button-default-green-solid-hover-bg),
108
+ solid-active: var(--button-default-green-solid-active-bg),
109
+ solid-foreground: var(--button-default-green-solid-foreground),
110
+ outline-border: var(--button-default-green-outline-border),
111
+ outline-foreground: var(--button-default-green-outline-foreground),
112
+ outline-hover-bg: var(--button-default-green-outline-hover-bg),
113
+ outline-active-bg: var(--button-default-green-outline-active-bg),
114
+ ),
115
+ "yellow": (
116
+ solid-bg: var(--button-default-yellow-solid-bg),
117
+ solid-hover: var(--button-default-yellow-solid-hover-bg),
118
+ solid-active: var(--button-default-yellow-solid-active-bg),
119
+ solid-foreground: var(--button-default-yellow-solid-foreground),
120
+ outline-border: var(--button-default-yellow-outline-border),
121
+ outline-foreground: var(--button-default-yellow-outline-foreground),
122
+ outline-hover-bg: var(--button-default-yellow-outline-hover-bg),
123
+ outline-active-bg: var(--button-default-yellow-outline-active-bg),
124
+ ),
125
+ "orange": (
126
+ solid-bg: var(--button-default-orange-solid-bg),
127
+ solid-hover: var(--button-default-orange-solid-hover-bg),
128
+ solid-active: var(--button-default-orange-solid-active-bg),
129
+ solid-foreground: var(--button-default-orange-solid-foreground),
130
+ outline-border: var(--button-default-orange-outline-border),
131
+ outline-foreground: var(--button-default-orange-outline-foreground),
132
+ outline-hover-bg: var(--button-default-orange-outline-hover-bg),
133
+ outline-active-bg: var(--button-default-orange-outline-active-bg),
134
+ ),
135
+ "teal": (
136
+ solid-bg: var(--button-default-teal-solid-bg),
137
+ solid-hover: var(--button-default-teal-solid-hover-bg),
138
+ solid-active: var(--button-default-teal-solid-active-bg),
139
+ solid-foreground: var(--button-default-teal-solid-foreground),
140
+ outline-border: var(--button-default-teal-outline-border),
141
+ outline-foreground: var(--button-default-teal-outline-foreground),
142
+ outline-hover-bg: var(--button-default-teal-outline-hover-bg),
143
+ outline-active-bg: var(--button-default-teal-outline-active-bg),
144
+ ),
145
+ "pink": (
146
+ solid-bg: var(--button-default-pink-solid-bg),
147
+ solid-hover: var(--button-default-pink-solid-hover-bg),
148
+ solid-active: var(--button-default-pink-solid-active-bg),
149
+ solid-foreground: var(--button-default-pink-solid-foreground),
150
+ outline-border: var(--button-default-pink-outline-border),
151
+ outline-foreground: var(--button-default-pink-outline-foreground),
152
+ outline-hover-bg: var(--button-default-pink-outline-hover-bg),
153
+ outline-active-bg: var(--button-default-pink-outline-active-bg),
154
+ ),
155
+ "red": (
156
+ solid-bg: var(--button-default-red-solid-bg),
157
+ solid-hover: var(--button-default-red-solid-hover-bg),
158
+ solid-active: var(--button-default-red-solid-active-bg),
159
+ solid-foreground: var(--button-default-red-solid-foreground),
160
+ outline-border: var(--button-default-red-outline-border),
161
+ outline-foreground: var(--button-default-red-outline-foreground),
162
+ outline-hover-bg: var(--button-default-red-outline-hover-bg),
163
+ outline-active-bg: var(--button-default-red-outline-active-bg),
164
+ ),
165
+ "darkGray": (
166
+ solid-bg: var(--button-default-dark-gray-solid-bg),
167
+ solid-hover: var(--button-default-dark-gray-solid-hover-bg),
168
+ solid-active: var(--button-default-dark-gray-solid-active-bg),
169
+ solid-foreground: var(--button-default-dark-gray-solid-foreground),
170
+ outline-border: var(--button-default-dark-gray-outline-border),
171
+ outline-foreground: var(--button-default-dark-gray-outline-foreground),
172
+ outline-hover-bg: var(--button-default-dark-gray-outline-hover-bg),
173
+ outline-active-bg: var(--button-default-dark-gray-outline-active-bg),
174
+ ),
175
+ "lightGray": (
176
+ solid-bg: var(--button-default-light-gray-solid-bg),
177
+ solid-hover: var(--button-default-light-gray-solid-hover-bg),
178
+ solid-active: var(--button-default-light-gray-solid-active-bg),
179
+ solid-foreground: var(--button-default-light-gray-solid-foreground),
180
+ outline-border: var(--button-default-light-gray-outline-border),
181
+ outline-foreground: var(--button-default-light-gray-outline-foreground),
182
+ outline-hover-bg: var(--button-default-light-gray-outline-hover-bg),
183
+ outline-active-bg: var(--button-default-light-gray-outline-active-bg),
101
184
  ),
102
185
  );
103
186
 
@@ -327,7 +410,7 @@ $button-priorities: (
327
410
 
328
411
  &:active:not(:disabled):not([aria-disabled="true"]),
329
412
  &[data-user-action="pressed"]:not(:disabled):not([aria-disabled="true"]) {
330
- background-color: priority-token($priority, solid-bg);
413
+ background-color: priority-token($priority, outline-active-bg);
331
414
  border-color: priority-token($priority, outline-border);
332
415
  }
333
416
  }
@@ -141,6 +141,79 @@
141
141
  --button-default-tertiary-overlay-outlined-bg: var(--color-cool-gray-95);
142
142
  --button-default-tertiary-overlay-solid-bg: var(--color-surface-strong);
143
143
 
144
+ /* FE-274: Badge 팔레트를 초기값으로 사용하며 서비스에서 priority별로 교정할 수 있다. */
145
+ --button-default-green-solid-bg: var(--color-green-95);
146
+ --button-default-green-solid-hover-bg: var(--color-green-90);
147
+ --button-default-green-solid-active-bg: var(--color-green-80);
148
+ --button-default-green-solid-foreground: var(--color-green-45);
149
+ --button-default-green-outline-border: var(--color-green-45);
150
+ --button-default-green-outline-foreground: var(--color-green-45);
151
+ --button-default-green-outline-hover-bg: var(--color-green-95);
152
+ --button-default-green-outline-active-bg: var(--color-green-90);
153
+
154
+ --button-default-yellow-solid-bg: var(--color-yellow-95);
155
+ --button-default-yellow-solid-hover-bg: var(--color-yellow-90);
156
+ --button-default-yellow-solid-active-bg: var(--color-yellow-80);
157
+ --button-default-yellow-solid-foreground: var(--color-yellow-45);
158
+ --button-default-yellow-outline-border: var(--color-yellow-60);
159
+ --button-default-yellow-outline-foreground: var(--color-yellow-45);
160
+ --button-default-yellow-outline-hover-bg: var(--color-yellow-95);
161
+ --button-default-yellow-outline-active-bg: var(--color-yellow-90);
162
+
163
+ --button-default-orange-solid-bg: var(--color-orange-95);
164
+ --button-default-orange-solid-hover-bg: var(--color-orange-90);
165
+ --button-default-orange-solid-active-bg: var(--color-orange-80);
166
+ --button-default-orange-solid-foreground: var(--color-orange-55);
167
+ --button-default-orange-outline-border: var(--color-orange-70);
168
+ --button-default-orange-outline-foreground: var(--color-orange-55);
169
+ --button-default-orange-outline-hover-bg: var(--color-orange-95);
170
+ --button-default-orange-outline-active-bg: var(--color-orange-90);
171
+
172
+ --button-default-teal-solid-bg: var(--color-teal-95);
173
+ --button-default-teal-solid-hover-bg: var(--color-teal-90);
174
+ --button-default-teal-solid-active-bg: var(--color-teal-80);
175
+ --button-default-teal-solid-foreground: var(--color-teal-45);
176
+ --button-default-teal-outline-border: var(--color-teal-45);
177
+ --button-default-teal-outline-foreground: var(--color-teal-45);
178
+ --button-default-teal-outline-hover-bg: var(--color-teal-95);
179
+ --button-default-teal-outline-active-bg: var(--color-teal-90);
180
+
181
+ --button-default-pink-solid-bg: var(--color-pink-95);
182
+ --button-default-pink-solid-hover-bg: var(--color-pink-90);
183
+ --button-default-pink-solid-active-bg: var(--color-pink-80);
184
+ --button-default-pink-solid-foreground: var(--color-pink-55);
185
+ --button-default-pink-outline-border: var(--color-pink-70);
186
+ --button-default-pink-outline-foreground: var(--color-pink-55);
187
+ --button-default-pink-outline-hover-bg: var(--color-pink-95);
188
+ --button-default-pink-outline-active-bg: var(--color-pink-90);
189
+
190
+ --button-default-red-solid-bg: var(--color-red-95);
191
+ --button-default-red-solid-hover-bg: var(--color-red-90);
192
+ --button-default-red-solid-active-bg: var(--color-red-80);
193
+ --button-default-red-solid-foreground: var(--color-red-55);
194
+ --button-default-red-outline-border: var(--color-red-70);
195
+ --button-default-red-outline-foreground: var(--color-red-55);
196
+ --button-default-red-outline-hover-bg: var(--color-red-95);
197
+ --button-default-red-outline-active-bg: var(--color-red-90);
198
+
199
+ --button-default-dark-gray-solid-bg: var(--color-cool-gray-20);
200
+ --button-default-dark-gray-solid-hover-bg: var(--color-cool-gray-10);
201
+ --button-default-dark-gray-solid-active-bg: var(--color-cool-gray-10);
202
+ --button-default-dark-gray-solid-foreground: var(--color-common-100);
203
+ --button-default-dark-gray-outline-border: var(--color-cool-gray-20);
204
+ --button-default-dark-gray-outline-foreground: var(--color-cool-gray-20);
205
+ --button-default-dark-gray-outline-hover-bg: var(--color-cool-gray-95);
206
+ --button-default-dark-gray-outline-active-bg: var(--color-cool-gray-90);
207
+
208
+ --button-default-light-gray-solid-bg: var(--color-cool-gray-95);
209
+ --button-default-light-gray-solid-hover-bg: var(--color-cool-gray-90);
210
+ --button-default-light-gray-solid-active-bg: var(--color-cool-gray-80);
211
+ --button-default-light-gray-solid-foreground: var(--color-cool-gray-20);
212
+ --button-default-light-gray-outline-border: var(--color-cool-gray-80);
213
+ --button-default-light-gray-outline-foreground: var(--color-cool-gray-20);
214
+ --button-default-light-gray-outline-hover-bg: var(--color-cool-gray-99);
215
+ --button-default-light-gray-outline-active-bg: var(--color-cool-gray-95);
216
+
144
217
  /* text button colors */
145
218
  --button-text-secondary-foreground: var(--color-primary-default);
146
219
  --button-text-secondary-hover-bg: var(
@@ -51,6 +51,14 @@ export const BUTTON_PRIORITIES: ButtonPriority[] = [
51
51
  "primary",
52
52
  "secondary",
53
53
  "tertiary",
54
+ "green",
55
+ "yellow",
56
+ "orange",
57
+ "teal",
58
+ "pink",
59
+ "red",
60
+ "darkGray",
61
+ "lightGray",
54
62
  ] as const;
55
63
 
56
64
  /**
@@ -3,13 +3,25 @@ import type { FormFieldWidth } from "../../form/types";
3
3
 
4
4
  /**
5
5
  * Button; priority 옵션
6
- * @typedef {"primary" | "secondary" | "tertiary"} ButtonPriority
6
+ * @typedef {"primary" | "secondary" | "tertiary" | "green" | "yellow" | "orange" | "teal" | "pink" | "red" | "darkGray" | "lightGray"} ButtonPriority
7
7
  * @desc
8
8
  * - primary: 브랜드 컬러를 사용하는 기본 버튼.
9
9
  * - secondary: 보조 강조 색상.
10
10
  * - tertiary: 중립/회색 계열 보조 버튼.
11
+ * - green~lightGray: Button.Default에서 사용하는 고정 컬러 preset.
11
12
  */
12
- export type ButtonPriority = "primary" | "secondary" | "tertiary";
13
+ export type ButtonPriority =
14
+ | "primary"
15
+ | "secondary"
16
+ | "tertiary"
17
+ | "green"
18
+ | "yellow"
19
+ | "orange"
20
+ | "teal"
21
+ | "pink"
22
+ | "red"
23
+ | "darkGray"
24
+ | "lightGray";
13
25
 
14
26
  /**
15
27
  * Button; fill 옵션
@@ -99,7 +111,7 @@ type SharedElementProps = Omit<NativeButtonProps, "children"> &
99
111
  * @property {"solid-xlarge" | "solid-large" | "solid-medium" | "solid-small" | "outlined-xlarge" | "outlined-large" | "outlined-medium" | "outlined-small"} [scale] 레이아웃/spacing 집합. 추후 fill/size 조합으로 대체 예정이다.
100
112
  * @property {"solid" | "outlined"} fill 채움 스타일. scale 조합보다 우선한다.
101
113
  * @property {"xlarge" | "large" | "medium" | "small" | "table"} size 높이/타이포 스케일. scale 조합보다 우선한다.
102
- * @property {"primary" | "secondary" | "tertiary"} priority semantic color priority.
114
+ * @property {"primary" | "secondary" | "tertiary" | "green" | "yellow" | "orange" | "teal" | "pink" | "red" | "darkGray" | "lightGray"} priority semantic color priority.
103
115
  * @property {"default" | "readonly" | "disabled"} [state] UI 상태. disabled prop과 조합된다.
104
116
  * @property {boolean} [block] width:100% 확장 여부.
105
117
  * @property {FormFieldWidth} [width] width preset. block보다 우선 적용된다.
@@ -128,7 +140,8 @@ export interface ButtonProps extends SharedElementProps {
128
140
  scale?: ButtonScale;
129
141
  /**
130
142
  * @required
131
- * "primary" | "secondary" | "tertiary"
143
+ * "primary" | "secondary" | "tertiary" | "green" | "yellow" | "orange" |
144
+ * "teal" | "pink" | "red" | "darkGray" | "lightGray"
132
145
  */
133
146
  priority: ButtonPriority;
134
147
  /**
@@ -196,7 +209,7 @@ export type TextButtonSize = "small" | "medium" | "large";
196
209
  * - `secondary`
197
210
  * - `tertiary`
198
211
  */
199
- export type TextButtonPriority = Exclude<ButtonPriority, "primary">;
212
+ export type TextButtonPriority = "secondary" | "tertiary";
200
213
 
201
214
  /**
202
215
  * Button Types; Text preset props
@@ -238,6 +251,12 @@ export interface TextButtonProps extends Omit<
238
251
  */
239
252
  export type RoundButtonSize = "small" | "medium" | "large";
240
253
 
254
+ /**
255
+ * Button Types; Rounded preset priority 옵션
256
+ * @typedef {"primary" | "secondary" | "tertiary"} RoundButtonPriority
257
+ */
258
+ export type RoundButtonPriority = "primary" | "secondary" | "tertiary";
259
+
241
260
  /**
242
261
  * Button Types; Rounded preset props
243
262
  * @property {ElementType} [as] 렌더링할 요소. 기본값은 button.
@@ -253,8 +272,13 @@ export type RoundButtonSize = "small" | "medium" | "large";
253
272
  */
254
273
  export interface RoundButtonProps extends Omit<
255
274
  ButtonProps,
256
- "scale" | "size" | "fill"
275
+ "scale" | "priority" | "size" | "fill"
257
276
  > {
277
+ /**
278
+ * 라운드 버튼 전용 priority 축.
279
+ * "primary" | "secondary" | "tertiary"
280
+ */
281
+ priority: RoundButtonPriority;
258
282
  /**
259
283
  * 라운드 버튼 전용 size 축.
260
284
  * "small" | "medium" | "large"
@@ -12,7 +12,7 @@ import { useAddress } from "../../hooks/useAddress";
12
12
  * @param {AddressFindButtonProps} props 버튼 props
13
13
  * @param {React.ReactNode} [props.label] 버튼 라벨 텍스트
14
14
  * @param {string} [props.className] 커스텀 className
15
- * @param {"primary"|"secondary"|"tertiary"} [props.priority="secondary"] 버튼 priority
15
+ * @param {"primary"|"secondary"|"tertiary"|"green"|"yellow"|"orange"|"teal"|"pink"|"red"|"darkGray"|"lightGray"} [props.priority="secondary"] 버튼 priority
16
16
  * @param {"solid"|"outlined"} [props.fill="solid"] 버튼 fill 타입
17
17
  * @param {"xlarge"|"large"|"medium"|"small"} [props.size="xlarge"] 버튼 size
18
18
  * @param {"button"|"submit"|"reset"} [props.type="button"] native type