feat: вертикальный resize карточки в Sections (#648)

Issue: #648
User-Visible: yes
This commit is contained in:
Sergey Matyunin
2026-09-25 13:11:44 +00:00
committed by claude[bot]
parent 230813b355
commit 2452c51d00
79 changed files with 865 additions and 553 deletions
+46
View File
@@ -1199,6 +1199,52 @@ const MUTANT_DEFINITIONS = [
replace: ' if (this._serverCanWrite !== null) return true; // mutant: read-only becomes writer',
}],
},
{
id: 'sections-grid-falls-back-to-viewport-height',
guard: 'node demo/smoke_sections_resize.mjs',
because: 'HA Sections owns a fixed row slot; treating grid like an ordinary dashboard card '
+ 'restores the 100dvh stage and makes the card overflow its selected height (#648 AC2/AC7)',
patches: [{
file: 'src/houseplan-card.ts',
find: " private get _containerOwnedHeight(): boolean { return this.panelHost || this.layout === 'grid'; }",
replace: ' private get _containerOwnedHeight(): boolean { return this.panelHost; } // mutant: viewport height',
}],
},
{
id: 'sections-editor-transition-uses-window-height',
guard: 'node demo/smoke_sections_resize.mjs',
because: 'editor chrome must borrow space inside the selected Sections row slot; using '
+ 'window.innerHeight makes the animated stage escape the card at minimum height (#648 AC5)',
patches: [{
file: 'src/houseplan-card.ts',
find: '(containerOwnedHeight ? this.clientHeight : innerHeight)',
replace: 'innerHeight /* mutant: ignore the fixed Sections slot */',
}],
},
{
id: 'sections-grid-drops-stage-flex-chain',
guard: 'node demo/smoke_sections_resize.mjs',
because: 'host and ha-card height are insufficient when the stage is not the shrinking flex '
+ 'child; header plus scene then leave a gap or overflow the Sections slot (#648 AC2/AC5)',
patches: [{
file: 'src/styles/base.styles.ts',
find: ' :host([layout="grid"]) .stage,\n'
+ ' :host([layout="grid"]) .empty {',
replace: ' :host([layout="grid-disabled"]) .stage,\n'
+ ' :host([layout="grid-disabled"]) .empty { /* mutant: grid stage is not flex */',
}],
},
{
id: 'sections-resize-drops-stage-refit-observer',
guard: 'node demo/smoke_sections_resize.mjs',
because: 'a row resize changes the stage aspect and hit geometry; without the existing stage '
+ 'observer the camera retains a stale aspect even though CSS resized the box (#648 AC4/AC8)',
patches: [{
file: 'src/houseplan-card.ts',
find: ' this._roViewport.observe(stage);',
replace: ' // mutant: Sections resizes never reach camera refit',
}],
},
{
id: 'panel-ignores-pre-upgrade-properties',
guard: 'node demo/smoke_houseplan_panel.mjs',
+8
View File
@@ -27,6 +27,14 @@
/** @type {SmokeLink[]} */
export const SMOKE_LINKS = [
{
symbols: ['baseStyles', '_containerOwnedHeight', 'measuredCardHeaderHeight',
'settleSoftStageLayout'],
smokes: ['smoke_sections_resize.mjs'],
because: '#648: the production-bundle witness measures the HA Sections slot, card, header '
+ 'and stage through repeated row resizes and every editor transition; the CSS height chain '
+ 'and helper boolean do not otherwise share a runtime symbol with those DOM measurements',
},
{
symbols: ['chromeStyles', 'dialogsStyles'],
smokes: ['smoke_toolbar_stable_width.mjs', 'smoke_editor_tabs.mjs', 'smoke_mobile_view_header.mjs'],