@iyulab/modern-app 0.33.1 → 0.33.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.
- package/CHANGELOG.md +20 -0
- package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.152.0}/helpers/esm/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.152.0}/helpers/esm/decorateMetadata.js +1 -1
- package/dist/components/ActionBar.js +2 -2
- package/dist/components/EmptyState.js +2 -2
- package/dist/components/GroupBox.js +2 -2
- package/dist/components/InfoField.js +2 -2
- package/dist/components/InfoSection.js +2 -2
- package/dist/components/MasterDetailLayout.js +2 -2
- package/dist/components/PageHeader.js +2 -2
- package/dist/components/SidebarButton.js +2 -2
- package/dist/components/SidebarButton.styles.js +1 -1
- package/dist/components/SidebarGroup.js +2 -2
- package/dist/components/SidebarGroup.styles.js +3 -3
- package/dist/components/SidebarLink.js +2 -2
- package/dist/components/SidebarLink.styles.js +1 -1
- package/dist/components/SidebarSection.js +2 -2
- package/dist/components/Wizard.js +2 -2
- package/dist/internals/StyledElement.js +2 -2
- package/dist/layouts/SidebarLayout.js +2 -2
- package/dist/layouts/SidebarLayout.styles.js +18 -3
- package/package.json +1 -1
- package/skills/modern-app/references/layout.md +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.33.3] - 2026-10-05
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- **The sidebar stays on screen while a long screen scrolls.** The shell is now capped at the
|
|
8
|
+
viewport height (`max-height: 100dvh`), so route content always scrolls inside `part="main"`.
|
|
9
|
+
Before, a shell whose parent gave it no height grew to the length of the route content; the
|
|
10
|
+
document scrolled instead of `part="main"`, and the navigation and the sidebar footer scrolled off
|
|
11
|
+
the top with the content (the mobile header too). A parent that gives the shell a height lower
|
|
12
|
+
than the viewport still sets it.
|
|
13
|
+
|
|
14
|
+
## [0.33.2] - 2026-10-03
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **Sidebar transitions follow the motion tokens**, so the sidebar's open/close, group expand and
|
|
19
|
+
hover transitions stop for users who prefer reduced motion (`--u-duration-*` from
|
|
20
|
+
`@iyulab/components` drops to zero under `prefers-reduced-motion: reduce`). The slide-in moves from
|
|
21
|
+
300ms to the scale's `slow` step (320ms).
|
|
22
|
+
|
|
3
23
|
## [0.33.1] - 2026-09-30
|
|
4
24
|
|
|
5
25
|
### Fixed
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.152.0/helpers/esm/decorate.js
|
|
2
2
|
function e(e, t, n, r) {
|
|
3
3
|
var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
|
|
4
4
|
if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.152.0/helpers/esm/decorateMetadata.js
|
|
2
2
|
function e(e, t) {
|
|
3
3
|
if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
|
|
4
4
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { styles as i } from "./ActionBar.styles.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { getLocaleStrings as r } from "../internals/locale.js";
|
|
5
5
|
import { slotHasContent as i } from "../internals/slotted.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { slotHasContent as r } from "../internals/slotted.js";
|
|
5
5
|
import { styles as i } from "./GroupBox.styles.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { styles as r } from "./InfoField.styles.js";
|
|
5
5
|
import { html as i } from "lit";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { styles as r } from "./InfoSection.styles.js";
|
|
5
5
|
import { html as i } from "lit";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { getLocaleStrings as r } from "../internals/locale.js";
|
|
5
5
|
import { slotHasContent as i } from "../internals/slotted.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { getLocaleStrings as r } from "../internals/locale.js";
|
|
5
5
|
import { slotHasContent as i } from "../internals/slotted.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { DEFAULT_NAV_ICON as r } from "../internals/nav-icon.js";
|
|
5
5
|
import { styles as i } from "./SidebarButton.styles.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { DEFAULT_NAV_ICON as r } from "../internals/nav-icon.js";
|
|
5
5
|
import { SidebarLink as i } from "./SidebarLink.js";
|
|
@@ -22,7 +22,7 @@ var t = e`
|
|
|
22
22
|
background-color: transparent;
|
|
23
23
|
border: none;
|
|
24
24
|
border-radius: 8px;
|
|
25
|
-
transition: all
|
|
25
|
+
transition: all var(--u-duration-normal, 220ms) ease;
|
|
26
26
|
cursor: pointer;
|
|
27
27
|
}
|
|
28
28
|
button[compact] {
|
|
@@ -71,7 +71,7 @@ var t = e`
|
|
|
71
71
|
.caret {
|
|
72
72
|
color: inherit;
|
|
73
73
|
font-size: 16px !important;
|
|
74
|
-
transition: transform
|
|
74
|
+
transition: transform var(--u-duration-normal, 220ms) ease;
|
|
75
75
|
}
|
|
76
76
|
.caret[collapsed] {
|
|
77
77
|
transform: rotate(-90deg);
|
|
@@ -86,7 +86,7 @@ var t = e`
|
|
|
86
86
|
border-left: 2px solid var(--u-border-color-weak, #EEEEEE);
|
|
87
87
|
padding-left: 8px;
|
|
88
88
|
overflow: hidden;
|
|
89
|
-
transition: all
|
|
89
|
+
transition: all var(--u-duration-slow, 320ms) ease;
|
|
90
90
|
}
|
|
91
91
|
.items[collapsed] {
|
|
92
92
|
margin-top: 0;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { getLocaleStrings as r } from "../internals/locale.js";
|
|
5
5
|
import { DEFAULT_NAV_ICON as i } from "../internals/nav-icon.js";
|
|
@@ -12,7 +12,7 @@ var t = e`
|
|
|
12
12
|
color: var(--app-sidebar-fg, var(--u-txt-color, #212121));
|
|
13
13
|
background-color: transparent;
|
|
14
14
|
border-radius: 8px;
|
|
15
|
-
transition: all
|
|
15
|
+
transition: all var(--u-duration-normal, 220ms) ease;
|
|
16
16
|
cursor: pointer;
|
|
17
17
|
}
|
|
18
18
|
:host(:hover) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { styles as r } from "./SidebarSection.styles.js";
|
|
5
5
|
import { html as i } from "lit";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { StyledElement as n } from "../internals/StyledElement.js";
|
|
4
4
|
import { getLocaleStrings as r } from "../internals/locale.js";
|
|
5
5
|
import { styles as i } from "./Wizard.styles.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import e from "../_virtual/_@oxc-project_runtime@0.
|
|
2
|
-
import t from "../_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import e from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
2
|
+
import t from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
3
3
|
import { property as n } from "lit/decorators.js";
|
|
4
4
|
import { UElement as r } from "@iyulab/components/dist/components/UElement.js";
|
|
5
5
|
//#region src/internals/StyledElement.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { app as e } from "../App.js";
|
|
2
2
|
import { filterSidebarItems as t } from "./filterSidebarItems.js";
|
|
3
|
-
import n from "../_virtual/_@oxc-project_runtime@0.
|
|
4
|
-
import r from "../_virtual/_@oxc-project_runtime@0.
|
|
3
|
+
import n from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorateMetadata.js";
|
|
4
|
+
import r from "../_virtual/_@oxc-project_runtime@0.152.0/helpers/esm/decorate.js";
|
|
5
5
|
import { StyledElement as i } from "../internals/StyledElement.js";
|
|
6
6
|
import { getLocaleStrings as a } from "../internals/locale.js";
|
|
7
7
|
import { slotHasContent as o } from "../internals/slotted.js";
|
|
@@ -7,6 +7,11 @@ var t = e`
|
|
|
7
7
|
flex-direction: row;
|
|
8
8
|
width: 100%;
|
|
9
9
|
height: 100%;
|
|
10
|
+
/* 셸은 뷰포트보다 커지지 않는다 — 부모에 높이가 없으면 height: 100% 가 걸릴 곳이 없어 셸이
|
|
11
|
+
본문 길이로 커지고, 그러면 .main 대신 문서가 스크롤해 사이드바가 본문과 함께 밀려 나간다.
|
|
12
|
+
상한을 두면 본문은 언제나 .main 안에서 스크롤하고 크롬은 제자리에 있다. 부모가 뷰포트보다
|
|
13
|
+
낮은 높이를 주면 그 높이가 그대로 이긴다. */
|
|
14
|
+
max-height: 100dvh;
|
|
10
15
|
font-family: var(--u-font-base);
|
|
11
16
|
overflow: hidden;
|
|
12
17
|
}
|
|
@@ -117,7 +122,7 @@ var t = e`
|
|
|
117
122
|
background: var(--app-sidebar-bg, var(--u-bg-color-raised, #FAFAFA));
|
|
118
123
|
color: var(--app-sidebar-fg, var(--u-txt-color, #212121));
|
|
119
124
|
border-right: 1px solid var(--u-border-color, #E0E0E0);
|
|
120
|
-
transition: all
|
|
125
|
+
transition: all var(--u-duration-slow, 320ms) ease;
|
|
121
126
|
}
|
|
122
127
|
/* Sidebar states */
|
|
123
128
|
.sidebar[state="default"] {
|
|
@@ -225,11 +230,17 @@ var t = e`
|
|
|
225
230
|
뷰포트 밖으로 밀어 오른쪽 열이 잘리고 가로 스크롤도 생기지 않는다. */
|
|
226
231
|
min-height: 0;
|
|
227
232
|
min-width: 0;
|
|
233
|
+
/* .main 의 높이를 백분율이 아니라 flex 로 준다 — 셸의 높이가 «부모의 확정 높이» 가 아니라
|
|
234
|
+
max-height 상한에서 나올 때 백분율은 풀리지 않는다(auto 로 떨어져 .main 이 본문 길이가 된다).
|
|
235
|
+
늘어난(stretch) 항목의 크기는 그 경우에도 이 래퍼에 정해진다. */
|
|
236
|
+
display: flex;
|
|
237
|
+
flex-direction: column;
|
|
228
238
|
}
|
|
229
239
|
|
|
230
240
|
.main {
|
|
231
241
|
position: relative;
|
|
232
|
-
|
|
242
|
+
flex: 1 1 auto;
|
|
243
|
+
min-height: 0;
|
|
233
244
|
padding: var(--u-space-3xl, 32px);
|
|
234
245
|
background: var(--u-bg-color, #FFFFFF);
|
|
235
246
|
overflow: auto;
|
|
@@ -327,7 +338,7 @@ var t = e`
|
|
|
327
338
|
right: 0;
|
|
328
339
|
opacity: 0;
|
|
329
340
|
transform: translateY(-4px);
|
|
330
|
-
transition: opacity
|
|
341
|
+
transition: opacity var(--u-duration-slow, 320ms) ease, transform var(--u-duration-slow, 320ms) ease;
|
|
331
342
|
pointer-events: none;
|
|
332
343
|
}
|
|
333
344
|
.main u-progress-bar[visible] {
|
|
@@ -377,6 +388,7 @@ var t = e`
|
|
|
377
388
|
:host {
|
|
378
389
|
display: block;
|
|
379
390
|
height: auto;
|
|
391
|
+
max-height: none;
|
|
380
392
|
overflow: visible;
|
|
381
393
|
}
|
|
382
394
|
.sidebar,
|
|
@@ -385,7 +397,10 @@ var t = e`
|
|
|
385
397
|
.main u-progress-bar {
|
|
386
398
|
display: none;
|
|
387
399
|
}
|
|
400
|
+
/* block 으로 되돌린다 — flex 컨테이너는 자식의 여백 접힘을 막아, 화면 마지막 블록의 아래
|
|
401
|
+
여백이 종이 위에서 셸을 뚫고 접히지 못한다. */
|
|
388
402
|
.main-region {
|
|
403
|
+
display: block;
|
|
389
404
|
height: auto;
|
|
390
405
|
}
|
|
391
406
|
.main {
|
package/package.json
CHANGED
|
@@ -275,7 +275,10 @@ Parts available for `styles` overrides on the root layout:
|
|
|
275
275
|
## Sizing
|
|
276
276
|
|
|
277
277
|
`<u-sidebar-layout>` is a shell: `:host` is `height: 100%` with `overflow: hidden`, so **its
|
|
278
|
-
height comes from the parent** — it never sizes itself.
|
|
278
|
+
height comes from the parent** — it never sizes itself. It is also capped at `max-height: 100dvh`:
|
|
279
|
+
whatever the parent does, the shell is never taller than the viewport, so the route content always
|
|
280
|
+
scrolls inside `part="main"` and the sidebar (navigation and footer) stays on screen. A parent
|
|
281
|
+
shorter than the viewport still wins. `app.load()` covers the default case: when
|
|
279
282
|
`root` is `document.body` it gives the body `margin: 0`, and on screen `width: 100vw; height: 100vh`.
|
|
280
283
|
These come from a document stylesheet at zero specificity, not inline styles — any `body { … }`
|
|
281
284
|
rule of your own wins.
|
|
@@ -283,7 +286,8 @@ rule of your own wins.
|
|
|
283
286
|
⚠ **A custom `root` receives no styling.** Hand it a container with no height of its own and
|
|
284
287
|
`height: 100%` has nothing to resolve against: the shell renders at whatever its own chrome
|
|
285
288
|
resolves to (measured: about 133px) instead of filling the screen — with no error and nothing in
|
|
286
|
-
the console.
|
|
289
|
+
the console. (With a long screen the shell grows to the viewport cap instead, so the
|
|
290
|
+
symptom only shows on short screens.) Give that container a height — for screen only, so printing is not cut at one page:
|
|
287
291
|
|
|
288
292
|
```css
|
|
289
293
|
@media screen {
|