@uniai-fe/uds-primitives 0.2.9 → 0.2.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.
Files changed (73) hide show
  1. package/dist/styles.css +415 -0
  2. package/package.json +2 -1
  3. package/src/components/calendar/types/calendar.ts +5 -0
  4. package/src/components/info-box/img/ban.svg +5 -0
  5. package/src/components/info-box/img/caution.svg +5 -0
  6. package/src/components/info-box/img/check.svg +4 -0
  7. package/src/components/info-box/img/info.svg +6 -0
  8. package/src/components/info-box/index.scss +1 -0
  9. package/src/components/info-box/index.tsx +4 -0
  10. package/src/components/info-box/markup/Icon.tsx +14 -0
  11. package/src/components/info-box/markup/InfoBox.tsx +65 -0
  12. package/src/components/info-box/markup/index.ts +2 -0
  13. package/src/components/info-box/styles/index.scss +2 -0
  14. package/src/components/info-box/styles/info-box.scss +61 -0
  15. package/src/components/info-box/styles/variables.scss +33 -0
  16. package/src/components/info-box/types/index.ts +1 -0
  17. package/src/components/info-box/types/props.ts +34 -0
  18. package/src/components/input/markup/date/Template.tsx +36 -5
  19. package/src/components/input/markup/date/Trigger.tsx +22 -4
  20. package/src/components/input/markup/foundation/Input.tsx +19 -11
  21. package/src/components/input/markup/foundation/Utility.tsx +11 -7
  22. package/src/components/input/styles/date.scss +21 -0
  23. package/src/components/input/styles/foundation.scss +30 -0
  24. package/src/components/input/styles/variables.scss +11 -0
  25. package/src/components/input/types/date.ts +15 -0
  26. package/src/components/input/types/foundation.ts +18 -11
  27. package/src/components/input/utils/date.ts +15 -1
  28. package/src/components/select/markup/Default.tsx +6 -3
  29. package/src/components/select/markup/foundation/Base.tsx +1 -1
  30. package/src/components/select/markup/foundation/Icon.tsx +6 -1
  31. package/src/components/select/markup/multiple/Multiple.tsx +6 -3
  32. package/src/components/select/styles/select.scss +50 -0
  33. package/src/components/select/styles/variables.scss +26 -0
  34. package/src/components/select/types/base.ts +3 -2
  35. package/src/components/select/types/icon.ts +7 -6
  36. package/src/components/select/types/props.ts +1 -0
  37. package/src/components/select/types/trigger.ts +4 -0
  38. package/src/components/table/hooks/index.ts +0 -3
  39. package/src/components/table/index.tsx +5 -3
  40. package/src/components/table/markup/Container.tsx +126 -0
  41. package/src/components/table/markup/foundation/Body.tsx +24 -0
  42. package/src/components/table/markup/foundation/Cell.tsx +72 -0
  43. package/src/components/table/markup/foundation/Col.tsx +22 -0
  44. package/src/components/table/markup/foundation/Colgroup.tsx +29 -0
  45. package/src/components/table/markup/foundation/Foot.tsx +24 -0
  46. package/src/components/table/markup/foundation/Head.tsx +24 -0
  47. package/src/components/table/markup/foundation/Root.tsx +32 -0
  48. package/src/components/table/markup/foundation/Row.tsx +32 -0
  49. package/src/components/table/markup/foundation/Td.tsx +37 -0
  50. package/src/components/table/markup/foundation/Th.tsx +39 -0
  51. package/src/components/table/markup/foundation/index.tsx +30 -0
  52. package/src/components/table/markup/index.tsx +8 -2
  53. package/src/components/table/styles/foundation.scss +247 -0
  54. package/src/components/table/styles/index.scss +2 -0
  55. package/src/components/table/styles/variables.scss +29 -0
  56. package/src/components/table/types/foundation.ts +250 -0
  57. package/src/components/table/types/index.ts +1 -4
  58. package/src/components/tooltip/img/info.svg +5 -0
  59. package/src/components/tooltip/img/information.svg +9 -0
  60. package/src/components/tooltip/index.scss +1 -0
  61. package/src/components/tooltip/index.tsx +4 -0
  62. package/src/components/tooltip/markup/Message.tsx +70 -0
  63. package/src/components/tooltip/markup/Root.tsx +32 -0
  64. package/src/components/tooltip/markup/Template.tsx +46 -0
  65. package/src/components/tooltip/markup/Trigger.tsx +32 -0
  66. package/src/components/tooltip/markup/index.tsx +18 -0
  67. package/src/components/tooltip/styles/index.scss +2 -0
  68. package/src/components/tooltip/styles/tooltip.scss +47 -0
  69. package/src/components/tooltip/styles/variables.scss +14 -0
  70. package/src/components/tooltip/types/index.ts +1 -0
  71. package/src/components/tooltip/types/props.ts +118 -0
  72. package/src/index.scss +1 -0
  73. package/src/index.tsx +2 -0
package/dist/styles.css CHANGED
@@ -228,6 +228,17 @@
228
228
  --dropdown-option-height-small: var(--theme-size-medium-1, 40px);
229
229
  --dropdown-option-height-medium: var(--theme-size-medium-2, 48px);
230
230
  --dropdown-option-height-large: var(--theme-size-medium-3, 56px);
231
+ --tooltip-message-background: var(--color-cool-gray-20);
232
+ --tooltip-message-foreground: var(--color-common-100);
233
+ --tooltip-message-radius: var(--theme-radius-medium-3);
234
+ --tooltip-message-padding-inline: var(--spacing-padding-5);
235
+ --tooltip-message-padding-block: var(--spacing-padding-4);
236
+ --tooltip-message-font-size: var(--font-caption-large-size);
237
+ --tooltip-message-line-height: var(--font-caption-large-line-height);
238
+ --tooltip-message-letter-spacing: var(--font-caption-large-letter-spacing);
239
+ --tooltip-message-font-weight: 400;
240
+ --tooltip-trigger-icon-size: 16px;
241
+ --tooltip-trigger-icon-color: var(--color-label-alternative);
231
242
  /* Layout presets */
232
243
  --input-width: 100%;
233
244
  --input-flex: 0 1 auto;
@@ -241,6 +252,16 @@
241
252
  --input-default-gap: var(--spacing-gap-4);
242
253
  --input-default-radius-base: var(--theme-radius-large-1);
243
254
  --input-tertiary-radius-base: var(--theme-radius-large-2);
255
+ --input-table-radius-base: 0;
256
+ --input-table-text-small-size: var(--font-body-xxsmall-size);
257
+ --input-table-text-small-line-height: var(--font-body-xxsmall-line-height);
258
+ --input-table-text-small-weight: var(--font-body-xxsmall-weight);
259
+ --input-table-text-medium-size: var(--font-body-xsmall-size);
260
+ --input-table-text-medium-line-height: var(--font-body-xsmall-line-height);
261
+ --input-table-text-medium-weight: var(--font-body-xsmall-weight);
262
+ --input-table-text-large-size: var(--font-body-small-size);
263
+ --input-table-text-large-line-height: var(--font-body-small-line-height);
264
+ --input-table-text-large-weight: var(--font-body-small-weight);
244
265
  /* Label/helper colors */
245
266
  --input-label-color: var(--color-label-standard);
246
267
  --input-label-accent-color: var(--color-primary-default);
@@ -258,6 +279,7 @@
258
279
  --input-border-width-emphasis: 1.4px;
259
280
  --input-border-active-color: var(--color-blue-80);
260
281
  --input-border-success-color: var(--color-blue-80);
282
+ --input-border-table-default-color: transparent;
261
283
  /* error는 Figma 44% alpha */
262
284
  --input-border-error-color: rgba(218, 29, 11, 0.44);
263
285
  --input-border-disabled-color: var(--color-border-standard-cool-gray);
@@ -286,6 +308,32 @@
286
308
  --select-secondary-gap: var(--spacing-gap-2);
287
309
  --select-secondary-underline-width-default: 1px;
288
310
  --select-secondary-underline-width-focus: 1.4px;
311
+ --select-table-radius: var(--input-table-radius-base);
312
+ --select-table-border-default-color: var(--input-border-table-default-color);
313
+ --select-table-border-focus-color: var(--input-border-active-color);
314
+ --select-table-border-disabled-color: var(--input-border-disabled-color);
315
+ --select-table-surface-color: transparent;
316
+ --select-table-surface-disabled-color: var(--input-surface-disabled-color);
317
+ --select-table-color-text: var(--input-text-color);
318
+ --select-table-color-placeholder: var(--input-placeholder-color);
319
+ --select-table-icon-color-default: var(--select-icon-color-default);
320
+ --select-table-icon-color-focused: var(--select-icon-color-focused);
321
+ --select-table-icon-color-disabled: var(--select-icon-color-disabled);
322
+ --select-table-text-small-size: var(--input-table-text-small-size);
323
+ --select-table-text-small-line-height: var(
324
+ --input-table-text-small-line-height
325
+ );
326
+ --select-table-text-small-weight: var(--input-table-text-small-weight);
327
+ --select-table-text-medium-size: var(--input-table-text-medium-size);
328
+ --select-table-text-medium-line-height: var(
329
+ --input-table-text-medium-line-height
330
+ );
331
+ --select-table-text-medium-weight: var(--input-table-text-medium-weight);
332
+ --select-table-text-large-size: var(--input-table-text-large-size);
333
+ --select-table-text-large-line-height: var(
334
+ --input-table-text-large-line-height
335
+ );
336
+ --select-table-text-large-weight: var(--input-table-text-large-weight);
289
337
  --select-text-small-size: 15px;
290
338
  --select-text-small-line-height: 1.4;
291
339
  --select-text-small-letter-spacing: 0.2px;
@@ -402,6 +450,28 @@
402
450
  --theme-radio-card-badge-color: var(--color-primary-default);
403
451
  --theme-radio-focus-ring: rgba(2, 84, 255, 0.32);
404
452
  --theme-radio-disabled-selected-opacity: 0.28;
453
+ --table-border-color: var(--color-border-standard-cool-gray);
454
+ --table-line-head-background-color: var(--color-surface-static-cool-gray);
455
+ --table-grid-head-background-color: var(
456
+ --color-background-alternative-cool-gray
457
+ );
458
+ --table-cell-background-color: var(--color-surface-static-white);
459
+ --table-line-cell-height-head: 44px;
460
+ --table-line-cell-height-body: 56px;
461
+ --table-grid-cell-height: 48px;
462
+ --table-grid-border-radius: var(--theme-radius-large-1);
463
+ --table-line-cell-padding-inline: var(--spacing-padding-6);
464
+ --table-line-cell-padding-block: 9px;
465
+ --table-grid-cell-padding-inline: var(--spacing-padding-6);
466
+ --table-grid-cell-padding-block: 9px;
467
+ --table-th-text-color: var(--color-label-standard);
468
+ --table-th-text-size: 13px;
469
+ --table-th-text-weight: var(--font-label-small-weight);
470
+ --table-th-text-line-height: var(--font-label-small-line-height);
471
+ --table-td-text-color: var(--color-label-standard);
472
+ --table-td-text-size: 15px;
473
+ --table-td-text-weight: var(--font-body-xsmall-weight);
474
+ --table-td-text-line-height: var(--font-body-xsmall-line-height);
405
475
  --divider-width: 1px;
406
476
  --divider-height: 12px;
407
477
  --divider-color: var(--color-border-standard-cool-gray, #e4e5e7);
@@ -1911,6 +1981,55 @@ figure.chip {
1911
1981
 
1912
1982
 
1913
1983
 
1984
+ .tooltip-trigger {
1985
+ display: inline-flex;
1986
+ align-items: center;
1987
+ justify-content: center;
1988
+ }
1989
+
1990
+ .tooltip-template-trigger {
1991
+ display: inline-flex;
1992
+ width: var(--tooltip-trigger-icon-size);
1993
+ height: var(--tooltip-trigger-icon-size);
1994
+ align-items: center;
1995
+ justify-content: center;
1996
+ padding: 0;
1997
+ border: 0;
1998
+ background-color: transparent;
1999
+ color: var(--tooltip-trigger-icon-color);
2000
+ cursor: pointer;
2001
+ }
2002
+
2003
+ .tooltip-template-trigger svg {
2004
+ width: 100%;
2005
+ height: 100%;
2006
+ display: block;
2007
+ }
2008
+
2009
+ .tooltip-message {
2010
+ max-width: min(20rem, 100vw - 1.5rem);
2011
+ box-sizing: border-box;
2012
+ border-radius: var(--tooltip-message-radius);
2013
+ background-color: var(--tooltip-message-background);
2014
+ padding: var(--tooltip-message-padding-block) var(--tooltip-message-padding-inline);
2015
+ }
2016
+
2017
+ .tooltip-message-text {
2018
+ display: block;
2019
+ color: var(--tooltip-message-foreground);
2020
+ font-size: var(--tooltip-message-font-size);
2021
+ line-height: var(--tooltip-message-line-height);
2022
+ letter-spacing: var(--tooltip-message-letter-spacing);
2023
+ font-weight: var(--tooltip-message-font-weight);
2024
+ white-space: normal;
2025
+ }
2026
+
2027
+ .tooltip-message-arrow {
2028
+ fill: var(--tooltip-message-background);
2029
+ }
2030
+
2031
+
2032
+
1914
2033
  .input {
1915
2034
  display: flex;
1916
2035
  flex-direction: column;
@@ -2043,6 +2162,11 @@ figure.chip {
2043
2162
  align-self: center;
2044
2163
  margin-left: 0;
2045
2164
  }
2165
+ .input-field[data-priority=table] {
2166
+ border-radius: var(--input-table-radius-base);
2167
+ border-color: var(--input-border-table-default-color);
2168
+ background-color: transparent;
2169
+ }
2046
2170
  .input-field:not([data-priority=secondary])[data-state=active], .input-field:not([data-priority=secondary])[data-state=focused] {
2047
2171
  border-color: var(--input-border-active-color);
2048
2172
  border-width: var(--input-border-width-emphasis);
@@ -2125,6 +2249,24 @@ figure.chip {
2125
2249
  min-height: var(--theme-size-medium-2);
2126
2250
  }
2127
2251
 
2252
+ .input-field[data-priority=table][data-size=small] .input-element {
2253
+ font-size: var(--input-table-text-small-size);
2254
+ line-height: var(--input-table-text-small-line-height);
2255
+ font-weight: var(--input-table-text-small-weight);
2256
+ }
2257
+
2258
+ .input-field[data-priority=table][data-size=medium] .input-element {
2259
+ font-size: var(--input-table-text-medium-size);
2260
+ line-height: var(--input-table-text-medium-line-height);
2261
+ font-weight: var(--input-table-text-medium-weight);
2262
+ }
2263
+
2264
+ .input-field[data-priority=table][data-size=large] .input-element {
2265
+ font-size: var(--input-table-text-large-size);
2266
+ line-height: var(--input-table-text-large-line-height);
2267
+ font-weight: var(--input-table-text-large-weight);
2268
+ }
2269
+
2128
2270
  .input-helper-text {
2129
2271
  color: var(--input-helper-color);
2130
2272
  font-size: var(--font-label-small-size);
@@ -2211,6 +2353,9 @@ figure.chip {
2211
2353
  .input[data-state=disabled] .input-field[data-priority=secondary] {
2212
2354
  background-color: transparent;
2213
2355
  }
2356
+ .input[data-state=disabled] .input-field[data-priority=table] {
2357
+ background-color: transparent;
2358
+ }
2214
2359
 
2215
2360
  .input-side {
2216
2361
  display: flex;
@@ -2326,6 +2471,21 @@ figure.chip {
2326
2471
  pointer-events: none;
2327
2472
  }
2328
2473
 
2474
+ .input-date-trigger-input.input-priority-table .input-field {
2475
+ padding-inline: var(--spacing-padding-4);
2476
+ }
2477
+ .input-date-trigger-input.input-priority-table .input-field-control {
2478
+ gap: var(--spacing-gap-3);
2479
+ }
2480
+ .input-date-trigger-input.input-priority-table .input-element {
2481
+ font-size: var(--font-body-xsmall-size);
2482
+ line-height: var(--font-body-xsmall-line-height);
2483
+ font-weight: var(--font-body-xsmall-weight);
2484
+ }
2485
+ .input-date-trigger-input.input-priority-table .input-date-trigger-icon {
2486
+ color: var(--color-label-alternative);
2487
+ }
2488
+
2329
2489
  .input-date-footer-template {
2330
2490
  display: grid;
2331
2491
  gap: var(--spacing-gap-5);
@@ -2521,11 +2681,22 @@ figure.chip {
2521
2681
  color: var(--color-label-disabled);
2522
2682
  cursor: not-allowed;
2523
2683
  }
2684
+ .select-button[data-priority=table] {
2685
+ border-radius: var(--select-table-radius);
2686
+ border-color: var(--select-table-border-default-color);
2687
+ background-color: var(--select-table-surface-color);
2688
+ --select-icon-fill: var(--select-table-icon-color-default);
2689
+ }
2524
2690
  .select-button:not([data-priority=secondary])[data-state=focused], .select-button:not([data-priority=secondary])[data-open=true], .select-button:not([data-priority=secondary]):focus-visible {
2525
2691
  border-color: var(--select-primary-color-border-focused);
2526
2692
  border-width: var(--select-primary-border-width-focus);
2527
2693
  --select-icon-fill: var(--select-icon-color-focused);
2528
2694
  }
2695
+ .select-button[data-priority=table][data-state=focused], .select-button[data-priority=table][data-open=true], .select-button[data-priority=table]:focus-visible {
2696
+ border-color: var(--select-table-border-focus-color);
2697
+ border-width: var(--select-primary-border-width-focus);
2698
+ --select-icon-fill: var(--select-table-icon-color-focused);
2699
+ }
2529
2700
  .select-button:not([data-priority=secondary])[data-state=disabled], .select-button:not([data-priority=secondary]):disabled {
2530
2701
  border-color: var(--select-primary-color-border-disabled);
2531
2702
  background-color: var(--select-primary-color-surface-disabled);
@@ -2540,6 +2711,12 @@ figure.chip {
2540
2711
  background-color: var(--select-color-border-secondary-disabled);
2541
2712
  height: var(--select-secondary-underline-width-default);
2542
2713
  }
2714
+ .select-button[data-priority=table][data-state=disabled], .select-button[data-priority=table]:disabled {
2715
+ border-color: var(--select-table-border-disabled-color);
2716
+ background-color: var(--select-table-surface-disabled-color);
2717
+ cursor: not-allowed;
2718
+ --select-icon-fill: var(--select-table-icon-color-disabled);
2719
+ }
2543
2720
 
2544
2721
  .select-value {
2545
2722
  flex: 1 1 auto;
@@ -2565,6 +2742,9 @@ figure.chip {
2565
2742
  .select-button[data-priority=secondary] .select-label {
2566
2743
  color: var(--select-secondary-color-text);
2567
2744
  }
2745
+ .select-button[data-priority=table] .select-label {
2746
+ color: var(--select-table-color-text);
2747
+ }
2568
2748
  .select-button[data-state=focused] .select-label, .select-button[data-open=true] .select-label {
2569
2749
  color: var(--select-primary-color-text-focused);
2570
2750
  }
@@ -2581,6 +2761,9 @@ figure.chip {
2581
2761
  .select-button[data-priority=secondary] .select-label-placeholder {
2582
2762
  color: var(--select-secondary-color-placeholder);
2583
2763
  }
2764
+ .select-button[data-priority=table] .select-label-placeholder {
2765
+ color: var(--select-table-color-placeholder);
2766
+ }
2584
2767
 
2585
2768
  .select-button[data-size=small] .select-label {
2586
2769
  font-size: var(--select-text-small-size);
@@ -2589,6 +2772,12 @@ figure.chip {
2589
2772
  font-weight: var(--select-text-small-weight);
2590
2773
  }
2591
2774
 
2775
+ .select-button[data-priority=table][data-size=small] .select-label {
2776
+ font-size: var(--select-table-text-small-size);
2777
+ line-height: var(--select-table-text-small-line-height);
2778
+ font-weight: var(--select-table-text-small-weight);
2779
+ }
2780
+
2592
2781
  .select-button[data-size=large] .select-label {
2593
2782
  font-size: var(--select-text-large-size);
2594
2783
  line-height: var(--select-text-large-line-height);
@@ -2596,6 +2785,18 @@ figure.chip {
2596
2785
  font-weight: var(--select-text-large-weight);
2597
2786
  }
2598
2787
 
2788
+ .select-button[data-priority=table][data-size=medium] .select-label {
2789
+ font-size: var(--select-table-text-medium-size);
2790
+ line-height: var(--select-table-text-medium-line-height);
2791
+ font-weight: var(--select-table-text-medium-weight);
2792
+ }
2793
+
2794
+ .select-button[data-priority=table][data-size=large] .select-label {
2795
+ font-size: var(--select-table-text-large-size);
2796
+ line-height: var(--select-table-text-large-line-height);
2797
+ font-weight: var(--select-table-text-large-weight);
2798
+ }
2799
+
2599
2800
  .select-button[data-priority=secondary][data-size=large] .select-label {
2600
2801
  font-weight: 600;
2601
2802
  }
@@ -3559,6 +3760,220 @@ figure.chip {
3559
3760
  padding: var(--spacing-padding-6) 0;
3560
3761
  }
3561
3762
 
3763
+
3764
+
3765
+ .table.table-container {
3766
+ width: 100%;
3767
+ border-collapse: collapse;
3768
+ border-spacing: 0;
3769
+ }
3770
+
3771
+ .table.table-container .table-native-cell.table-th,
3772
+ .table.table-container .table-native-cell.table-td {
3773
+ vertical-align: middle;
3774
+ background-color: var(--table-cell-background-color);
3775
+ text-align: left;
3776
+ }
3777
+
3778
+ .table.table-container[data-layout=line] .table-native-cell.table-th,
3779
+ .table.table-container[data-layout=line] .table-native-cell.table-td {
3780
+ --table-cell-padding-inline: var(--table-line-cell-padding-inline);
3781
+ --table-cell-padding-block: var(--table-line-cell-padding-block);
3782
+ border-bottom: 1px solid var(--table-border-color);
3783
+ }
3784
+
3785
+ .table.table-container[data-layout=line] .table-head .table-native-cell.table-th {
3786
+ height: var(--table-line-cell-height-head);
3787
+ border-top: 1px solid var(--table-border-color);
3788
+ background-color: var(--table-line-head-background-color);
3789
+ }
3790
+
3791
+ .table.table-container[data-layout=line] .table-body .table-native-cell.table-td,
3792
+ .table.table-container[data-layout=line] .table-foot .table-native-cell.table-td {
3793
+ height: var(--table-line-cell-height-body);
3794
+ }
3795
+
3796
+ .table.table-container[data-layout=grid] .table-native-cell.table-th,
3797
+ .table.table-container[data-layout=grid] .table-native-cell.table-td {
3798
+ --table-cell-padding-inline: var(--table-grid-cell-padding-inline);
3799
+ --table-cell-padding-block: var(--table-grid-cell-padding-block);
3800
+ border: 1px solid var(--table-border-color);
3801
+ height: var(--table-grid-cell-height);
3802
+ }
3803
+
3804
+ .table.table-container[data-layout=grid] {
3805
+ border-radius: var(--table-grid-border-radius);
3806
+ overflow: hidden;
3807
+ }
3808
+
3809
+ .table.table-container[data-layout=grid] .table-head .table-native-cell.table-th {
3810
+ background-color: var(--table-grid-head-background-color);
3811
+ }
3812
+
3813
+ .table-native-cell.table-th .table-native-cell-text {
3814
+ color: var(--table-th-text-color);
3815
+ font-size: var(--table-th-text-size);
3816
+ font-weight: var(--table-th-text-weight);
3817
+ line-height: var(--table-th-text-line-height);
3818
+ }
3819
+
3820
+ .table-native-cell.table-td .table-native-cell-text {
3821
+ color: var(--table-td-text-color);
3822
+ font-size: var(--table-td-text-size);
3823
+ font-weight: var(--table-td-text-weight);
3824
+ line-height: var(--table-td-text-line-height);
3825
+ }
3826
+
3827
+ .table-cell-content {
3828
+ display: flex;
3829
+ align-items: center;
3830
+ width: 100%;
3831
+ height: 100%;
3832
+ justify-content: flex-start;
3833
+ box-sizing: border-box;
3834
+ padding-inline: var(--table-cell-padding-inline);
3835
+ padding-block: var(--table-cell-padding-block);
3836
+ }
3837
+
3838
+ .table-cell-content[data-padding=none] {
3839
+ padding: 0;
3840
+ }
3841
+
3842
+ .table-cell-content[data-no-padding=true] {
3843
+ padding: 0;
3844
+ }
3845
+
3846
+ .table-cell-content[data-padding=default] .input[data-priority=table] {
3847
+ width: calc(100% + var(--table-cell-padding-inline) * 2);
3848
+ height: 100%;
3849
+ min-height: calc(100% + var(--table-cell-padding-block) * 2);
3850
+ margin-inline: calc(var(--table-cell-padding-inline) * -1);
3851
+ margin-block: calc(var(--table-cell-padding-block) * -1);
3852
+ flex: 1 1 auto;
3853
+ }
3854
+
3855
+ .table-cell-content[data-padding=default] :where(.input[data-priority=table] .input-box),
3856
+ .table-cell-content[data-padding=default] :where(.input[data-priority=table] .input-field) {
3857
+ width: 100%;
3858
+ height: 100%;
3859
+ }
3860
+
3861
+ .table-cell-content[data-padding=default] .input-date-field {
3862
+ width: calc(100% + var(--table-cell-padding-inline) * 2);
3863
+ height: 100%;
3864
+ min-height: calc(100% + var(--table-cell-padding-block) * 2);
3865
+ margin-inline: calc(var(--table-cell-padding-inline) * -1);
3866
+ margin-block: calc(var(--table-cell-padding-block) * -1);
3867
+ }
3868
+
3869
+ .table-cell-content[data-padding=default] :where(.select.select-container) {
3870
+ width: calc(100% + var(--table-cell-padding-inline) * 2);
3871
+ height: 100%;
3872
+ min-height: calc(100% + var(--table-cell-padding-block) * 2);
3873
+ margin-inline: calc(var(--table-cell-padding-inline) * -1);
3874
+ margin-block: calc(var(--table-cell-padding-block) * -1);
3875
+ flex: 1 1 auto;
3876
+ }
3877
+
3878
+ .table-cell-content[data-padding=default] :where(.select.select-container .select-button) {
3879
+ width: 100%;
3880
+ height: 100%;
3881
+ }
3882
+
3883
+ .table-cell-content[data-padding=none] :where(.input[data-priority=table],
3884
+ .input[data-priority=table] .input-box,
3885
+ .input[data-priority=table] .input-field,
3886
+ .input-date-field,
3887
+ .select.select-container,
3888
+ .select.select-container .select-button),
3889
+ .table-cell-content[data-no-padding=true] :where(.input[data-priority=table],
3890
+ .input[data-priority=table] .input-box,
3891
+ .input[data-priority=table] .input-field,
3892
+ .input-date-field,
3893
+ .select.select-container,
3894
+ .select.select-container .select-button) {
3895
+ width: 100%;
3896
+ height: 100%;
3897
+ min-height: 100%;
3898
+ margin: 0;
3899
+ }
3900
+
3901
+ .table-cell-content .table-cell-text {
3902
+ color: inherit;
3903
+ font-size: inherit;
3904
+ font-weight: inherit;
3905
+ line-height: inherit;
3906
+ }
3907
+
3908
+ .table-cell-content[data-align-x=left],
3909
+ .table-cell-content[data-align=left] {
3910
+ justify-content: flex-start;
3911
+ text-align: left;
3912
+ }
3913
+
3914
+ .table-cell-content[data-align-x=center],
3915
+ .table-cell-content[data-align=center] {
3916
+ justify-content: center;
3917
+ text-align: center;
3918
+ }
3919
+
3920
+ .table-cell-content[data-align-x=right],
3921
+ .table-cell-content[data-align=right] {
3922
+ justify-content: flex-end;
3923
+ text-align: right;
3924
+ }
3925
+
3926
+ .table-cell-content[data-align-y=top] {
3927
+ align-items: flex-start;
3928
+ }
3929
+
3930
+ .table-cell-content[data-align-y=center] {
3931
+ align-items: center;
3932
+ }
3933
+
3934
+ .table-cell-content[data-align-y=bottom] {
3935
+ align-items: flex-end;
3936
+ }
3937
+
3938
+ .table-cell.table-head-cell .table-cell-text {
3939
+ color: var(--table-th-text-color);
3940
+ font-size: var(--table-th-text-size);
3941
+ font-weight: var(--table-th-text-weight);
3942
+ line-height: var(--table-th-text-line-height);
3943
+ }
3944
+
3945
+ .table-cell .input[data-priority=table] .input-element,
3946
+ .table-cell .select.select-container .select-button[data-priority=table] .select-label,
3947
+ .table-cell .select.select-container .select-button[data-priority=table] .select-label-placeholder {
3948
+ color: var(--table-td-text-color);
3949
+ font-size: var(--table-td-text-size);
3950
+ font-weight: var(--table-td-text-weight);
3951
+ line-height: var(--table-td-text-line-height);
3952
+ }
3953
+
3954
+ .table-cell.table-head-cell .radio-label-text {
3955
+ color: var(--table-th-text-color);
3956
+ font-size: var(--table-th-text-size);
3957
+ font-weight: var(--table-th-text-weight);
3958
+ line-height: var(--table-th-text-line-height);
3959
+ }
3960
+
3961
+ .table-cell.table-body-cell .table-cell-text,
3962
+ .table-cell.table-foot-cell .table-cell-text {
3963
+ color: var(--table-td-text-color);
3964
+ font-size: var(--table-td-text-size);
3965
+ font-weight: var(--table-td-text-weight);
3966
+ line-height: var(--table-td-text-line-height);
3967
+ }
3968
+
3969
+ .table-cell.table-body-cell .radio-label-text,
3970
+ .table-cell.table-foot-cell .radio-label-text {
3971
+ color: var(--table-td-text-color);
3972
+ font-size: var(--table-td-text-size);
3973
+ font-weight: var(--table-td-text-weight);
3974
+ line-height: var(--table-td-text-line-height);
3975
+ }
3976
+
3562
3977
  /* Divider 토큰도 전역 :root 범위에 선언한다. */
3563
3978
 
3564
3979
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-primitives",
3
- "version": "0.2.9",
3
+ "version": "0.2.11",
4
4
  "description": "UNIAI Design System; Primitives Components Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -72,6 +72,7 @@
72
72
  "@radix-ui/react-popover": "^1.1.15",
73
73
  "@radix-ui/react-radio-group": "^1.3.8",
74
74
  "@radix-ui/react-tabs": "^1.1.13",
75
+ "@radix-ui/react-tooltip": "^1.2.8",
75
76
  "@radix-ui/react-visually-hidden": "^1.2.4",
76
77
  "clsx": "^2.1.1",
77
78
  "dayjs": "^1.11.19",
@@ -35,6 +35,7 @@ export type CalendarOnChange = (value: CalendarValue) => void;
35
35
  /**
36
36
  * Mantine DatePicker 공개 옵션.
37
37
  * @property {Partial<Record<DatePickerStylesNames, string>>} [classNames] Mantine 내부 스타일 클래스 매핑
38
+ * @property {string} [valueFormat] DatePicker 표시 포맷
38
39
  */
39
40
  export type CalendarDatePickerProps = Partial<
40
41
  Omit<
@@ -48,6 +49,10 @@ export type CalendarDatePickerProps = Partial<
48
49
  | "styles"
49
50
  >
50
51
  > & {
52
+ /**
53
+ * DatePicker 표시 포맷
54
+ */
55
+ valueFormat?: string;
51
56
  /**
52
57
  * Mantine 내부 스타일 classNames override.
53
58
  */
@@ -0,0 +1,5 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="12" cy="12" r="9.2" fill="#313235" stroke="#313235" stroke-width="1.6"/>
3
+ <path d="M9.00005 9L15 14.9999" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
4
+ <path d="M15 9L9.00001 14.9999" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
5
+ </svg>
@@ -0,0 +1,5 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="12" cy="12" r="10" fill="#313235"/>
3
+ <path d="M12 8V13" stroke="white" stroke-width="1.6" stroke-linecap="round"/>
4
+ <circle cx="12" cy="16" r="1" fill="white"/>
5
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="12" cy="12" r="10" fill="#313235"/>
3
+ <path d="M7.75735 11.3032L10.9393 14.4852L16.2426 9.1819" stroke="white" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <circle cx="12" cy="12" r="10" fill="#1A6AFF"/>
3
+ <path d="M12 17V10H10" stroke="white" stroke-width="1.6"/>
4
+ <path d="M10.5 17H13.5" stroke="white" stroke-width="1.6" stroke-linecap="square" stroke-linejoin="round"/>
5
+ <circle cx="12" cy="7" r="0.5" fill="white" stroke="white"/>
6
+ </svg>
@@ -0,0 +1 @@
1
+ @use "./styles/index.scss";
@@ -0,0 +1,4 @@
1
+ import "./index.scss";
2
+
3
+ export * from "./markup";
4
+ export * from "./types";
@@ -0,0 +1,14 @@
1
+ import BanIcon from "../img/ban.svg";
2
+ import CautionIcon from "../img/caution.svg";
3
+ import CheckIcon from "../img/check.svg";
4
+ import InfoIcon from "../img/info.svg";
5
+
6
+ /**
7
+ * InfoBox Icon Set; 상태별 아이콘 컴포넌트 맵
8
+ */
9
+ export const InfoBoxIcon = {
10
+ info: InfoIcon,
11
+ check: CheckIcon,
12
+ caution: CautionIcon,
13
+ ban: BanIcon,
14
+ } as const;
@@ -0,0 +1,65 @@
1
+ import clsx from "clsx";
2
+ import { createElement, forwardRef } from "react";
3
+ import type { InfoBoxProps } from "../types";
4
+ import { InfoBoxIcon } from "./Icon";
5
+
6
+ /**
7
+ * InfoBox Component; 안내 메시지 전용 정보 박스
8
+ * @component
9
+ * @param {InfoBoxProps} props
10
+ * @param {"info"} [props.state="info"] 현재는 info 상태만 지원한다.
11
+ * @param {React.ReactNode} [props.heading] 상단 제목 영역.
12
+ * @param {React.ReactNode} [props.children] 본문 콘텐츠.
13
+ * @param {string} [props.className] 루트 section className.
14
+ * @example
15
+ * <InfoBox heading="안내">설정 후 저장 버튼을 눌러주세요.</InfoBox>
16
+ */
17
+ const InfoBox = forwardRef<HTMLElementTagNameMap["section"], InfoBoxProps>(
18
+ (
19
+ { state = "info", heading, children, className, role, ...restProps },
20
+ ref,
21
+ ) => {
22
+ return (
23
+ <section
24
+ {...restProps}
25
+ ref={ref}
26
+ className={clsx("info-box", className)}
27
+ data-state={state}
28
+ // 변경: 기본 role은 인라인으로 note를 적용한다.
29
+ role={role ?? "note"}
30
+ >
31
+ {/* 변경: 아이콘은 figure 래퍼 내부에서 상태별 Icon.tsx 맵으로 렌더링한다. */}
32
+ <figure className="info-box-icon" aria-hidden="true">
33
+ {createElement(
34
+ // 변경: InfoBoxState(success/error)를 아이콘 키(check/ban)와 명시적으로 매핑한다.
35
+ InfoBoxIcon[
36
+ state === "success" ? "check" : state === "error" ? "ban" : state
37
+ ],
38
+ )}
39
+ </figure>
40
+ <div className="info-box-content">
41
+ {heading ? (
42
+ ["string", "number"].includes(typeof heading) ? (
43
+ // 변경: 텍스트 heading은 p 태그로 감싼다.
44
+ <p className="info-box-heading">{heading}</p>
45
+ ) : (
46
+ heading
47
+ )
48
+ ) : null}
49
+ {children ? (
50
+ ["string", "number"].includes(typeof children) ? (
51
+ // 변경: 텍스트 본문은 p 태그로 감싼다.
52
+ <p className="info-box-body">{children}</p>
53
+ ) : (
54
+ <div className="info-box-body">{children}</div>
55
+ )
56
+ ) : null}
57
+ </div>
58
+ </section>
59
+ );
60
+ },
61
+ );
62
+
63
+ InfoBox.displayName = "InfoBox.Root";
64
+
65
+ export default InfoBox;
@@ -0,0 +1,2 @@
1
+ export { default as InfoBox } from "./InfoBox";
2
+ export * from "./Icon";