@uniai-fe/uds-templates 0.7.1 → 0.8.1

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.
@@ -5,13 +5,13 @@ Package: @uniai-fe/uds-templates
5
5
  This package declares the following direct third-party dependencies or peer dependencies.
6
6
  Internal `@uniai-fe/*` packages are excluded from this notice file.
7
7
 
8
- | Package | Relationship | Declared version | Installed metadata version | License |
9
- | --------------------- | -------------------------- | ---------------- | -------------------------- | ------- |
10
- | @tanstack/react-query | peerDependency | ^5 | 5.101.0 | MIT |
11
- | clsx | dependency, peerDependency | ^2.1.1 | 2.1.1 | MIT |
12
- | dayjs | dependency | ^1.11.21 | 1.11.21 | MIT |
13
- | jotai | peerDependency | ^2 | 2.20.1 | MIT |
14
- | next | peerDependency | ^15 | 15.5.18 | MIT |
15
- | react | peerDependency | ^19 | 19.2.7 | MIT |
16
- | react-dom | peerDependency | ^19 | 19.2.7 | MIT |
17
- | react-hook-form | peerDependency | ^7 | 7.78.0 | MIT |
8
+ | Package | Relationship | License |
9
+ | --------------------- | -------------------------- | ------- |
10
+ | @tanstack/react-query | peerDependency | MIT |
11
+ | clsx | dependency, peerDependency | MIT |
12
+ | dayjs | dependency | MIT |
13
+ | jotai | peerDependency | MIT |
14
+ | next | peerDependency | MIT |
15
+ | react | peerDependency | MIT |
16
+ | react-dom | peerDependency | MIT |
17
+ | react-hook-form | peerDependency | MIT |
package/dist/styles.css CHANGED
@@ -28,16 +28,13 @@
28
28
  --frame-safe-area-top: env(safe-area-inset-top, 0px);
29
29
  --frame-safe-area-bottom: env(safe-area-inset-bottom, 0px);
30
30
  --uds-page-frame-height: min(
31
- 100svh,
32
- 100dvh,
33
- var(--frame-device-height, 812px)
31
+ 100svh,
32
+ 100dvh,
33
+ var(--frame-device-height, 812px)
34
34
  );
35
35
  --uds-page-frame-header-padding-top: var(--frame-safe-area-top);
36
36
  --uds-page-frame-footer-safe-area: var(--frame-safe-area-bottom);
37
- --uds-page-frame-max-width: var(
38
- --frame-device-width,
39
- 480px
40
- );
37
+ --uds-page-frame-max-width: var(--frame-device-width, 480px);
41
38
  --modal-overlay-bg: rgba(5, 6, 12, 0.55);
42
39
  --modal-panel-width: 360px;
43
40
  --modal-panel-max-width: calc(100vw - var(--spacing-padding-10) * 2);
@@ -53,8 +50,8 @@
53
50
  --modal-dialog-title-color: var(--color-label-strong);
54
51
  --modal-dialog-title-font-size: var(--font-heading-small-size);
55
52
  --modal-dialog-title-line-height: var(
56
- --font-heading-small-line-height,
57
- 1.4em
53
+ --font-heading-small-line-height,
54
+ 1.4em
58
55
  );
59
56
  --modal-dialog-title-weight: var(--font-heading-small-weight);
60
57
  --modal-dialog-body-color: var(--color-label-standard);
@@ -64,7 +61,7 @@
64
61
  --auth-container-gap: var(--spacing-padding-7, 28px);
65
62
  --auth-container-padding-inline: var(--spacing-padding-6, 24px);
66
63
  --auth-container-padding-top: calc(
67
- var(--spacing-padding-9, 32px) + env(safe-area-inset-top, 0px)
64
+ var(--spacing-padding-9, 32px) + env(safe-area-inset-top, 0px)
68
65
  );
69
66
  --auth-container-padding-bottom: var(--spacing-padding-10, 40px);
70
67
  --weather-page-header-height: 2.4rem;
@@ -99,9 +96,9 @@
99
96
  --cctv-overlay-padding-y: var(--spacing-padding-6);
100
97
  --cctv-video-bg: var(--color-surface-heavy);
101
98
  --cctv-overlay-bg: linear-gradient(
102
- 180deg,
103
- rgba(0, 0, 0, 0) 0%,
104
- rgba(0, 0, 0, 0.2) 100%
99
+ 180deg,
100
+ rgba(0, 0, 0, 0) 0%,
101
+ rgba(0, 0, 0, 0.2) 100%
105
102
  );
106
103
  /* Live State */
107
104
  --cctv-live-state-bg-on: var(--color-cool-gray-10);
@@ -144,7 +141,6 @@
144
141
  /* 템플릿 레벨 스타일을 통합해 서비스 앱이 단일 엔트리만 import하도록 구성한다. */
145
142
  /* namespace 충돌을 막기 위해 모든 @use 경로에 고유 alias를 부여한다. */
146
143
 
147
-
148
144
  .page-frame-container {
149
145
  width: 100%;
150
146
  min-height: 100vh;
@@ -168,7 +164,8 @@
168
164
  .page-frame-service-main-wrapper {
169
165
  width: 100%;
170
166
  height: calc(100% - var(--uds-page-header-height));
171
- padding: var(--uds-page-body-padding-vertical) var(--uds-page-body-padding-horizontal);
167
+ padding: var(--uds-page-body-padding-vertical)
168
+ var(--uds-page-body-padding-horizontal);
172
169
  background-color: var(--uds-page-body-background);
173
170
  overflow-y: auto;
174
171
  position: relative;
@@ -182,7 +179,8 @@
182
179
  .page-frame-header {
183
180
  width: 100%;
184
181
  height: var(--uds-page-header-height);
185
- padding: var(--uds-page-header-padding-vertical) var(--uds-page-header-padding-horizontal);
182
+ padding: var(--uds-page-header-padding-vertical)
183
+ var(--uds-page-header-padding-horizontal);
186
184
  background: var(--uds-page-header-background);
187
185
  border-bottom: 1px solid var(--uds-page-header-border);
188
186
  display: flex;
@@ -261,7 +259,8 @@
261
259
  .page-frame-nav-body {
262
260
  width: 100%;
263
261
  height: calc(100% - var(--uds-page-nav-logo-height));
264
- padding: var(--uds-page-nav-body-padding-vertical) var(--uds-page-nav-body-padding-horizontal);
262
+ padding: var(--uds-page-nav-body-padding-vertical)
263
+ var(--uds-page-nav-body-padding-horizontal);
265
264
  display: flex;
266
265
  flex-direction: column;
267
266
  overflow: auto;
@@ -269,7 +268,8 @@
269
268
 
270
269
  .page-frame-nav-list {
271
270
  width: 100%;
272
- padding: var(--uds-page-nav-list-padding-vertical) var(--uds-page-nav-list-padding-horizontal);
271
+ padding: var(--uds-page-nav-list-padding-vertical)
272
+ var(--uds-page-nav-list-padding-horizontal);
273
273
  }
274
274
 
275
275
  .page-frame-nav-item {
@@ -283,7 +283,9 @@
283
283
  height: var(--uds-page-nav-item-height);
284
284
  text-decoration: none;
285
285
  color: var(--uds-page-nav-item-color-default);
286
- transition: color 0.2s, fill 0.2s;
286
+ transition:
287
+ color 0.2s,
288
+ fill 0.2s;
287
289
  display: flex;
288
290
  align-items: center;
289
291
  justify-content: center;
@@ -409,8 +411,6 @@
409
411
  padding: var(--spacing-padding-9);
410
412
  }
411
413
 
412
-
413
-
414
414
  .page-frame-mobile-shell {
415
415
  display: grid;
416
416
  grid-template-rows: auto 1fr auto;
@@ -513,7 +513,6 @@
513
513
 
514
514
  /* foundation CSS는 소비 앱 루트에서 한 번만 로드된다는 전제하에 토큰만 참조한다. */
515
515
 
516
-
517
516
  .uds-modal-root {
518
517
  position: fixed;
519
518
  inset: 0;
@@ -528,8 +527,17 @@
528
527
  .uds-modal-surface {
529
528
  position: relative;
530
529
  width: 100%;
531
- max-width: min(var(--modal-panel-width, 360px), var(--modal-panel-max-width, calc(100vw - var(--spacing-padding-10, 32px) * 2)));
532
- max-height: var(--modal-panel-max-height, calc(100vh - var(--spacing-padding-10, 32px) * 2));
530
+ max-width: min(
531
+ var(--modal-panel-width, 360px),
532
+ var(
533
+ --modal-panel-max-width,
534
+ calc(100vw - var(--spacing-padding-10, 32px) * 2)
535
+ )
536
+ );
537
+ max-height: var(
538
+ --modal-panel-max-height,
539
+ calc(100vh - var(--spacing-padding-10, 32px) * 2)
540
+ );
533
541
  background-color: var(--modal-panel-bg, var(--color-surface-static-white));
534
542
  border-radius: var(--modal-panel-radius, var(--theme-radius-large-1));
535
543
  box-shadow: var(--modal-panel-shadow, 0px 18px 40px rgba(8, 11, 30, 0.18));
@@ -546,10 +554,11 @@
546
554
  pointer-events: auto;
547
555
  }
548
556
 
549
- .uds-modal-root[data-state=init], .uds-modal-root[data-state=open] {
557
+ .uds-modal-root[data-state="init"],
558
+ .uds-modal-root[data-state="open"] {
550
559
  pointer-events: auto;
551
560
  }
552
- .uds-modal-root[data-state=closed] {
561
+ .uds-modal-root[data-state="closed"] {
553
562
  pointer-events: none;
554
563
  }
555
564
 
@@ -557,10 +566,10 @@
557
566
  opacity: 0;
558
567
  transition: opacity 0.2s ease;
559
568
  }
560
- .uds-modal-root[data-state=open] .uds-modal-dimmer {
569
+ .uds-modal-root[data-state="open"] .uds-modal-dimmer {
561
570
  opacity: 1;
562
571
  }
563
- .uds-modal-root[data-state=closed] .uds-modal-dimmer {
572
+ .uds-modal-root[data-state="closed"] .uds-modal-dimmer {
564
573
  opacity: 0;
565
574
  }
566
575
 
@@ -615,13 +624,13 @@
615
624
  gap: var(--spacing-gap-4);
616
625
  align-items: stretch;
617
626
  }
618
- .uds-modal-footer-group[data-position=left] {
627
+ .uds-modal-footer-group[data-position="left"] {
619
628
  justify-content: flex-start;
620
629
  }
621
- .uds-modal-footer-group[data-position=center] {
630
+ .uds-modal-footer-group[data-position="center"] {
622
631
  justify-content: center;
623
632
  }
624
- .uds-modal-footer-group[data-position=right] {
633
+ .uds-modal-footer-group[data-position="right"] {
625
634
  justify-content: flex-end;
626
635
  }
627
636
 
@@ -637,39 +646,49 @@
637
646
  gap: 0;
638
647
  }
639
648
 
640
- .uds-modal-footer-button[data-width=full] {
649
+ .uds-modal-footer-button[data-width="full"] {
641
650
  flex: 1 1 100%;
642
651
  max-width: 100%;
643
652
  }
644
653
 
645
- .uds-modal-footer-button[data-width=fill] {
654
+ .uds-modal-footer-button[data-width="fill"] {
646
655
  flex: 1 1 0%;
647
656
  min-width: 0;
648
657
  }
649
658
 
650
- .uds-modal-footer-button[data-width=auto] {
659
+ .uds-modal-footer-button[data-width="auto"] {
651
660
  flex: 0 1 auto;
652
661
  }
653
662
 
654
- .uds-modal-footer-button[data-width=fit] {
663
+ .uds-modal-footer-button[data-width="fit"] {
655
664
  flex: 0 0 auto;
656
665
  }
657
666
 
658
- .uds-modal-footer-buttons[data-appearance=text] {
667
+ .uds-modal-footer-buttons[data-appearance="text"] {
659
668
  padding: 0;
660
669
  gap: 0;
661
670
  min-height: var(--notice-dialog-action-height, 56px);
662
- border-top: 1px solid var(--modal-footer-border-color, var(--color-border-standard-cool-gray, #e4e5e7));
671
+ border-top: 1px solid
672
+ var(
673
+ --modal-footer-border-color,
674
+ var(--color-border-standard-cool-gray, #e4e5e7)
675
+ );
663
676
  }
664
- .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-group {
677
+ .uds-modal-footer-buttons[data-appearance="text"] .uds-modal-footer-group {
665
678
  flex-wrap: nowrap;
666
679
  gap: 0;
667
680
  }
668
- .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-button {
681
+ .uds-modal-footer-buttons[data-appearance="text"] .uds-modal-footer-button {
669
682
  border-radius: 0;
670
683
  }
671
- .uds-modal-footer-buttons[data-appearance=text] .uds-modal-footer-button + .uds-modal-footer-button {
672
- border-left: 1px solid var(--modal-footer-border-color, var(--color-border-standard-cool-gray, #e4e5e7));
684
+ .uds-modal-footer-buttons[data-appearance="text"]
685
+ .uds-modal-footer-button
686
+ + .uds-modal-footer-button {
687
+ border-left: 1px solid
688
+ var(
689
+ --modal-footer-border-color,
690
+ var(--color-border-standard-cool-gray, #e4e5e7)
691
+ );
673
692
  }
674
693
 
675
694
  .uds-modal-footer-button-solid {
@@ -736,7 +755,8 @@
736
755
  align-items: center;
737
756
  gap: var(--spacing-gap-1);
738
757
  }
739
- .uds-modal-dialog-header-leading-content > :where(p, span, strong, em):not([class]) {
758
+ .uds-modal-dialog-header-leading-content
759
+ > :where(p, span, strong, em):not([class]) {
740
760
  color: var(--modal-dialog-title-color);
741
761
  font-size: var(--modal-dialog-body-font-size);
742
762
  line-height: 1.4em;
@@ -748,7 +768,8 @@
748
768
  justify-content: center;
749
769
  text-align: center;
750
770
  }
751
- .uds-modal-dialog-header-title > :where(h1, h2, h3, h4, h5, h6, p, span, strong, em):not([class]) {
771
+ .uds-modal-dialog-header-title
772
+ > :where(h1, h2, h3, h4, h5, h6, p, span, strong, em):not([class]) {
752
773
  margin: 0;
753
774
  color: var(--modal-dialog-title-color);
754
775
  font-size: var(--modal-dialog-title-font-size);
@@ -766,7 +787,8 @@
766
787
  margin: 0;
767
788
  text-align: inherit;
768
789
  }
769
- .uds-modal-dialog-header-description > :where(p, span, strong, em):not([class]) {
790
+ .uds-modal-dialog-header-description
791
+ > :where(p, span, strong, em):not([class]) {
770
792
  margin: 0;
771
793
  color: var(--modal-dialog-body-color);
772
794
  font-size: var(--modal-dialog-body-font-size);
@@ -774,18 +796,20 @@
774
796
  font-weight: var(--font-body-small-weight);
775
797
  }
776
798
 
777
- .uds-modal-dialog-header[data-layout=split] .uds-modal-dialog-header-content,
778
- .uds-modal-dialog-header[data-has-right=true] .uds-modal-dialog-header-content {
799
+ .uds-modal-dialog-header[data-layout="split"] .uds-modal-dialog-header-content,
800
+ .uds-modal-dialog-header[data-has-right="true"]
801
+ .uds-modal-dialog-header-content {
779
802
  text-align: left;
780
803
  }
781
804
 
782
- .uds-modal-dialog-header[data-layout=split] .uds-modal-dialog-header-leading,
783
- .uds-modal-dialog-header[data-has-right=true] .uds-modal-dialog-header-leading {
805
+ .uds-modal-dialog-header[data-layout="split"] .uds-modal-dialog-header-leading,
806
+ .uds-modal-dialog-header[data-has-right="true"]
807
+ .uds-modal-dialog-header-leading {
784
808
  justify-content: flex-start;
785
809
  }
786
810
 
787
811
  .uds-modal-dialog-body-content {
788
- padding: var(--modal-dialog-body-padding, );
812
+ padding: var(--modal-dialog-body-padding,);
789
813
  text-align: center;
790
814
  word-break: keep-all;
791
815
  color: var(--modal-dialog-body-color);
@@ -804,13 +828,15 @@
804
828
  .uds-modal-surface {
805
829
  opacity: 0;
806
830
  transform: translate3d(0, 12px, 0);
807
- transition: opacity 0.2s ease, transform 0.2s ease;
831
+ transition:
832
+ opacity 0.2s ease,
833
+ transform 0.2s ease;
808
834
  }
809
- .uds-modal-root[data-state=open] .uds-modal-surface {
835
+ .uds-modal-root[data-state="open"] .uds-modal-surface {
810
836
  opacity: 1;
811
837
  transform: translate3d(0, 0, 0);
812
838
  }
813
- .uds-modal-root[data-state=closed] .uds-modal-surface {
839
+ .uds-modal-root[data-state="closed"] .uds-modal-surface {
814
840
  opacity: 0;
815
841
  transform: translate3d(0, 12px, 0);
816
842
  pointer-events: none;
@@ -850,7 +876,13 @@
850
876
  line-height: 1.4;
851
877
  letter-spacing: 0.2px;
852
878
  color: var(--color-label-standard);
853
- font-family: "Pretendard JP Variable", "Pretendard", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
879
+ font-family:
880
+ "Pretendard JP Variable",
881
+ "Pretendard",
882
+ system-ui,
883
+ -apple-system,
884
+ BlinkMacSystemFont,
885
+ sans-serif;
854
886
  }
855
887
 
856
888
  .auth-stage-headline-description {
@@ -858,14 +890,21 @@
858
890
  font-size: 14px;
859
891
  line-height: 1.4;
860
892
  color: var(--color-label-assistive);
861
- font-family: "Pretendard", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
893
+ font-family:
894
+ "Pretendard",
895
+ system-ui,
896
+ -apple-system,
897
+ BlinkMacSystemFont,
898
+ sans-serif;
862
899
  }
863
900
 
864
-
865
-
866
901
  .auth-container {
867
902
  min-height: min(100svh, 100dvh);
868
- padding: var(--auth-container-padding-top) var(--auth-container-padding-inline) calc(var(--auth-container-padding-bottom) + env(safe-area-inset-bottom, 0px));
903
+ padding: var(--auth-container-padding-top)
904
+ var(--auth-container-padding-inline)
905
+ calc(
906
+ var(--auth-container-padding-bottom) + env(safe-area-inset-bottom, 0px)
907
+ );
869
908
  box-sizing: border-box;
870
909
  display: flex;
871
910
  flex-direction: column;
@@ -1057,7 +1096,8 @@
1057
1096
  display: flex;
1058
1097
  align-items: center;
1059
1098
  justify-content: space-between;
1060
- border-bottom: 1px solid var(--color-border-standard, var(--primitive-coolgray-90, #e4e5e7));
1099
+ border-bottom: 1px solid
1100
+ var(--color-border-standard, var(--primitive-coolgray-90, #e4e5e7));
1061
1101
  min-height: var(--spacing-padding-14);
1062
1102
  padding-bottom: var(--spacing-padding-2);
1063
1103
  }
@@ -1143,7 +1183,10 @@
1143
1183
  min-width: 230px;
1144
1184
  padding: 0 var(--spacing-padding-6, 16px);
1145
1185
  border-radius: var(--theme-radius-medium-3, 8px);
1146
- background: var(--color-background-alternative-cool-gray, var(--color-cool-gray-95, #f2f2f3));
1186
+ background: var(
1187
+ --color-background-alternative-cool-gray,
1188
+ var(--color-cool-gray-95, #f2f2f3)
1189
+ );
1147
1190
  }
1148
1191
 
1149
1192
  .auth-find-account-id-summary-row {
@@ -1193,11 +1236,11 @@
1193
1236
  flex-shrink: 0;
1194
1237
  }
1195
1238
 
1196
- .auth-find-account-password-rule[data-satisfied=true] {
1239
+ .auth-find-account-password-rule[data-satisfied="true"] {
1197
1240
  color: var(--color-label-positive);
1198
1241
  }
1199
1242
 
1200
- .auth-find-account-password-rule[data-satisfied=true]::before {
1243
+ .auth-find-account-password-rule[data-satisfied="true"]::before {
1201
1244
  background: var(--color-label-positive);
1202
1245
  }
1203
1246
 
@@ -1247,16 +1290,22 @@
1247
1290
  align-items: center;
1248
1291
  gap: var(--spacing-gap-1);
1249
1292
  }
1250
- .auth-password-helper-item[data-state=complete] .auth-password-helper-text {
1293
+ .auth-password-helper-item[data-state="complete"] .auth-password-helper-text {
1251
1294
  color: var(--color-success);
1252
1295
  }
1253
- .auth-password-helper-item[data-state=complete] .auth-set-password-icon svg path {
1296
+ .auth-password-helper-item[data-state="complete"]
1297
+ .auth-set-password-icon
1298
+ svg
1299
+ path {
1254
1300
  fill: var(--color-success);
1255
1301
  }
1256
- .auth-password-helper-item[data-state=error] .auth-password-helper-text {
1302
+ .auth-password-helper-item[data-state="error"] .auth-password-helper-text {
1257
1303
  color: var(--color-error);
1258
1304
  }
1259
- .auth-password-helper-item[data-state=error] .auth-set-password-icon svg path {
1305
+ .auth-password-helper-item[data-state="error"]
1306
+ .auth-set-password-icon
1307
+ svg
1308
+ path {
1260
1309
  fill: var(--color-error);
1261
1310
  }
1262
1311
 
@@ -1412,7 +1461,7 @@
1412
1461
  stroke: currentColor;
1413
1462
  }
1414
1463
 
1415
- .auth-signup-agreement-toggle[data-checked=true] .auth-signup-agreement-icon {
1464
+ .auth-signup-agreement-toggle[data-checked="true"] .auth-signup-agreement-icon {
1416
1465
  color: var(--color-primary-default);
1417
1466
  }
1418
1467
 
@@ -1429,7 +1478,7 @@
1429
1478
  font-weight: 400;
1430
1479
  color: var(--color-primary-default);
1431
1480
  }
1432
- .auth-signup-agreement-badge[data-required=false] {
1481
+ .auth-signup-agreement-badge[data-required="false"] {
1433
1482
  color: var(--color-label-standard);
1434
1483
  }
1435
1484
 
@@ -1515,8 +1564,6 @@
1515
1564
  letter-spacing: 0px;
1516
1565
  }
1517
1566
 
1518
-
1519
-
1520
1567
  .weather-page-header {
1521
1568
  display: flex;
1522
1569
  align-items: center;
@@ -1676,8 +1723,6 @@
1676
1723
  line-height: inherit;
1677
1724
  }
1678
1725
 
1679
-
1680
-
1681
1726
  .cctv-video-container {
1682
1727
  position: relative;
1683
1728
  width: 100%;
@@ -1686,7 +1731,7 @@
1686
1731
  border-radius: var(--cctv-video-radius);
1687
1732
  background: var(--cctv-video-bg);
1688
1733
  }
1689
- .cctv-video-container[data-error=true] .cctv-video-box {
1734
+ .cctv-video-container[data-error="true"] .cctv-video-box {
1690
1735
  visibility: hidden;
1691
1736
  }
1692
1737
 
@@ -1898,7 +1943,10 @@
1898
1943
  .cctv-cam-list-track {
1899
1944
  display: grid;
1900
1945
  width: 100%;
1901
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--cctv-list-item-min-width)), 1fr));
1946
+ grid-template-columns: repeat(
1947
+ auto-fit,
1948
+ minmax(min(100%, var(--cctv-list-item-min-width)), 1fr)
1949
+ );
1902
1950
  gap: var(--cctv-list-gap);
1903
1951
  padding: 0;
1904
1952
  margin: 0;
@@ -1940,7 +1988,10 @@
1940
1988
  }
1941
1989
 
1942
1990
  .cctv-pagination-list-container {
1943
- width: calc(100% - var(--cctv-pagination-move-button-size) * 2 - var(--cctv-carousel-gap) * 2);
1991
+ width: calc(
1992
+ 100% - var(--cctv-pagination-move-button-size) * 2 -
1993
+ var(--cctv-carousel-gap) * 2
1994
+ );
1944
1995
  }
1945
1996
 
1946
1997
  .cctv-pagination-viewport {
@@ -2009,8 +2060,6 @@
2009
2060
  margin-top: var(--spacing-gap-8);
2010
2061
  }
2011
2062
 
2012
-
2013
-
2014
2063
  .service-inquiry-form {
2015
2064
  display: flex;
2016
2065
  flex-direction: column;
@@ -2053,7 +2102,7 @@
2053
2102
  line-height: 1.4;
2054
2103
  }
2055
2104
 
2056
- .service-inquiry-type-option:where([data-selected=true]) {
2105
+ .service-inquiry-type-option:where([data-selected="true"]) {
2057
2106
  background-color: var(--service-inquiry-type-bg-selected);
2058
2107
  color: var(--service-inquiry-type-color-selected);
2059
2108
  font-weight: var(--service-inquiry-type-font-weight-selected);
@@ -2078,7 +2127,7 @@
2078
2127
  width: 100%;
2079
2128
  }
2080
2129
 
2081
- .edge-case:where(.edge-case-not-found, [data-edge-case=not-found]) {
2130
+ .edge-case:where(.edge-case-not-found, [data-edge-case="not-found"]) {
2082
2131
  --alternate-layout-min-block-size: 100dvh;
2083
2132
  --alternate-layout-gap: var(--spacing-gap-3);
2084
2133
  --alternate-layout-figure-size: 128px;
@@ -2104,20 +2153,26 @@
2104
2153
  );
2105
2154
  --button-default-font-label-medium-weight: var(--font-label-small-weight);
2106
2155
  --button-default-font-weight: var(--font-label-small-weight);
2107
- padding: calc(var(--spacing-padding-11) + var(--spacing-padding-7)) var(--spacing-padding-8);
2156
+ padding: calc(var(--spacing-padding-11) + var(--spacing-padding-7))
2157
+ var(--spacing-padding-8);
2108
2158
  border: 1px solid var(--color-border-assistive);
2109
2159
  border-radius: var(--theme-radius-large-1);
2110
2160
  background: var(--color-common-100);
2111
2161
  }
2112
- .edge-case:where(.edge-case-not-found, [data-edge-case=not-found]) :where(.alternate-layout-figure) {
2162
+ .edge-case:where(.edge-case-not-found, [data-edge-case="not-found"])
2163
+ :where(.alternate-layout-figure) {
2113
2164
  margin-bottom: var(--spacing-gap-3);
2114
2165
  }
2115
- .edge-case:where(.edge-case-not-found, [data-edge-case=not-found]) :where(.alternate-layout-contents) {
2166
+ .edge-case:where(.edge-case-not-found, [data-edge-case="not-found"])
2167
+ :where(.alternate-layout-contents) {
2116
2168
  white-space: nowrap;
2117
2169
  }
2118
- .edge-case:where(.edge-case-not-found, [data-edge-case=not-found]) :where(.alternate-layout-contents) :where(p + p) {
2170
+ .edge-case:where(.edge-case-not-found, [data-edge-case="not-found"])
2171
+ :where(.alternate-layout-contents)
2172
+ :where(p + p) {
2119
2173
  margin-top: var(--spacing-gap-3);
2120
2174
  }
2121
- .edge-case:where(.edge-case-not-found, [data-edge-case=not-found]) :where(.alternate-layout-button) {
2175
+ .edge-case:where(.edge-case-not-found, [data-edge-case="not-found"])
2176
+ :where(.alternate-layout-button) {
2122
2177
  margin-top: var(--spacing-gap-3);
2123
2178
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-templates",
3
- "version": "0.7.1",
3
+ "version": "0.8.1",
4
4
  "description": "UNIAI Design System; UI Templates Package",
5
5
  "type": "module",
6
6
  "private": false,
@@ -13,10 +13,9 @@
13
13
  "publishConfig": {
14
14
  "access": "public"
15
15
  },
16
- "packageManager": "pnpm@10.33.3",
17
16
  "engines": {
18
17
  "node": ">=24",
19
- "pnpm": ">=10"
18
+ "pnpm": ">=11"
20
19
  },
21
20
  "author": {
22
21
  "name": "GraffitoRyu",
@@ -35,35 +34,20 @@
35
34
  "./styles": "./src/index.scss",
36
35
  "./css": "./dist/styles.css"
37
36
  },
38
- "scripts": {
39
- "format": "prettier --write .",
40
- "format:check": "prettier --check .",
41
- "lint": "eslint . --max-warnings=0",
42
- "typecheck": "tsc --project tsconfig.build.json --noEmit",
43
- "build": "pnpm format && pnpm typecheck && pnpm css:build",
44
- "css:build": "sass --load-path=node_modules src/index.scss dist/styles.css --style=expanded --no-source-map && node ./scripts/merge-theme-root.mjs dist/styles.css --selector=:root",
45
- "dev": "tsc --project tsconfig.build.json --watch --noEmit",
46
- "module:lint": "pnpm lint",
47
- "module:typecheck": "pnpm typecheck",
48
- "module:build": "pnpm build",
49
- "design-templates:build": "pnpm run build",
50
- "design-templates:dev": "pnpm run dev",
51
- "publish:public": "bash ../../../scripts/npm-publish.sh"
52
- },
53
37
  "peerDependencies": {
54
- "@tanstack/react-query": "^5",
55
- "@uniai-fe/uds-foundation": "^0.4.8",
56
- "@uniai-fe/uds-primitives": "^0.8.0",
57
- "@uniai-fe/util-api": "^0.1.15",
58
- "@uniai-fe/util-functions": "^0.3.0",
59
- "@uniai-fe/util-jotai": "^0.1.9",
60
- "@uniai-fe/util-next": "^0.3.0",
61
- "@uniai-fe/util-rtc": "^0.1.4",
62
- "jotai": "^2",
63
- "next": "^15",
64
- "react": "^19",
65
- "react-dom": "^19",
66
- "react-hook-form": "^7",
38
+ "@tanstack/react-query": ">=5 <6",
39
+ "@uniai-fe/uds-foundation": "^0.4.8 || ^0.5.0",
40
+ "@uniai-fe/uds-primitives": "^0.8.0 || ^0.9.0",
41
+ "@uniai-fe/util-api": "^0.1.15 || ^0.2.0",
42
+ "@uniai-fe/util-functions": "^0.3.0 || ^0.4.0",
43
+ "@uniai-fe/util-jotai": "^0.1.9 || ^0.2.0",
44
+ "@uniai-fe/util-next": "^0.3.0 || ^0.4.0",
45
+ "@uniai-fe/util-rtc": "^0.1.4 || ^0.2.0",
46
+ "jotai": ">=2 <3",
47
+ "next": ">=15 <16",
48
+ "react": ">=19 <20",
49
+ "react-dom": ">=19 <20",
50
+ "react-hook-form": ">=7 <8",
67
51
  "clsx": "^2.1.1"
68
52
  },
69
53
  "dependencies": {
@@ -76,23 +60,45 @@
76
60
  "@types/node": "^24.12.3",
77
61
  "@types/react": "^19.2.17",
78
62
  "@types/react-dom": "^19.2.3",
79
- "@uniai-fe/eslint-config": "workspace:*",
80
- "@uniai-fe/next-devkit": "workspace:*",
81
- "@uniai-fe/react-hooks": "workspace:*",
82
- "@uniai-fe/tsconfig": "workspace:*",
83
- "@uniai-fe/uds-foundation": "workspace:*",
84
- "@uniai-fe/uds-primitives": "workspace:*",
85
- "@uniai-fe/util-api": "workspace:*",
86
- "@uniai-fe/util-functions": "workspace:*",
87
- "@uniai-fe/util-jotai": "workspace:*",
88
- "@uniai-fe/util-next": "workspace:*",
89
- "@uniai-fe/util-rtc": "workspace:*",
90
63
  "eslint": "^9.39.2",
91
64
  "jotai": "^2.20.1",
92
65
  "next": "^15.5.18",
93
66
  "prettier": "^3.8.4",
94
67
  "react-hook-form": "^7.80.0",
95
68
  "sass": "^1.101.0",
96
- "typescript": "5.9.3"
69
+ "typescript": "6.0.3",
70
+ "@uniai-fe/uds-primitives": "0.9.1",
71
+ "@uniai-fe/util-api": "0.2.1",
72
+ "@uniai-fe/next-devkit": "0.3.0",
73
+ "@uniai-fe/util-functions": "0.4.0",
74
+ "@uniai-fe/tsconfig": "0.2.0",
75
+ "@uniai-fe/util-jotai": "0.2.0",
76
+ "@uniai-fe/uds-foundation": "0.5.0",
77
+ "@uniai-fe/react-hooks": "0.2.0",
78
+ "@uniai-fe/eslint-config": "0.2.0",
79
+ "@uniai-fe/util-rtc": "0.2.0",
80
+ "@uniai-fe/util-next": "0.4.1"
81
+ },
82
+ "scripts": {
83
+ "check:pre-commit": "pnpm --dir ../../.. run check:pre-commit",
84
+ "check:pre-push": "pnpm --dir ../../.. run check:pre-push",
85
+ "check:pre-push:dry-run": "pnpm --dir ../../.. run check:pre-push:dry-run",
86
+ "format": "prettier --write .",
87
+ "format:fix": "pnpm format",
88
+ "format:check": "prettier --check .",
89
+ "lint": "eslint . --max-warnings=0",
90
+ "typecheck": "tsc --project tsconfig.build.json --noEmit",
91
+ "build": "pnpm format && pnpm typecheck && pnpm css:build && pnpm format",
92
+ "css:build": "sass --load-path=node_modules src/index.scss dist/styles.css --style=expanded --no-source-map && node ./scripts/merge-theme-root.mjs dist/styles.css --selector=:root",
93
+ "dev": "tsc --project tsconfig.build.json --watch --noEmit",
94
+ "module:lint": "pnpm lint",
95
+ "module:typecheck": "pnpm typecheck",
96
+ "module:build": "pnpm build",
97
+ "design-templates:build": "pnpm run build",
98
+ "design-templates:dev": "pnpm run dev",
99
+ "publish:public": "bash ../../../scripts/npm-publish.sh",
100
+ "check:manifest": "node ../../../scripts/workspace-manifests.mjs --check",
101
+ "sync:manifest": "node ../../../scripts/workspace-manifests.mjs --write",
102
+ "check": "pnpm run check:manifest && pnpm run format:check && pnpm run lint && pnpm run typecheck"
97
103
  }
98
- }
104
+ }
@@ -3,8 +3,6 @@
3
3
  import { useCallback, useEffect } from "react";
4
4
  import { useWatch } from "react-hook-form";
5
5
  import type {
6
- AuthSignupFormValues,
7
- AuthSignupTypeSelectValues,
8
6
  AuthSignupTypeValue,
9
7
  UseSignupTypeSelectFormOptions,
10
8
  UseSignupTypeSelectFormReturn,
@@ -27,17 +27,19 @@ export function useServiceInquiryUserContext(): UseServiceInquiryUserContextRetu
27
27
  const [additionalUserContext, setAdditionalUserContext] = useAtom(
28
28
  serviceInquiryAdditionalUserContextAtom,
29
29
  );
30
- const resolvedRequestContext = useMemo(
31
- () => ({
30
+ const routeChangeSignal = `${pathname ?? ""}?${searchParams.toString()}`;
31
+ const resolvedRequestContext = useMemo(() => {
32
+ void routeChangeSignal;
33
+
34
+ return {
32
35
  ...requestContext,
33
36
  // 변경 설명: route 이동 후에도 문의 submit 시점의 현재 URL이 page_path로 반영되도록 route 변화에 맞춰 snapshot을 새로 만든다.
34
37
  page_path:
35
38
  typeof window === "undefined"
36
39
  ? requestContext.page_path
37
40
  : window.location.href,
38
- }),
39
- [pathname, requestContext, searchParams],
40
- );
41
+ };
42
+ }, [requestContext, routeChangeSignal]);
41
43
 
42
44
  /** 2) submit/액션 — trigger별 추가 context를 append/reset 할 수 있게 연다. */
43
45
  const setNextAdditionalUserContext: UseServiceInquiryUserContextReturn["setAdditionalUserContext"] =