@iyulab/modern-app 0.28.1 β 0.29.0
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
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.29.0] - 2026-09-27
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- π΄ **A filling screen with a long table works again β do not use 0.28.2.** 0.28.2 made the
|
|
8
|
+
`main-content` wrapper a grid box with `min-height: 100%` to keep the bottom gutter on long
|
|
9
|
+
screens. A grid track is sized from its item's content, and during that sizing a screen's
|
|
10
|
+
`height: 100%` counts as `auto` β so a screen that fills the area with a table holding more rows
|
|
11
|
+
than fit (a toolbar plus `flex: 1; min-height: 0`) grew to every row, and the table never
|
|
12
|
+
scrolled. The wrapper now creates no box at all (`display: contents`), and neither does the
|
|
13
|
+
outlet (`@iyulab/router` 0.16.0, now required): route content sits directly in the scroll
|
|
14
|
+
container, which is the only arrangement where filling screens, filling screens with long tables
|
|
15
|
+
and long flowing screens all behave β including the bottom gutter 0.28.2 set out to restore.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- `::part(main-content)` no longer takes box styling (`padding`, `background`, `border`) outside
|
|
20
|
+
the overlay; style `::part(main)` or the screen instead. While the overlay is open it becomes a
|
|
21
|
+
box at the area's height β the overlay's stacking boundary β as before.
|
|
22
|
+
- With an app notice showing, a screen that fills the area overflows by the notice's height (as in
|
|
23
|
+
0.28.1). 0.28.2 avoided that only by breaking long tables; the two kinds of screen cannot be told
|
|
24
|
+
apart in CSS.
|
|
25
|
+
- Requires `@iyulab/router` `^0.16.0`, where `<u-outlet>` also has no box.
|
|
26
|
+
|
|
27
|
+
## [0.28.2] - 2026-09-27
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Long route screens keep the bottom gutter again.** Since 0.23.0 the `main-content` wrapper was
|
|
32
|
+
fixed to the height of the content area, so a screen taller than that overflowed the wrapper and
|
|
33
|
+
the scroll container dropped its bottom padding: scrolled to the end, the content sat flush on the
|
|
34
|
+
bottom edge. The wrapper now passes the height down *and* grows with the content
|
|
35
|
+
(`display: grid; min-height: 100%` β the same rule as `u-outlet`). Screens that fill the area
|
|
36
|
+
(`height: 100%`) are unchanged; with app notices shown, a filling screen gets the height below
|
|
37
|
+
them. If you worked around this with `u-sidebar-layout::part(main-content) { β¦ }`, you can remove it.
|
|
38
|
+
β Do not set `align-content` on `::part(main-content)` β the height hand-down relies on its default.
|
|
39
|
+
|
|
40
|
+
### Documentation
|
|
41
|
+
|
|
42
|
+
- The layout reference now says that `part="main"` already has a 32px gutter and is the scroll
|
|
43
|
+
container β route screens should not add their own outer padding β and how to change it.
|
|
44
|
+
|
|
3
45
|
## [0.28.1] - 2026-09-24
|
|
4
46
|
|
|
5
47
|
### Fixed
|
|
@@ -207,8 +207,24 @@ var t = e`
|
|
|
207
207
|
outline: none;
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
+
/*
|
|
211
|
+
* λΌμ°νΈ λ³Έλ¬Έμ κ°μΈλ λνΌ β νμμλ Β«μμλ₯Ό λ§λ€μ§ μλλ€Β»(display: contents).
|
|
212
|
+
*
|
|
213
|
+
* λμ΄κ° μ ν΄μ§ μ€ν¬λ‘€ 컨ν
μ΄λ(.main) μμμ λΌμ°νΈ νλ©΄μ μΈ ννλ€: β΄μ±μ(height: 100%)
|
|
214
|
+
* β΅μ±μ-νΌ(μ±μ°λ μμ νκ° λ·°ν¬νΈλ³΄λ€ λ§μ νμ μκΈ° μμμ κ΅΄λ¦°λ€) βΆνλ¦(κΈΈμ΄μ§κ³ .main μ΄
|
|
215
|
+
* μ€ν¬λ‘€νλ€). μ¬μ΄μ μμκ° μμΌλ©΄ μ
μ€ νλκ° λ°λμ κΉ¨μ§λ€(μ€μΈ‘):
|
|
216
|
+
* Β· height: 100% β μμκ° λͺ» λ°ν βΆμ νλ©΄μ΄ λ°μΌλ‘ λμΉκ³ , .main μ λ padding μ in-flow
|
|
217
|
+
* μμ(= μ΄ λνΌ) λ€μ λΆμ΄λ―λ‘ μ€ν¬λ‘€ λμ κ±°ν°κ° μ¬λΌμ§λ€.
|
|
218
|
+
* Β· grid + min-height: 100% β βΆμ λμ§λ§ νΈλμ΄ νλͺ©μ λ΄μ© ν¬κΈ°λ‘ μ‘νκ³ κ·Έ κ³μ° λμ
|
|
219
|
+
* height: 100% λ auto λ‘ μ·¨κΈλμ΄, β΅μ νκ° λͺ¨λ ν λμ΄λ‘ μλλ€.
|
|
220
|
+
* μμκ° μμΌλ©΄ νλ©΄μ΄ .main μ μ§μ λ°λλ€. μμλ (u-outlet)λ κ°μ μ΄μ λ‘ μμκ° μλ€.
|
|
221
|
+
*
|
|
222
|
+
* β 곡μ§(slot="notice")κ° μμΌλ©΄ μ±μ°λ νλ©΄μ κ·Έ λμ΄λ§νΌ λμΉλ€ β 곡μ§λ λ³Έλ¬Έ μ νλ¦ μμ
|
|
223
|
+
* μκ³ , μ±μ°λ νλ©΄μ height: 100% λ 곡μ§λ₯Ό λͺ¨λ₯Έλ€. λ ννλ₯Ό CSS λ‘ κ°λ₯Ό μ μμ΄ μλ €μ§
|
|
224
|
+
* νκ³λ‘ λλ€(곡μ§λ λλ¬Όκ³ μ κΉμ΄λ€).
|
|
225
|
+
*/
|
|
210
226
|
.main-content {
|
|
211
|
-
|
|
227
|
+
display: contents;
|
|
212
228
|
}
|
|
213
229
|
|
|
214
230
|
/*
|
|
@@ -263,6 +279,11 @@ var t = e`
|
|
|
263
279
|
* κ²½κ³μ κ±Έλ¦¬μ§ μκ³ , μ€λ²λ μ΄κ° μ΄λ¦° μ±λ‘ μΌμ΄λλ λΌμ°νΈ μ νμ κ³μ λ³΄κ³ νλ€.
|
|
264
280
|
*/
|
|
265
281
|
:host(:state(overlay)) .main-content {
|
|
282
|
+
/* μμ λ§₯λ½μ μμκ° μμ΄μΌ μκΈ΄λ€ β μ€λ²λ μ΄κ° μ΄λ¦° λμλ§ μμλ₯Ό λλ€(λ³Έλ¬Έμ inert μ΄κ³
|
|
283
|
+
μ€λ²λ μ΄ μλμ μλ€). height: 100% λΌ μ±μ°λ νλ©΄μ κ·Έλλ‘μ΄κ³ , νλ¦ νλ©΄μ λ κ±°ν°λ§ κ·Έλμ
|
|
284
|
+
λΉ μ§λ€. */
|
|
285
|
+
display: block;
|
|
286
|
+
height: 100%;
|
|
266
287
|
isolation: isolate;
|
|
267
288
|
}
|
|
268
289
|
|
|
@@ -343,9 +364,6 @@ var t = e`
|
|
|
343
364
|
padding: 0;
|
|
344
365
|
overflow: visible;
|
|
345
366
|
}
|
|
346
|
-
.main-content {
|
|
347
|
-
height: auto;
|
|
348
|
-
}
|
|
349
367
|
:host(:state(overlay)) .main-content {
|
|
350
368
|
display: none;
|
|
351
369
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iyulab/modern-app",
|
|
3
3
|
"description": "web-framework by iyulab based on lit-element",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.29.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iyulab",
|
|
7
7
|
"web-framework",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"test:react-types": "tsc -p tsconfig.react-smoke.json"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@iyulab/router": "^0.
|
|
62
|
+
"@iyulab/router": "^0.16.0",
|
|
63
63
|
"i18next": "^26.3.6",
|
|
64
64
|
"lit": "^3.3.3"
|
|
65
65
|
},
|
|
@@ -260,7 +260,7 @@ Parts available for `styles` overrides on the root layout:
|
|
|
260
260
|
| `sidebar-main` | Scrollable main nav area |
|
|
261
261
|
| `sidebar-footer` | Pinned footer area |
|
|
262
262
|
| `main` | Main content area (the scroll container) |
|
|
263
|
-
| `main-content` | Wrapper holding route content inside `main` β the shell puts `inert` here while the overlay is open |
|
|
263
|
+
| `main-content` | Wrapper holding route content inside `main` β creates no box, so route content sits directly in `main` (see [Route content area](#route-content-area)); the shell puts `inert` here while the overlay is open, and gives it a box then as the overlay's stacking boundary |
|
|
264
264
|
| `progress` | Top progress bar |
|
|
265
265
|
| `overlay` | Route-independent overlay panel above `main` |
|
|
266
266
|
| `overlay-close` | Overlay's close button |
|
|
@@ -287,6 +287,49 @@ the console. Give that container a height β for screen only, so printing is no
|
|
|
287
287
|
}
|
|
288
288
|
```
|
|
289
289
|
|
|
290
|
+
## Route content area
|
|
291
|
+
|
|
292
|
+
`part="main"` is the **scroll container** for route content, and it already has a **32px gutter**
|
|
293
|
+
(`padding: var(--u-space-3xl, 32px)`) on every side. **Route screens should not add their own outer
|
|
294
|
+
padding** to `:host` β the gutters add up (32 + 16 = 48px), and they start to differ from screen
|
|
295
|
+
to screen.
|
|
296
|
+
|
|
297
|
+
To change or remove the gutter, override `main` β either through `layout.styles` or the part:
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
layout: { type: 'sidebar', styles: { main: { padding: '0' } } } // full-bleed
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```css
|
|
304
|
+
u-sidebar-layout::part(main) { padding: 24px; }
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
β `layout.styles` values are inline styles, so they also apply on print media (see [Printing](#printing));
|
|
308
|
+
use `::part(main)` inside `@media screen` if the change is for the screen only.
|
|
309
|
+
|
|
310
|
+
Inside it, the route content sits **directly** in that scroll container: neither
|
|
311
|
+
`part="main-content"` nor `<u-outlet>` creates a box (`display: contents`). That is what lets all
|
|
312
|
+
three kinds of screen work:
|
|
313
|
+
|
|
314
|
+
| Screen | Behaviour |
|
|
315
|
+
|---|---|
|
|
316
|
+
| **Fills the area** β `height: 100%`, or a layout such as `u-master-detail-layout` | gets the area minus its gutters |
|
|
317
|
+
| **Fills the area, more content than fits** β a toolbar plus a table with `flex: 1; min-height: 0` and more rows than the viewport | stays at the area's height; the table scrolls inside itself |
|
|
318
|
+
| **Flows** β a form or document taller than the area | `main` scrolls, and the bottom gutter stays at the end of the scroll |
|
|
319
|
+
|
|
320
|
+
Any box in between breaks one of them β a box pinned at `height: 100%` loses the bottom gutter on
|
|
321
|
+
flowing screens, and a grid box with `min-height: 100%` grows a filling screen to every row of its
|
|
322
|
+
table. So `::part(main-content)` accepts no box styling (`padding`, `background`, `border` do
|
|
323
|
+
nothing); style `::part(main)` or the screen instead.
|
|
324
|
+
|
|
325
|
+
β **App notices push a filling screen down.** Notices (`slot="notice"`) sit at the top of the
|
|
326
|
+
content at their own height, and a screen's `height: 100%` does not know about them, so while a
|
|
327
|
+
notice shows, a filling screen overflows by the notice's height. The two kinds of screen cannot be
|
|
328
|
+
told apart in CSS; notices are rare and short-lived.
|
|
329
|
+
|
|
330
|
+
While the overlay is open, `part="main-content"` becomes a box at the area's height, because a
|
|
331
|
+
stacking context needs one β route content is inert and under the overlay then.
|
|
332
|
+
|
|
290
333
|
## Printing
|
|
291
334
|
|
|
292
335
|
On print media the shell drops its app chrome and lets the content flow across pages: the
|