@uniai-fe/uds-templates 0.1.26 → 0.1.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -43,6 +43,36 @@
43
43
  var(--spacing-padding-9, 32px) + env(safe-area-inset-top, 0px)
44
44
  );
45
45
  --auth-container-padding-bottom: var(--spacing-padding-10, 40px);
46
+ /* Card layout */
47
+ --cctv-video-radius: 12px;
48
+ --cctv-list-gap: var(--spacing-gap-5);
49
+ --cctv-overlay-padding-x: var(--spacing-padding-8);
50
+ --cctv-overlay-padding-y: var(--spacing-padding-6);
51
+ --cctv-video-bg: #5f5f5f;
52
+ --cctv-overlay-bg: linear-gradient(
53
+ 180deg,
54
+ rgba(0, 0, 0, 0) 0%,
55
+ rgba(0, 0, 0, 0.2) 100%
56
+ );
57
+ /* Live State */
58
+ --cctv-live-state-bg-active: var(--color-cool-gray-10);
59
+ --cctv-live-state-dot-active: var(--color-feedback-new);
60
+ --cctv-live-state-text-active: var(--color-common-99);
61
+ --cctv-live-state-bg-disabled: var(--color-cool-gray-55);
62
+ --cctv-live-state-dot-disabled: var(--color-border-strong);
63
+ --cctv-live-state-text-disabled: var(--color-label-disabled);
64
+ /* Error */
65
+ --cctv-error-text-color: var(--color-label-disabled);
66
+ --cctv-error-icon-color: var(--color-label-disabled);
67
+ /* Pagination */
68
+ --cctv-carousel-gap: var(--spacing-gap-5);
69
+ --cctv-pagination-move-button-size: 48px;
70
+ --cctv-pagination-move-button-active: var(--color-cool-gray-20);
71
+ --cctv-pagination-move-button-disabled: var(--color-cool-gray-85);
72
+ /* Controls */
73
+ --cctv-open-button-bg: rgba(0, 0, 0, 0.55);
74
+ --cctv-open-button-color: #ffffff;
75
+ --cctv-close-button-bg: rgba(0, 0, 0, 0.45);
46
76
  }
47
77
 
48
78
  /* templates styles는 foundation/primitives 순으로 import된 이후를 가정한다. */
@@ -957,3 +987,251 @@
957
987
  .weather-next-days-text dd:nth-of-type(n + 2) .unit {
958
988
  font-size: 1rem;
959
989
  }
990
+
991
+
992
+
993
+ .cctv-video-container {
994
+ position: relative;
995
+ width: 100%;
996
+ aspect-ratio: 4/3;
997
+ min-height: 240px;
998
+ border-radius: var(--cctv-video-radius);
999
+ background: var(--cctv-video-bg);
1000
+ }
1001
+
1002
+ .cctv-video-box {
1003
+ width: 100%;
1004
+ height: 100%;
1005
+ }
1006
+
1007
+ .cctv-video-box video {
1008
+ width: 100%;
1009
+ height: 100%;
1010
+ margin: 0;
1011
+ display: block;
1012
+ object-fit: contain;
1013
+ }
1014
+
1015
+ .cctv-video-overlay-container {
1016
+ padding: var(--cctv-overlay-padding-y) var(--cctv-overlay-padding-x);
1017
+ position: absolute;
1018
+ inset: 0;
1019
+ z-index: 1;
1020
+ display: flex;
1021
+ flex-direction: column;
1022
+ background: var(--cctv-overlay-bg);
1023
+ }
1024
+
1025
+ .cctv-video-overlay-header {
1026
+ width: 100%;
1027
+ height: fit-content;
1028
+ }
1029
+
1030
+ .cctv-video-overlay-header-upper,
1031
+ .cctv-video-overlay-header-lower {
1032
+ display: flex;
1033
+ align-items: center;
1034
+ justify-content: space-between;
1035
+ }
1036
+
1037
+ .cctv-video-live-state {
1038
+ --theme-badge-font-weight: 400;
1039
+ margin-right: 4px;
1040
+ }
1041
+
1042
+ .cctv-video-live-state-dot {
1043
+ width: 4px;
1044
+ height: 4px;
1045
+ margin-right: 4px;
1046
+ border-radius: 4px;
1047
+ background: var(--cctv-live-state-dot-active);
1048
+ }
1049
+
1050
+ .cctv-video-live-state:where(.disabled) {
1051
+ --badge-fill-bg-color: var(--cctv-live-state-bg-disabled);
1052
+ --badge-fill-label-color: var(--cctv-live-state-text-disabled);
1053
+ }
1054
+ .cctv-video-live-state:where(.disabled) .cctv-video-live-state-dot {
1055
+ background: var(--cctv-live-state-dot-disabled);
1056
+ }
1057
+
1058
+ .cctv-video-close-button {
1059
+ width: 36px;
1060
+ height: 36px;
1061
+ border-radius: 50%;
1062
+ font-size: 0;
1063
+ border: none;
1064
+ display: flex;
1065
+ align-items: center;
1066
+ justify-content: center;
1067
+ cursor: pointer;
1068
+ }
1069
+
1070
+ .cctv-video-overlay-title {
1071
+ font-weight: 600;
1072
+ color: var(--color-common-99);
1073
+ line-height: 1.5em;
1074
+ }
1075
+
1076
+ .cctv-video-header-title {
1077
+ font-size: var(--font-heading-large-size);
1078
+ }
1079
+
1080
+ .cctv-video-footer-title {
1081
+ font-size: var(--font-heading-xsmall-size);
1082
+ }
1083
+
1084
+ .cctv-video-overlay-body {
1085
+ width: 100%;
1086
+ flex: 1;
1087
+ display: flex;
1088
+ flex-direction: column;
1089
+ align-items: center;
1090
+ justify-content: center;
1091
+ }
1092
+
1093
+ .cctv-video-error {
1094
+ display: flex;
1095
+ flex-direction: column;
1096
+ align-items: center;
1097
+ justify-content: center;
1098
+ }
1099
+
1100
+ .cctv-video-error-icon {
1101
+ margin-bottom: 2px;
1102
+ fill: var(--cctv-error-icon-color);
1103
+ }
1104
+
1105
+ .cctv-video-error-message {
1106
+ font-size: 13px;
1107
+ color: var(--cctv-error-text-color);
1108
+ line-height: 1.5em;
1109
+ font-weight: 600;
1110
+ }
1111
+
1112
+ .cctv-video-status-text {
1113
+ font-size: 12px;
1114
+ color: var(--cctv-text-muted);
1115
+ }
1116
+
1117
+ .cctv-video-overlay-footer {
1118
+ display: flex;
1119
+ align-items: center;
1120
+ justify-content: space-between;
1121
+ gap: 8px;
1122
+ margin-top: auto;
1123
+ }
1124
+
1125
+ .cctv-video-open-button {
1126
+ display: flex;
1127
+ align-items: center;
1128
+ justify-content: center;
1129
+ cursor: pointer;
1130
+ }
1131
+
1132
+ .cctv-cam-list-container {
1133
+ width: 100%;
1134
+ height: 100%;
1135
+ overflow-x: hidden;
1136
+ overflow-y: scroll;
1137
+ scroll-snap-type: y proximity;
1138
+ scrollbar-width: none;
1139
+ -ms-overflow-style: none;
1140
+ }
1141
+ .cctv-cam-list-container::-webkit-scrollbar {
1142
+ display: none;
1143
+ }
1144
+
1145
+ .cctv-cam-list-track {
1146
+ display: grid;
1147
+ width: 100%;
1148
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
1149
+ gap: var(--cctv-list-gap);
1150
+ padding: 0;
1151
+ margin: 0;
1152
+ scroll-behavior: smooth;
1153
+ }
1154
+ .cctv-cam-list-track > * {
1155
+ scroll-snap-align: start;
1156
+ }
1157
+
1158
+ .cctv-cam-list-item .cctv-video-container {
1159
+ max-height: 240px;
1160
+ }
1161
+
1162
+ .cctv-pagination-container {
1163
+ width: 100%;
1164
+ display: flex;
1165
+ align-items: center;
1166
+ gap: var(--cctv-carousel-gap);
1167
+ }
1168
+
1169
+ .cctv-pagination-list-container {
1170
+ width: calc(100% - var(--cctv-pagination-move-button-size) * 2 - var(--cctv-carousel-gap) * 2);
1171
+ }
1172
+
1173
+ .cctv-pagination-viewport {
1174
+ overflow-x: auto;
1175
+ overflow-y: hidden;
1176
+ width: 100%;
1177
+ scroll-snap-type: x proximity;
1178
+ scrollbar-width: none;
1179
+ -ms-overflow-style: none;
1180
+ }
1181
+ .cctv-pagination-viewport::-webkit-scrollbar {
1182
+ display: none;
1183
+ }
1184
+
1185
+ .cctv-pagination-track {
1186
+ display: flex;
1187
+ gap: var(--cctv-carousel-gap);
1188
+ margin: 0;
1189
+ padding: 0;
1190
+ list-style: none;
1191
+ scroll-behavior: smooth;
1192
+ }
1193
+ .cctv-pagination-track > * {
1194
+ scroll-snap-align: start;
1195
+ }
1196
+
1197
+ .cctv-pagination-track > li {
1198
+ flex: 0 0 minmax(150px, 1fr);
1199
+ }
1200
+
1201
+ .cctv-pagination-list-item {
1202
+ cursor: pointer;
1203
+ }
1204
+
1205
+ .cctv-pagination-list-item .cctv-video-container {
1206
+ max-height: 152px;
1207
+ }
1208
+
1209
+ .cctv-pagination-list-thumbnail {
1210
+ width: 100%;
1211
+ height: 100%;
1212
+ }
1213
+
1214
+ .cctv-pagination-move-button {
1215
+ width: var(--cctv-pagination-move-button-size);
1216
+ height: var(--cctv-pagination-move-button-size);
1217
+ border-radius: var(--cctv-pagination-move-button-size);
1218
+ display: flex;
1219
+ align-items: center;
1220
+ justify-content: center;
1221
+ cursor: pointer;
1222
+ background: var(--cctv-pagination-move-button-active);
1223
+ }
1224
+ .cctv-pagination-move-button.disabled {
1225
+ background: var(--cctv-pagination-move-button-disabled);
1226
+ }
1227
+ .cctv-pagination-move-button:disabled {
1228
+ background: var(--cctv-pagination-move-button-disabled);
1229
+ }
1230
+
1231
+ .cctv-viewer-desktop-video-container {
1232
+ max-height: 500px;
1233
+ }
1234
+
1235
+ .cctv-viewer-desktop-pagination-container {
1236
+ margin-top: var(--spacing-gap-8);
1237
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniai-fe/uds-templates",
3
- "version": "0.1.26",
3
+ "version": "0.1.27",
4
4
  "description": "UNIAI Design System; UI Templates Package",
5
5
  "type": "module",
6
6
  "private": false,
package/src/index.scss CHANGED
@@ -12,4 +12,5 @@
12
12
  @use "./auth/find-id/index.scss" as authFindId;
13
13
  @use "./auth/find-password/index.scss" as authFindPassword;
14
14
  @use "./auth/signup/styles/signup.scss" as authSignup;
15
- @use "./weather/styles/weather.scss" as weatherStyles;
15
+ @use "./weather/index.scss" as weatherStyles;
16
+ @use "./cctv/index.scss" as cctvStyles;
@@ -0,0 +1 @@
1
+ @use "./styles/weather.scss";