@iyulab/modern-app 0.28.2 β 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,29 @@
|
|
|
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
|
+
|
|
3
27
|
## [0.28.2] - 2026-09-27
|
|
4
28
|
|
|
5
29
|
### Fixed
|
|
@@ -206,7 +206,7 @@ var O = class extends i {
|
|
|
206
206
|
<div class="main" part="main" scrollable tabindex="-1" @keydown=${this._handleMainKeydown}>
|
|
207
207
|
<u-progress-bar part="progress"></u-progress-bar>
|
|
208
208
|
|
|
209
|
-
<div class="main-content
|
|
209
|
+
<div class="main-content" part="main-content" ?inert=${this.hasOverlay}>
|
|
210
210
|
<div class="notices ${this.hasNotice ? "" : "empty"}" part="notices">
|
|
211
211
|
<slot name="notice" @slotchange=${this.handleNoticeSlotChange}></slot>
|
|
212
212
|
</div>
|
|
@@ -208,29 +208,23 @@ var t = e`
|
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
/*
|
|
211
|
-
* λΌμ°νΈ λ³Έλ¬Έμ κ°μΈλ
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
* height: 100%
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
* auto
|
|
220
|
-
*
|
|
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
|
+
* νκ³λ‘ λλ€(곡μ§λ λλ¬Όκ³ μ κΉμ΄λ€).
|
|
221
225
|
*/
|
|
222
226
|
.main-content {
|
|
223
|
-
display:
|
|
224
|
-
min-height: 100%;
|
|
225
|
-
}
|
|
226
|
-
/*
|
|
227
|
-
* 곡μ§κ° μμΌλ©΄ κ·Έ νμ λ΄μ© λμ΄λ‘ λ¬Άλλ€. λ리기λ max ν¬κΈ°κ° auto μΈ νΈλμλ§
|
|
228
|
-
* μ μ©λλ―λ‘ max-content νμ λμ΄λμ§ μκ³ , λ¨λ λμ΄λ λ€λ°λ₯΄λ λ³Έλ¬Έ νμ΄ λ°λλ€.
|
|
229
|
-
* 곡μ§κ° μμΌλ©΄(.notices κ° display: none) μ΄ κ·μΉλ μμ΄μΌ νλ€ β μμΌλ©΄ λ³Έλ¬Έμ 첫
|
|
230
|
-
* μμμ΄ μ΄ νμ μμ μ±μ°κΈ°λ₯Ό μλλ€.
|
|
231
|
-
*/
|
|
232
|
-
.main-content.has-notice {
|
|
233
|
-
grid-template-rows: max-content;
|
|
227
|
+
display: contents;
|
|
234
228
|
}
|
|
235
229
|
|
|
236
230
|
/*
|
|
@@ -285,6 +279,11 @@ var t = e`
|
|
|
285
279
|
* κ²½κ³μ κ±Έλ¦¬μ§ μκ³ , μ€λ²λ μ΄κ° μ΄λ¦° μ±λ‘ μΌμ΄λλ λΌμ°νΈ μ νμ κ³μ λ³΄κ³ νλ€.
|
|
286
280
|
*/
|
|
287
281
|
:host(:state(overlay)) .main-content {
|
|
282
|
+
/* μμ λ§₯λ½μ μμκ° μμ΄μΌ μκΈ΄λ€ β μ€λ²λ μ΄κ° μ΄λ¦° λμλ§ μμλ₯Ό λλ€(λ³Έλ¬Έμ inert μ΄κ³
|
|
283
|
+
μ€λ²λ μ΄ μλμ μλ€). height: 100% λΌ μ±μ°λ νλ©΄μ κ·Έλλ‘μ΄κ³ , νλ¦ νλ©΄μ λ κ±°ν°λ§ κ·Έλμ
|
|
284
|
+
λΉ μ§λ€. */
|
|
285
|
+
display: block;
|
|
286
|
+
height: 100%;
|
|
288
287
|
isolation: isolate;
|
|
289
288
|
}
|
|
290
289
|
|
|
@@ -365,12 +364,6 @@ var t = e`
|
|
|
365
364
|
padding: 0;
|
|
366
365
|
overflow: visible;
|
|
367
366
|
}
|
|
368
|
-
/* μΈμλ μͺ½ λλμ΄ νλ¦μ λ°λΌμΌ νλ―λ‘ grid λ₯Ό νκ³ λμ΄λ₯Ό λ΄μ©μ λ§‘κΈ΄λ€
|
|
369
|
-
(μμλ μ μΈμ κ·μΉκ³Ό κ°μ μ΄μ β grid μμ μ λ λΈλ‘ μ¬λ°±μ΄ μͺ½ κ²½κ³λ₯Ό λλλ€). */
|
|
370
|
-
.main-content {
|
|
371
|
-
display: block;
|
|
372
|
-
min-height: 0;
|
|
373
|
-
}
|
|
374
367
|
:host(:state(overlay)) .main-content {
|
|
375
368
|
display: none;
|
|
376
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` β
|
|
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 |
|
|
@@ -307,17 +307,28 @@ u-sidebar-layout::part(main) { padding: 24px; }
|
|
|
307
307
|
β `layout.styles` values are inline styles, so they also apply on print media (see [Printing](#printing));
|
|
308
308
|
use `::part(main)` inside `@media screen` if the change is for the screen only.
|
|
309
309
|
|
|
310
|
-
Inside it,
|
|
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:
|
|
311
313
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
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 |
|
|
316
319
|
|
|
317
|
-
|
|
318
|
-
|
|
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.
|
|
319
324
|
|
|
320
|
-
β
|
|
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.
|
|
321
332
|
|
|
322
333
|
## Printing
|
|
323
334
|
|