@nine-lab/nine-ux 0.1.142 → 0.1.144

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.
@@ -2,6 +2,8 @@
2
2
 
3
3
  /* ==========================================================================
4
4
  [MAIN INTEGRATED SIDE MENU COMPONENT]
5
+ 부모가 Shadow DOM이므로 최상단은 :host로 시작해야 외부 분리 파일에서도
6
+ 컴포넌트 자체를 정상적으로 인식합니다.
5
7
  ========================================================================== */
6
8
  :host(nine-side-menu) {
7
9
  opacity: 0.95;
@@ -35,7 +37,7 @@
35
37
  animation: nineMenuBounce 0.5s ease-in-out 1;
36
38
  }
37
39
 
38
- /* 본문 스크롤 감싸는 영역 */
40
+ /* 본문 스크롤 감싸는 영역 (Shadow DOM 내부 div) */
39
41
  .body-wrapper {
40
42
  display: flex;
41
43
  flex-direction: column;
@@ -48,7 +50,7 @@
48
50
  /* --------------------------------------------------------------------------
49
51
  [1] 헤더 영역 (nine-side-menu-head)
50
52
  -------------------------------------------------------------------------- */
51
- nine-side-menu-head {
53
+ & ::slotted(nine-side-menu-head) {
52
54
  display: flex;
53
55
  align-items: center;
54
56
  padding: 10px;
@@ -84,35 +86,36 @@
84
86
  }
85
87
 
86
88
  /* 헤더 상태별 유기적 스위칭 명세 */
87
- &.collapse nine-side-menu-head .logo-box {
89
+ &.collapse ::slotted(nine-side-menu-head) .logo-box {
88
90
  width: 0;
89
91
  justify-content: center;
90
92
  transition: width 0.5s ease-out;
91
93
  }
92
- &.collapse.hover nine-side-menu-head .logo-box,
93
- &:not(.collapse) nine-side-menu-head .logo-box {
94
+ &.collapse.hover ::slotted(nine-side-menu-head) .logo-box,
95
+ &:not(.collapse) ::slotted(nine-side-menu-head) .logo-box {
94
96
  width: 100%;
95
97
  justify-content: space-between;
96
98
  }
97
99
 
98
- &.collapse nine-side-menu-head .icon:nth-of-type(1) {
100
+ &.collapse ::slotted(nine-side-menu-head) .icon:nth-of-type(1) {
99
101
  display: block;
100
102
  opacity: 1;
101
103
  }
104
+
102
105
  &:not(.collapse) {
103
- nine-side-menu-head .icon:nth-of-type(1) {
106
+ ::slotted(nine-side-menu-head) .icon:nth-of-type(1) {
104
107
  display: none;
105
108
  opacity: 0;
106
109
  }
107
- nine-side-menu-head .icon:nth-of-type(2) {
110
+ ::slotted(nine-side-menu-head) .icon:nth-of-type(2) {
108
111
  display: block;
109
112
  opacity: 1;
110
113
  }
111
- nine-side-menu-head .icon:nth-of-type(3) {
114
+ ::slotted(nine-side-menu-head) .icon:nth-of-type(3) {
112
115
  display: none;
113
116
  opacity: 0;
114
117
  }
115
- nine-side-menu-head .icon-box:hover {
118
+ ::slotted(nine-side-menu-head) .icon-box:hover {
116
119
  .icon:nth-of-type(2) {
117
120
  display: none;
118
121
  opacity: 0;
@@ -127,7 +130,7 @@
127
130
  /* --------------------------------------------------------------------------
128
131
  [2] 바디 컨테이너 영역 (nine-side-menu-body)
129
132
  -------------------------------------------------------------------------- */
130
- nine-side-menu-body {
133
+ & ::slotted(nine-side-menu-body) {
131
134
  display: flex;
132
135
  align-items: center;
133
136
  padding: 10px;
@@ -137,7 +140,7 @@
137
140
  /* --------------------------------------------------------------------------
138
141
  [3] 푸터 영역 (nine-side-menu-foot)
139
142
  -------------------------------------------------------------------------- */
140
- nine-side-menu-foot {
143
+ & ::slotted(nine-side-menu-foot) {
141
144
  display: flex;
142
145
  align-items: center;
143
146
  padding: 10px;
@@ -173,35 +176,36 @@
173
176
  }
174
177
 
175
178
  /* 푸터 상태별 유기적 스위칭 명세 */
176
- &.collapse nine-side-menu-foot .logo-box {
179
+ &.collapse ::slotted(nine-side-menu-foot) .logo-box {
177
180
  width: 0;
178
181
  justify-content: center;
179
182
  transition: width 0.5s ease-out;
180
183
  }
181
- &.collapse.hover nine-side-menu-foot .logo-box,
182
- &:not(.collapse) nine-side-menu-foot .logo-box {
184
+ &.collapse.hover ::slotted(nine-side-menu-foot) .logo-box,
185
+ &:not(.collapse) ::slotted(nine-side-menu-foot) .logo-box {
183
186
  width: 100%;
184
187
  justify-content: space-between;
185
188
  }
186
189
 
187
- &.collapse nine-side-menu-foot .icon:nth-of-type(1) {
190
+ &.collapse ::slotted(nine-side-menu-foot) .icon:nth-of-type(1) {
188
191
  display: block;
189
192
  opacity: 1;
190
193
  }
194
+
191
195
  &:not(.collapse) {
192
- nine-side-menu-foot .icon:nth-of-type(1) {
196
+ ::slotted(nine-side-menu-foot) .icon:nth-of-type(1) {
193
197
  display: none;
194
198
  opacity: 0;
195
199
  }
196
- nine-side-menu-foot .icon:nth-of-type(2) {
200
+ ::slotted(nine-side-menu-foot) .icon:nth-of-type(2) {
197
201
  display: block;
198
202
  opacity: 1;
199
203
  }
200
- nine-side-menu-foot .icon:nth-of-type(3) {
204
+ ::slotted(nine-side-menu-foot) .icon:nth-of-type(3) {
201
205
  display: none;
202
206
  opacity: 0;
203
207
  }
204
- nine-side-menu-foot .icon-box:hover {
208
+ ::slotted(nine-side-menu-foot) .icon-box:hover {
205
209
  .icon:nth-of-type(2) {
206
210
  display: none;
207
211
  opacity: 0;
@@ -216,7 +220,7 @@
216
220
  /* --------------------------------------------------------------------------
217
221
  [4] 메뉴 아이템 목록 영역 (nine-side-menu-item)
218
222
  -------------------------------------------------------------------------- */
219
- nine-side-menu-item {
223
+ & ::slotted(nine-side-menu-item) {
220
224
  padding: 0;
221
225
  margin: 0;
222
226
  position: relative;
@@ -341,24 +345,24 @@
341
345
 
342
346
  /* 아이템 상태별 축소 명세 */
343
347
  &.collapse:not(.hover) {
344
- nine-side-menu-item:not(.group) {
348
+ ::slotted(nine-side-menu-item:not(.group)) {
345
349
  opacity: 0;
346
350
  height: 0;
347
351
  }
348
- nine-side-menu-item .menubar {
352
+ ::slotted(nine-side-menu-item) .menubar {
349
353
  width: 0;
350
354
  padding-left: unset;
351
355
  display: none;
352
356
  }
353
- nine-side-menu-item li {
357
+ ::slotted(nine-side-menu-item) li {
354
358
  justify-content: center;
355
359
  }
356
- nine-side-menu-item .icon {
360
+ ::slotted(nine-side-menu-item) .icon {
357
361
  width: 20px;
358
362
  height: 20px;
359
363
  margin-left: 4px;
360
364
  }
361
- nine-side-menu-item .expand-icon {
365
+ ::slotted(nine-side-menu-item) .expand-icon {
362
366
  display: none;
363
367
  }
364
368
  }
@@ -366,7 +370,14 @@
366
370
 
367
371
  /* ==========================================================================
368
372
  [GLOBAL KEYFRAMES]
373
+ 키프레임 애니메이션은 중첩 안쪽에 있으면 동작하지 않으므로 바깥에 둡니다.
369
374
  ========================================================================== */
375
+ @keyframes nineMenuBounce {
376
+ 0%, 20%, 50%, 80%, 100% { transform: translateX(0); }
377
+ 40% { transform: translateX(-10px); }
378
+ 60% { left: -10px; transform: translateX(10px); }
379
+ }
380
+
370
381
  @keyframes nineMenuRotateIn {
371
382
  from { transform: rotate(0deg); }
372
383
  to { transform: rotate(180deg); }