@uniai-fe/uds-templates 0.1.41 → 0.2.3

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 (99) hide show
  1. package/dist/styles.css +181 -76
  2. package/package.json +8 -8
  3. package/src/auth/common/auth-code/index.tsx +13 -0
  4. package/src/auth/common/auth-code/markup/Email.tsx +54 -0
  5. package/src/auth/common/auth-code/markup/InputCode.tsx +127 -0
  6. package/src/auth/common/auth-code/markup/Phone.tsx +53 -0
  7. package/src/auth/common/auth-code/styles/index.scss +3 -0
  8. package/src/auth/common/auth-code/types/index.ts +111 -0
  9. package/src/auth/common/complete/Template.tsx +1 -1
  10. package/src/auth/common/container/index.tsx +1 -1
  11. package/src/auth/common/container/types.ts +53 -0
  12. package/src/auth/common/find/hooks/useFindAccountForm.ts +28 -42
  13. package/src/auth/common/find/markup/CodeStep.tsx +121 -115
  14. package/src/auth/common/find/markup/FieldBase.tsx +63 -0
  15. package/src/auth/common/find/markup/InfoStep.tsx +67 -54
  16. package/src/auth/common/find/styles/email.scss +11 -11
  17. package/src/auth/common/find/styles/layout.scss +1 -1
  18. package/src/auth/common/find/types/forms.ts +56 -22
  19. package/src/auth/common/find/types/index.ts +2 -121
  20. package/src/auth/common/find/types/props.ts +499 -0
  21. package/src/auth/common/password/{constants.ts → data/vaildation.ts} +4 -1
  22. package/src/auth/common/password/hooks/useCheckPassword.ts +35 -102
  23. package/src/auth/common/password/index.tsx +8 -0
  24. package/src/auth/common/password/markup/CheckIcon.tsx +9 -0
  25. package/src/auth/common/password/markup/FieldBase.tsx +63 -0
  26. package/src/auth/common/password/markup/PasswordHelper.tsx +45 -0
  27. package/src/auth/common/password/markup/SetPassword.tsx +147 -0
  28. package/src/auth/common/password/styles/set-password.scss +63 -0
  29. package/src/auth/common/password/types/hook.ts +58 -0
  30. package/src/auth/common/password/types/index.ts +3 -0
  31. package/src/auth/common/password/types/props.ts +101 -0
  32. package/src/auth/common/password/{types.ts → types/validation.ts} +0 -53
  33. package/src/auth/find-id/index.ts +2 -0
  34. package/src/auth/find-id/markup/Provider.tsx +29 -0
  35. package/src/auth/find-id/markup/StepComplete.tsx +8 -13
  36. package/src/auth/find-id/markup/StepIdentify.tsx +18 -23
  37. package/src/auth/find-id/markup/StepVerifyCode.tsx +18 -22
  38. package/src/auth/find-id/types/index.ts +1 -65
  39. package/src/auth/find-id/types/props.ts +218 -0
  40. package/src/auth/find-password/index.ts +3 -5
  41. package/src/auth/find-password/markup/Provider.tsx +44 -0
  42. package/src/auth/find-password/markup/StepComplete.tsx +5 -7
  43. package/src/auth/find-password/markup/StepIdentify.tsx +20 -22
  44. package/src/auth/find-password/markup/StepResetPassword.tsx +58 -88
  45. package/src/auth/find-password/markup/StepVerifyCode.tsx +18 -22
  46. package/src/auth/index.tsx +6 -5
  47. package/src/auth/login/hooks/useAuthLoginForm.ts +35 -36
  48. package/src/auth/login/markup/Container.tsx +7 -0
  49. package/src/auth/login/markup/FormField.tsx +71 -79
  50. package/src/auth/login/markup/Password.tsx +89 -0
  51. package/src/auth/login/markup/UserId.tsx +89 -0
  52. package/src/auth/login/styles/login.scss +10 -8
  53. package/src/auth/login/types/hooks.ts +30 -16
  54. package/src/auth/login/types/props.ts +262 -61
  55. package/src/auth/signup/hooks/useSignupAccountForm.ts +15 -7
  56. package/src/auth/signup/hooks/useSignupUserInfoForm.ts +4 -5
  57. package/src/auth/signup/hooks/useSignupVerificationForm.ts +7 -5
  58. package/src/auth/signup/index.ts +3 -0
  59. package/src/auth/signup/markup/AccountForm.tsx +95 -62
  60. package/src/auth/signup/markup/Provider.tsx +33 -0
  61. package/src/auth/signup/markup/UserInfoForm.tsx +99 -47
  62. package/src/auth/signup/markup/VerificationForm.tsx +95 -78
  63. package/src/auth/signup/styles/signup.scss +25 -23
  64. package/src/auth/signup/types/hooks.ts +106 -11
  65. package/src/auth/signup/types/props.ts +345 -23
  66. package/src/cctv/components/video/Template.tsx +6 -3
  67. package/src/modal/core/components/Container.tsx +22 -4
  68. package/src/modal/core/components/FooterButtons.tsx +56 -97
  69. package/src/modal/core/components/FooterPositionButton.tsx +69 -0
  70. package/src/modal/core/components/FooterPositionGroup.tsx +29 -0
  71. package/src/modal/core/components/Provider.tsx +3 -0
  72. package/src/modal/core/components/Root.tsx +27 -23
  73. package/src/modal/core/hooks/useModal.ts +2 -13
  74. package/src/modal/styles/base.scss +13 -13
  75. package/src/modal/styles/container.scss +148 -40
  76. package/src/modal/templates/Alert.tsx +11 -0
  77. package/src/modal/templates/Dialog.tsx +50 -37
  78. package/src/modal/templates/components/DialogBody.tsx +20 -0
  79. package/src/modal/templates/components/DialogHeader.tsx +65 -0
  80. package/src/modal/types/components.ts +166 -0
  81. package/src/modal/types/footer.ts +112 -0
  82. package/src/modal/types/hooks.ts +49 -0
  83. package/src/modal/types/index.ts +13 -0
  84. package/src/modal/types/options.ts +11 -0
  85. package/src/modal/types/state.ts +86 -0
  86. package/src/modal/types/templates.ts +157 -1
  87. package/src/page-frame/desktop/components/header/util/setting/Button.tsx +77 -20
  88. package/src/page-frame/desktop/data/setting.ts +17 -0
  89. package/src/page-frame/desktop/index.tsx +1 -0
  90. package/src/page-frame/desktop/styles/variables.scss +1 -1
  91. package/src/page-frame/desktop/types/index.ts +10 -1
  92. package/src/page-frame/desktop/types/setting.ts +39 -0
  93. package/src/page-frame/mobile/components/header/Header.tsx +6 -6
  94. package/src/page-frame/types/index.ts +4 -9
  95. package/src/auth/common/find/utils/composeFieldProps.ts +0 -45
  96. package/src/auth/common/password/markup/PasswordSetField.tsx +0 -252
  97. package/src/auth/common/password/styles/password-set-field.scss +0 -48
  98. package/src/auth/common/password/utils/composePasswordFieldProps.ts +0 -44
  99. package/src/auth/signup/utils/composeFieldProps.ts +0 -50
package/dist/styles.css CHANGED
@@ -13,7 +13,7 @@
13
13
  --uds-page-nav-logo-height: var(--uds-page-header-height, 7.2rem);
14
14
  --uds-page-nav-list-padding-horizontal: 0rem;
15
15
  --uds-page-nav-list-padding-vertical: var(--spacing-padding-9, 2.4rem);
16
- --uds-page-nav-item-height: var(--theme-size-meduum-2, 4.8rem);
16
+ --uds-page-nav-item-height: var(--theme-size-medium-2, 4.8rem);
17
17
  --uds-page-nav-item-gap: var(--spacing-gap-6, 1.6rem);
18
18
  --uds-page-nav-item-color-default: var(--color-label-standard);
19
19
  --uds-page-nav-item-color-active: var(--color-primary-default);
@@ -38,25 +38,25 @@
38
38
  );
39
39
  --modal-overlay-bg: rgba(5, 6, 12, 0.55);
40
40
  --modal-panel-width: 360px;
41
- --modal-panel-max-width: calc(100vw - var(--spacing-padding-10, 32px) * 2);
42
- --modal-panel-max-height: calc(100vh - var(--spacing-padding-10, 32px) * 2);
41
+ --modal-panel-max-width: calc(100vw - var(--spacing-padding-10) * 2);
42
+ --modal-panel-max-height: calc(100vh - var(--spacing-padding-10) * 2);
43
43
  --modal-panel-bg: var(--color-surface-static-white);
44
44
  --modal-panel-radius: var(--theme-radius-large-1);
45
45
  --modal-panel-shadow: 0px 18px 40px rgba(8, 11, 30, 0.18);
46
- --modal-border-color: var(--color-border-standard-cool-gray, #e4e5e7);
46
+ --modal-border-color: var(--color-border-standard-cool-gray);
47
47
  --modal-footer-border-color: var(--modal-border-color);
48
48
  --modal-stack-index: 0;
49
- --modal-alert-body-color: var(--color-label-strong, #18191b);
50
- --modal-alert-body-font-size: var(--font-body-small-size, 14px);
51
- --modal-dialog-title-color: var(--color-label-strong, #090a0b);
52
- --modal-dialog-title-font-size: var(--font-heading-xsmall-size, 20px);
49
+ --modal-alert-body-color: var(--color-label-standard);
50
+ --modal-alert-body-font-size: var(--font-body-medium-size);
51
+ --modal-dialog-title-color: var(--color-label-strong);
52
+ --modal-dialog-title-font-size: var(--font-heading-small-size);
53
53
  --modal-dialog-title-line-height: var(
54
- --font-heading-xsmall-line-height,
55
- 28px
54
+ --font-heading-small-line-height,
55
+ 1.4em
56
56
  );
57
- --modal-dialog-title-weight: var(--font-heading-xsmall-weight, 700);
58
- --modal-dialog-body-color: var(--color-label-strong, #18191b);
59
- --modal-dialog-body-font-size: var(--font-body-small-size, 14px);
57
+ --modal-dialog-title-weight: var(--font-heading-small-weight);
58
+ --modal-dialog-body-color: var(--color-label-standard);
59
+ --modal-dialog-body-font-size: var(--font-body-medium-size);
60
60
  --auth-container-max-width: 335px;
61
61
  --auth-container-gap: var(--spacing-padding-7, 28px);
62
62
  --auth-container-padding-inline: var(--spacing-padding-6, 24px);
@@ -456,7 +456,7 @@
456
456
  .uds-modal-root {
457
457
  position: fixed;
458
458
  inset: 0;
459
- z-index: calc(400 + var(--modal-stack-index, 0));
459
+ z-index: calc(1000 + var(--modal-stack-index, 0));
460
460
  display: flex;
461
461
  align-items: center;
462
462
  justify-content: center;
@@ -522,23 +522,67 @@
522
522
 
523
523
  .uds-modal-footer-buttons {
524
524
  display: flex;
525
+ flex-wrap: wrap;
525
526
  width: 100%;
526
- gap: var(--spacing-gap-4, 16px);
527
527
  padding: var(--spacing-padding-6, 16px);
528
+ gap: var(--spacing-gap-4, 16px);
529
+ align-items: stretch;
530
+ row-gap: var(--spacing-gap-4, 16px);
531
+ }
532
+
533
+ .uds-modal-footer-group {
534
+ display: flex;
535
+ flex: 1 1 0;
536
+ flex-wrap: nowrap;
537
+ gap: var(--spacing-gap-4, 16px);
528
538
  align-items: stretch;
529
539
  }
530
- .uds-modal-footer-buttons[data-count="1"] .uds-modal-footer-button {
540
+ .uds-modal-footer-group[data-position=left] {
541
+ justify-content: flex-start;
542
+ }
543
+ .uds-modal-footer-group[data-position=center] {
544
+ justify-content: center;
545
+ }
546
+ .uds-modal-footer-group[data-position=right] {
547
+ justify-content: flex-end;
548
+ }
549
+
550
+ .uds-modal-footer-center {
551
+ display: flex;
552
+ flex-wrap: wrap;
553
+ justify-content: center;
554
+ gap: var(--spacing-gap-4, 16px);
531
555
  width: 100%;
532
556
  }
533
- .uds-modal-footer-buttons[data-count="2"] .uds-modal-footer-button {
534
- flex: 1 1 0;
557
+
558
+ .uds-modal-footer-button[data-width=full] {
559
+ flex: 1 1 100%;
560
+ max-width: 100%;
561
+ }
562
+
563
+ .uds-modal-footer-button[data-width=fill] {
564
+ flex: 1 1 0%;
565
+ min-width: 0;
535
566
  }
567
+
568
+ .uds-modal-footer-button[data-width=auto] {
569
+ flex: 0 1 auto;
570
+ }
571
+
572
+ .uds-modal-footer-button[data-width=fit] {
573
+ flex: 0 0 auto;
574
+ }
575
+
536
576
  .uds-modal-footer-buttons[data-appearance=text] {
537
577
  padding: 0;
538
578
  gap: 0;
539
579
  min-height: var(--notice-dialog-action-height, 56px);
540
580
  border-top: 1px solid var(--modal-footer-border-color, var(--color-border-standard-cool-gray, #e4e5e7));
541
581
  }
582
+ .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-group {
583
+ flex-wrap: nowrap;
584
+ gap: 0;
585
+ }
542
586
  .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-button {
543
587
  border-radius: 0;
544
588
  }
@@ -559,14 +603,10 @@
559
603
  .uds-modal-alert-message {
560
604
  padding: var(--spacing-padding-10, 32px) var(--spacing-padding-8, 24px);
561
605
  text-align: center;
562
- color: var(--modal-alert-body-color);
563
606
  word-break: keep-all;
607
+ color: var(--modal-alert-body-color);
564
608
  }
565
- .uds-modal-alert-message > p,
566
- .uds-modal-alert-message > span,
567
- .uds-modal-alert-message > strong,
568
- .uds-modal-alert-message > em {
569
- margin: 0;
609
+ .uds-modal-alert-message :where(p, span, strong, em) {
570
610
  font-size: var(--modal-alert-body-font-size);
571
611
  line-height: 1.5em;
572
612
  font-weight: var(--font-body-small-weight, 400);
@@ -583,10 +623,49 @@
583
623
  }
584
624
 
585
625
  .uds-modal-dialog-header-content {
586
- padding: var(--spacing-padding-7, 20px) var(--spacing-padding-6, 16px);
626
+ padding: var(--spacing-padding-9) var(--spacing-padding-6) 0;
587
627
  text-align: center;
628
+ display: flex;
629
+ flex-direction: column;
630
+ gap: var(--spacing-gap-2, 8px);
631
+ }
632
+
633
+ .uds-modal-dialog-header-row {
634
+ display: flex;
635
+ align-items: center;
636
+ justify-content: center;
637
+ gap: var(--spacing-gap-3, 12px);
638
+ }
639
+
640
+ .uds-modal-dialog-header-row-split {
641
+ justify-content: space-between;
642
+ }
643
+
644
+ .uds-modal-dialog-header-leading {
645
+ display: inline-flex;
646
+ align-items: center;
647
+ gap: var(--spacing-gap-2, 8px);
648
+ justify-content: center;
588
649
  }
589
- .uds-modal-dialog-header-content > h3 {
650
+
651
+ .uds-modal-dialog-header-leading-content {
652
+ display: inline-flex;
653
+ align-items: center;
654
+ gap: var(--spacing-gap-1, 4px);
655
+ }
656
+ .uds-modal-dialog-header-leading-content :where(p, span, strong, em) {
657
+ color: var(--modal-dialog-title-color);
658
+ font-size: var(--modal-dialog-body-font-size);
659
+ line-height: 1.4em;
660
+ font-weight: var(--modal-dialog-title-weight);
661
+ }
662
+
663
+ .uds-modal-dialog-header-title {
664
+ display: flex;
665
+ justify-content: center;
666
+ text-align: center;
667
+ }
668
+ .uds-modal-dialog-header-title > :where(h1, h2, h3, h4, h5, h6, p, span, strong, em) {
590
669
  margin: 0;
591
670
  color: var(--modal-dialog-title-color);
592
671
  font-size: var(--modal-dialog-title-font-size);
@@ -594,17 +673,41 @@
594
673
  font-weight: var(--modal-dialog-title-weight);
595
674
  }
596
675
 
676
+ .uds-modal-dialog-header-trailing {
677
+ display: inline-flex;
678
+ align-items: center;
679
+ gap: var(--spacing-gap-2, 8px);
680
+ }
681
+
682
+ .uds-modal-dialog-header-description {
683
+ margin: 0;
684
+ text-align: inherit;
685
+ }
686
+ .uds-modal-dialog-header-description > :where(p, span, strong, em) {
687
+ margin: 0;
688
+ color: var(--modal-dialog-body-color);
689
+ font-size: var(--modal-dialog-body-font-size);
690
+ line-height: 1.5em;
691
+ font-weight: var(--font-body-small-weight, 400);
692
+ }
693
+
694
+ .uds-modal-dialog-header[data-layout=split] .uds-modal-dialog-header-content,
695
+ .uds-modal-dialog-header[data-has-right=true] .uds-modal-dialog-header-content {
696
+ text-align: left;
697
+ }
698
+
699
+ .uds-modal-dialog-header[data-layout=split] .uds-modal-dialog-header-leading,
700
+ .uds-modal-dialog-header[data-has-right=true] .uds-modal-dialog-header-leading {
701
+ justify-content: flex-start;
702
+ }
703
+
597
704
  .uds-modal-dialog-body-content {
598
- padding: var(--spacing-padding-7, 20px) var(--spacing-padding-6, 16px);
705
+ padding: var(--modal-dialog-body-padding, var(--spacing-padding-7, 20px) var(--spacing-padding-6, 16px));
599
706
  text-align: center;
600
- color: var(--modal-dialog-body-color);
601
707
  word-break: keep-all;
708
+ color: var(--modal-dialog-body-color);
602
709
  }
603
- .uds-modal-dialog-body-content > p,
604
- .uds-modal-dialog-body-content > span,
605
- .uds-modal-dialog-body-content > strong,
606
- .uds-modal-dialog-body-content > em {
607
- margin: 0;
710
+ .uds-modal-dialog-body-content :where(p, span, strong, em) {
608
711
  font-size: var(--modal-dialog-body-font-size);
609
712
  line-height: 1.5em;
610
713
  font-weight: var(--font-body-small-weight, 400);
@@ -717,21 +820,21 @@
717
820
  .auth-login-form {
718
821
  display: flex;
719
822
  flex-direction: column;
720
- gap: var(--spacing-padding-7, 28px);
721
- margin-top: var(--spacing-padding-10, 40px);
823
+ gap: var(--spacing-padding-7);
824
+ margin-top: var(--spacing-padding-10);
722
825
  }
723
826
 
724
827
  .auth-login-fields {
725
828
  display: flex;
726
829
  flex-direction: column;
727
- gap: var(--spacing-padding-5, 20px);
830
+ gap: var(--spacing-padding-5);
728
831
  }
729
832
 
730
833
  .auth-login-util-container {
731
834
  margin-top: 80px;
732
835
  display: flex;
733
836
  flex-direction: column;
734
- gap: var(--spacing-padding-6, 24px);
837
+ gap: var(--spacing-padding-6);
735
838
  }
736
839
 
737
840
  .auth-login-find-account {
@@ -743,14 +846,16 @@
743
846
  }
744
847
 
745
848
  .auth-login-find-account-button {
746
- color: var(--color-label-standard);
747
849
  font-size: 13px;
748
850
  line-height: 1em;
749
851
  font-weight: 400;
750
- padding-inline: var(--spacing-padding-1, 4px);
852
+ padding-inline: var(--spacing-padding-1);
751
853
  }
752
854
  .auth-login-find-account-button:hover {
753
- color: var(--color-primary-50, #2563eb);
855
+ color: var(--color-primary-standard);
856
+ }
857
+ .auth-login-find-account-button span {
858
+ color: var(--color-label-standard);
754
859
  }
755
860
 
756
861
  .auth-login-signup {
@@ -760,7 +865,6 @@
760
865
 
761
866
  .auth-login-signup-button {
762
867
  text-decoration: none;
763
- min-width: 160px;
764
868
  justify-content: center;
765
869
  /* 버튼 토큰 네이밍 개편 반영 */
766
870
  --button-default-font-label-medium-size: var(--font-caption-medium-size);
@@ -782,20 +886,20 @@
782
886
  gap: var(--spacing-padding-5, 20px);
783
887
  }
784
888
 
785
- .auth-find-account-form--code .auth-find-account-fields {
889
+ .auth-find-account-form-code .auth-find-account-fields {
786
890
  margin-bottom: var(--spacing-padding-4, 16px);
787
891
  }
788
892
 
789
893
  .auth-find-account-email-block {
790
894
  display: flex;
791
895
  flex-direction: column;
792
- gap: var(--spacing-padding-3, 12px);
793
- margin-bottom: var(--spacing-padding-7, 28px);
896
+ gap: var(--spacing-padding-3);
897
+ margin-bottom: var(--spacing-padding-7);
794
898
  }
795
899
 
796
900
  .auth-find-account-email-label {
797
901
  color: var(--color-label-standard, var(--primitive-coolgray-20, #3d3f43));
798
- font-size: var(--font-label-small-size, 13px);
902
+ font-size: var(--font-label-small-size);
799
903
  line-height: 1.5;
800
904
  margin: 0;
801
905
  }
@@ -805,19 +909,19 @@
805
909
  align-items: center;
806
910
  justify-content: space-between;
807
911
  border-bottom: 1px solid var(--color-border-standard, var(--primitive-coolgray-90, #e4e5e7));
808
- min-height: var(--spacing-padding-14, 56px);
809
- padding-bottom: var(--spacing-padding-2, 8px);
912
+ min-height: var(--spacing-padding-14);
913
+ padding-bottom: var(--spacing-padding-2);
810
914
  }
811
915
 
812
916
  .auth-find-account-email-value {
813
- font-size: var(--font-body-large-size, 19px);
917
+ font-size: var(--font-body-large-size);
814
918
  color: var(--color-label-strong, var(--primitive-coolgray-10, #18191b));
815
919
  line-height: 1.5;
816
920
  word-break: break-word;
817
921
  }
818
922
 
819
923
  .auth-find-account-email-helper {
820
- font-size: var(--font-caption-medium-size, 12px);
924
+ font-size: var(--font-caption-medium-size);
821
925
  color: var(--color-label-alternative, var(--primitive-coolgray-50, #afb1b6));
822
926
  margin: 0;
823
927
  }
@@ -826,17 +930,17 @@
826
930
  display: flex;
827
931
  align-items: center;
828
932
  justify-content: space-between;
829
- gap: var(--spacing-padding-4, 16px);
933
+ gap: var(--spacing-padding-4);
830
934
  }
831
935
 
832
936
  .auth-find-account-timer-text {
833
- font-size: var(--font-caption-medium-size, 12px);
834
- color: var(--color-primary-50, #2563eb);
937
+ font-size: var(--font-caption-medium-size);
938
+ color: var(--color-primary-standard);
835
939
  }
836
940
 
837
941
  .auth-find-account-timer-helper,
838
942
  .auth-find-account-helper {
839
- font-size: var(--font-caption-medium-size, 12px);
943
+ font-size: var(--font-caption-medium-size);
840
944
  color: var(--color-label-neutral, var(--primitive-coolgray-40, #797e86));
841
945
  margin: 0;
842
946
  }
@@ -957,52 +1061,53 @@
957
1061
  .auth-signup-form {
958
1062
  display: flex;
959
1063
  flex-direction: column;
960
- gap: var(--spacing-padding-8, 32px);
961
- margin-top: var(--spacing-padding-9, 36px);
1064
+ gap: var(--spacing-padding-8);
1065
+ margin-top: var(--spacing-padding-9);
962
1066
  }
963
1067
 
964
1068
  .auth-signup-fields {
965
1069
  display: flex;
966
1070
  flex-direction: column;
967
- gap: var(--spacing-padding-5, 20px);
1071
+ gap: var(--spacing-padding-5);
968
1072
  }
969
1073
 
970
1074
  .auth-signup-verification {
971
1075
  display: flex;
972
1076
  flex-direction: column;
973
- gap: var(--spacing-padding-9, 36px);
1077
+ gap: var(--spacing-padding-9);
974
1078
  }
975
1079
 
976
1080
  .auth-signup-agreements {
977
1081
  display: flex;
978
1082
  flex-direction: column;
979
- gap: var(--spacing-padding-4, 16px);
980
- background: var(--color-background-subtle);
981
- border-radius: var(--shape-rounded-3, 16px);
982
- padding: var(--spacing-padding-5, 20px);
1083
+ gap: var(--spacing-padding-4);
983
1084
  }
984
1085
 
985
1086
  .auth-signup-agreement-all {
986
- background: var(--color-background-soft, #f2f2f3);
987
- border-radius: var(--shape-rounded-2, 12px);
988
- padding: var(--spacing-padding-4, 16px);
1087
+ height: var(--theme-size-medium-3);
1088
+ display: flex;
1089
+ align-items: center;
1090
+ background: var(--color-bg-alternative-cool-gray, #f2f2f3);
1091
+ border-radius: var(--theme-radius-large-2, 16px);
1092
+ border-radius: var(--theme-radius-medium-3, 8px);
1093
+ padding: 0 var(--spacing-padding-5);
989
1094
  }
990
1095
 
991
1096
  .auth-signup-agreements-list {
992
1097
  width: 100%;
993
- background: var(--color-common-100, #ffffff);
994
- border-radius: var(--shape-rounded-2, 12px);
995
- padding: var(--spacing-padding-4, 16px);
1098
+ background: var(--color-common-100);
1099
+ border-radius: var(--theme-radius-medium-3, 8px);
1100
+ padding: var(--spacing-padding-3);
996
1101
  display: flex;
997
1102
  flex-direction: column;
998
- gap: var(--spacing-padding-3, 12px);
1103
+ gap: var(--spacing-padding-3);
999
1104
  }
1000
1105
 
1001
1106
  .auth-signup-agreement-row {
1002
1107
  display: flex;
1003
1108
  align-items: center;
1004
1109
  justify-content: space-between;
1005
- gap: var(--spacing-padding-3, 12px);
1110
+ gap: var(--spacing-padding-3);
1006
1111
  }
1007
1112
 
1008
1113
  .auth-signup-agreement-toggle {
@@ -1012,7 +1117,7 @@
1012
1117
  margin: 0;
1013
1118
  display: flex;
1014
1119
  align-items: center;
1015
- gap: var(--spacing-padding-3, 12px);
1120
+ gap: var(--spacing-padding-3);
1016
1121
  cursor: pointer;
1017
1122
  flex: 1;
1018
1123
  text-align: left;
@@ -1023,7 +1128,7 @@
1023
1128
  .auth-signup-agreement-icon {
1024
1129
  width: 20px;
1025
1130
  height: 20px;
1026
- color: var(--color-label-assistive, #94989e);
1131
+ color: var(--color-label-assistive);
1027
1132
  flex-shrink: 0;
1028
1133
  }
1029
1134
  .auth-signup-agreement-icon svg {
@@ -1042,7 +1147,7 @@
1042
1147
 
1043
1148
  .auth-signup-agreement-label {
1044
1149
  display: inline-flex;
1045
- gap: var(--spacing-padding-1, 4px);
1150
+ gap: var(--spacing-padding-1);
1046
1151
  align-items: baseline;
1047
1152
  flex-wrap: nowrap;
1048
1153
  }
@@ -1066,7 +1171,7 @@
1066
1171
  font-size: 13px;
1067
1172
  color: var(--color-label-assistive);
1068
1173
  margin: 0;
1069
- padding-left: calc(20px + var(--spacing-padding-3, 12px));
1174
+ padding-left: calc(20px + var(--spacing-padding-3));
1070
1175
  }
1071
1176
 
1072
1177
  .auth-signup-agreement-detail {
@@ -1099,7 +1204,7 @@
1099
1204
  .auth-signup-complete {
1100
1205
  display: flex;
1101
1206
  flex-direction: column;
1102
- gap: var(--spacing-padding-7, 28px);
1207
+ gap: var(--spacing-padding-7);
1103
1208
  text-align: center;
1104
1209
  }
1105
1210
 
@@ -1116,14 +1221,14 @@
1116
1221
  }
1117
1222
 
1118
1223
  .auth-signup-complete-description {
1119
- margin: var(--spacing-padding-2, 8px) 0 0;
1224
+ margin: var(--spacing-padding-2) 0 0;
1120
1225
  color: var(--color-label-assistive);
1121
1226
  }
1122
1227
 
1123
1228
  .auth-signup-complete-actions {
1124
1229
  display: flex;
1125
1230
  flex-direction: column;
1126
- gap: var(--spacing-padding-4, 16px);
1231
+ gap: var(--spacing-padding-4);
1127
1232
  }
1128
1233
 
1129
1234
  .auth-signup-agreement-drawer-body p {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-templates",
3
- "version": "0.1.41",
3
+ "version": "0.2.3",
4
4
  "description": "UNIAI Design System; UI Templates Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -12,7 +12,7 @@
12
12
  "publishConfig": {
13
13
  "access": "public"
14
14
  },
15
- "packageManager": "pnpm@10.28.0",
15
+ "packageManager": "pnpm@10.28.2",
16
16
  "engines": {
17
17
  "node": ">=24",
18
18
  "pnpm": ">=10"
@@ -67,9 +67,9 @@
67
67
  },
68
68
  "devDependencies": {
69
69
  "@svgr/webpack": "^8.1.0",
70
- "@tanstack/react-query": "^5.90.16",
70
+ "@tanstack/react-query": "^5.90.20",
71
71
  "@types/node": "^24.10.2",
72
- "@types/react": "^19.2.8",
72
+ "@types/react": "^19.2.11",
73
73
  "@types/react-dom": "^19.2.3",
74
74
  "@uniai-fe/eslint-config": "workspace:*",
75
75
  "@uniai-fe/next-devkit": "workspace:*",
@@ -82,11 +82,11 @@
82
82
  "@uniai-fe/util-next": "workspace:*",
83
83
  "@uniai-fe/util-rtc": "workspace:*",
84
84
  "eslint": "^9.39.2",
85
- "jotai": "^2.16.1",
85
+ "jotai": "^2.17.1",
86
86
  "next": "^15.5.11",
87
- "prettier": "^3.7.4",
88
- "react-hook-form": "^7.71.0",
89
- "sass": "^1.97.2",
87
+ "prettier": "^3.8.1",
88
+ "react-hook-form": "^7.71.1",
89
+ "sass": "^1.97.3",
90
90
  "typescript": "~5.9.3"
91
91
  }
92
92
  }
@@ -0,0 +1,13 @@
1
+ import AuthCodeEmailTemplate from "./markup/Email";
2
+ import AuthCodePhoneTemplate from "./markup/Phone";
3
+ import AuthCodeTemplateInputCode from "./markup/InputCode";
4
+
5
+ import "./styles/index.scss";
6
+
7
+ export const AuthCodeTemplate = {
8
+ InputCode: AuthCodeTemplateInputCode,
9
+ Email: AuthCodeEmailTemplate,
10
+ Phone: AuthCodePhoneTemplate,
11
+ };
12
+
13
+ export * from "./types";
@@ -0,0 +1,54 @@
1
+ "use client";
2
+
3
+ import clsx from "clsx";
4
+ import { Form, Input } from "@uniai-fe/uds-primitives";
5
+ import AuthCodeTemplateInputCode from "./InputCode";
6
+ import type { AuthEmailAuthCodeTemplateProps } from "../types";
7
+
8
+ /**
9
+ * 이메일 + 인증코드 Form.Field 템플릿 조합.
10
+ * @component
11
+ * @param {AuthEmailAuthCodeTemplateProps} props
12
+ * @property {AuthFormFieldTemplateProps} [props.templateProps] 이메일 필드 Template 옵션
13
+ * @property {EmailInputProps} props.inputProps 이메일 입력 props
14
+ * @property {AuthCodeFieldSectionProps} [props.code] 인증코드 섹션 옵션
15
+ */
16
+ export default function AuthCodeEmailTemplate({
17
+ templateProps,
18
+ inputProps,
19
+ code,
20
+ }: AuthEmailAuthCodeTemplateProps) {
21
+ const resolvedCode = code ?? undefined;
22
+ const showCodeSection =
23
+ Boolean(resolvedCode?.inputProps) && (resolvedCode?.visible ?? true);
24
+ const primaryTemplateProps = {
25
+ ...templateProps,
26
+ className: clsx("auth-email-auth-code", templateProps?.className),
27
+ };
28
+ const resolvedInputProps = {
29
+ ...inputProps,
30
+ requestButtonLabel:
31
+ inputProps?.requestButtonLabel ??
32
+ (showCodeSection ? "인증코드 재요청" : "인증코드 요청"),
33
+ };
34
+
35
+ const resolvedCodeSection =
36
+ showCodeSection && resolvedCode
37
+ ? {
38
+ ...resolvedCode,
39
+ countdownText: resolvedCode.countdownText ?? "05:00",
40
+ countdownActionLabel: resolvedCode.countdownActionLabel ?? "시간연장",
41
+ }
42
+ : undefined;
43
+
44
+ return (
45
+ <>
46
+ <Form.Field.Template {...primaryTemplateProps}>
47
+ <Input.Text.Email {...resolvedInputProps} />
48
+ </Form.Field.Template>
49
+ {resolvedCodeSection ? (
50
+ <AuthCodeTemplateInputCode {...resolvedCodeSection} />
51
+ ) : null}
52
+ </>
53
+ );
54
+ }