From 4077dcbd44233385a756e48ef8f3ccd5ba879af9 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Sun, 13 Sep 2026 21:16:03 +0300 Subject: [PATCH] fix: preserve authored instance sizing through synchronization --- CHANGELOG.md | 1 + packages/core/src/design-jsx/renderer.ts | 23 ++++++- tests/e2e/canvas/instance-sizing.spec.ts | 26 +++++++ ...instance-fill-sizing-openpencil-darwin.png | Bin 0 -> 86315 bytes .../engine/render/jsx/instance-sizing.test.ts | 49 +++++++++++++ tests/helpers/canvas/instance-sizing.ts | 65 ++++++++++++++++++ 6 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/canvas/instance-sizing.spec.ts create mode 100644 tests/e2e/canvas/instance-sizing.spec.ts-snapshots/instance-fill-sizing-openpencil-darwin.png create mode 100644 tests/engine/render/jsx/instance-sizing.test.ts create mode 100644 tests/helpers/canvas/instance-sizing.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c85d93118..b70f44f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ - Honor `.pen` frame layout defaults and sizing and padding shorthands so imported auto-layout frames keep their computed dimensions and child positions. (#564) - Avoid macOS Keychain prompts during credential status checks and pause repeated credential access after failures until explicitly retried from Settings. +- Honor explicit Design JSX instance dimensions and preserve authored overrides through component synchronization. - Route browser Command/Ctrl plus and minus shortcuts to canvas zoom instead of page zoom. - Resolve `$name` references in imported `.pen` fills, stroke fills, font families, dimensions, and spacing without requiring a `--` prefix. (#563) - Resolve bound fields in each layer’s mode, keep variable edits scoped and undoable, and make broken bindings visible and recoverable. diff --git a/packages/core/src/design-jsx/renderer.ts b/packages/core/src/design-jsx/renderer.ts index 927e51365..95bc566e0 100644 --- a/packages/core/src/design-jsx/renderer.ts +++ b/packages/core/src/design-jsx/renderer.ts @@ -430,13 +430,34 @@ async function renderInstanceNode( const label = typeof ref === 'string' || typeof ref === 'number' ? String(ref) : '' throw new Error(` component not found: ${label}`) } - const overrides = { + const overrides: Partial = { ...propsToOverrides(props, false, parentLayout), ...componentMetadata(props, 'INSTANCE', componentPropertyScope(graph, parentId)) } + // Instances inherit their container layout, but explicitly authored dimensions + // must also replace the inherited sizing mode on that axis. + const layout = overrides.layoutMode ?? component.layoutMode + if (layout !== 'NONE') { + const axes = + layout === 'HORIZONTAL' + ? (['primaryAxisSizing', 'counterAxisSizing'] as const) + : (['counterAxisSizing', 'primaryAxisSizing'] as const) + for (const [dimension, field] of [ + ['w', axes[0]], + ['h', axes[1]] + ] as const) { + const value = props[dimension] + if (typeof value === 'number') overrides[field] = 'FIXED' + else if (value === 'hug' || value === 'fill') overrides[field] = 'HUG' + } + } const instance = graph.createInstance(component.id, parentId, overrides) ?? graph.createNode('FRAME', parentId) try { + for (const [field, value] of Object.entries(overrides)) { + setInstanceOverride(instance.instanceOverrides, instance.id, instance.id, field, value) + } + graph.updateNode(instance.id, { instanceOverrides: instance.instanceOverrides }) applyBindings(graph, instance.id, bindings) applyInstanceOverrides(graph, instance, tree.props.overrides) assignComponentProperties(graph, instance, props.properties) diff --git a/tests/e2e/canvas/instance-sizing.spec.ts b/tests/e2e/canvas/instance-sizing.spec.ts new file mode 100644 index 000000000..b7780762d --- /dev/null +++ b/tests/e2e/canvas/instance-sizing.spec.ts @@ -0,0 +1,26 @@ +import { expect, test, useEditorSetupWithClear } from '#tests/e2e/fixtures' +import type * as SizingFixture from '#tests/helpers/canvas/instance-sizing' + +test.use({ viewport: { width: 900, height: 700 } }) + +const editor = useEditorSetupWithClear('/?test&no-chrome&no-rulers') + +test('Fill instances wrap inside narrower parents after component synchronization', async () => { + await editor.page.evaluate(async () => { + const store = window.openPencil?.getStore?.() + if (!store) throw new Error('OpenPencil store not initialized') + const fixtureURL = '/tests/helpers/canvas/instance-sizing.ts' + const { createInstanceSizingScene }: typeof SizingFixture = await import(fixtureURL) + const { boardId, componentId } = await createInstanceSizingScene( + store.graph, + store.state.currentPageId + ) + await store.loadFontsForNodes([boardId, componentId]) + store.clearSelection() + store.zoomToFit() + store.requestRender() + }) + await editor.canvas.waitForRender() + editor.canvas.assertNoErrors() + expect(await editor.canvas.screenshotCanvasRegion()).toMatchSnapshot('instance-fill-sizing.png') +}) diff --git a/tests/e2e/canvas/instance-sizing.spec.ts-snapshots/instance-fill-sizing-openpencil-darwin.png b/tests/e2e/canvas/instance-sizing.spec.ts-snapshots/instance-fill-sizing-openpencil-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad08de0ee5c46b6453c3f0ce93976fafd890318 GIT binary patch literal 86315 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 z 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

3cRl~fiLeJe%s$&H9m($;=- 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 Y)?zI>+}4_(<_*5VVbenobx;4}pT@Wn*#H0l literal 0 HcmV?d00001 diff --git a/tests/engine/render/jsx/instance-sizing.test.ts b/tests/engine/render/jsx/instance-sizing.test.ts new file mode 100644 index 000000000..472e8f43c --- /dev/null +++ b/tests/engine/render/jsx/instance-sizing.test.ts @@ -0,0 +1,49 @@ +import { expect, test } from 'bun:test' + +import { Component, Frame, Instance, Rectangle, renderTree } from '@open-pencil/core/design-jsx' +import { computeAllLayouts } from '@open-pencil/core/layout' + +import { getNodeOrThrow } from '#tests/helpers/assert' +import { makeSceneGraph } from '#tests/helpers/scene' + +for (const flex of ['row', 'col'] as const) { + test(`instances fill their parent across inherited fixed ${flex} dimensions`, async () => { + const graph = makeSceneGraph() + const component = await renderTree( + graph, + Component({ flex, w: 280, h: 100, children: Rectangle({ w: 20, h: 20 }) }) + ) + const parent = await renderTree( + graph, + Frame({ + flex: 'col', + w: 220, + h: 180, + children: Instance({ of: component.id, w: 'fill', h: 'fill' }) + }) + ) + const instance = graph.getChildren(parent.id)[0] + expect(instance.width).toBe(220) + expect(instance.height).toBe(180) + graph.syncInstances(component.id) + computeAllLayouts(graph) + expect(instance.width).toBe(220) + expect(instance.height).toBe(180) + }) + + test(`explicit instance dimensions override inherited Hug ${flex} sizing`, async () => { + const graph = makeSceneGraph() + const component = await renderTree( + graph, + Component({ flex, w: 'hug', h: 'hug', children: Rectangle({ w: 20, h: 20 }) }) + ) + const result = await renderTree(graph, Instance({ of: component.id, w: 120, h: 80 })) + const instance = getNodeOrThrow(graph, result.id) + expect(instance.width).toBe(120) + expect(instance.height).toBe(80) + graph.syncInstances(component.id) + computeAllLayouts(graph) + expect(instance.width).toBe(120) + expect(instance.height).toBe(80) + }) +} diff --git a/tests/helpers/canvas/instance-sizing.ts b/tests/helpers/canvas/instance-sizing.ts new file mode 100644 index 000000000..60801e93c --- /dev/null +++ b/tests/helpers/canvas/instance-sizing.ts @@ -0,0 +1,65 @@ +import { Component, Frame, Instance, Text, renderTree } from '@open-pencil/core/design-jsx' +import type { SceneGraph } from '@open-pencil/scene-graph' + +export async function createInstanceSizingScene(graph: SceneGraph, parentId: string) { + const library = graph.addPage('Sizing component') + const component = await renderTree( + graph, + Component({ + name: 'Note', + flex: 'col', + w: 280, + h: 'hug', + p: 16, + bg: '#FFFFFF', + rounded: 10, + properties: [{ id: 'message', name: 'Message', type: 'TEXT', defaultValue: 'A short note.' }], + children: Text({ + name: 'Message', + w: 'fill', + font: 'Inter', + size: 14, + lineHeight: 20, + color: '#252A31', + propertyRefs: [{ propertyId: 'message', field: 'TEXT' }], + children: 'A short note.' + }) + }), + { parentId: library.id } + ) + const board = await renderTree( + graph, + Frame({ + name: 'Instance sizing', + flex: 'row', + w: 'hug', + h: 'hug', + gap: 32, + p: 32, + bg: '#E9E7E2', + children: [280, 220].map((width) => + Frame({ + name: `Container ${width}`, + flex: 'col', + w: width, + h: 'hug', + gap: 12, + children: [ + Text({ children: `${width}px container`, font: 'Inter', size: 12, color: '#626975' }), + Instance({ + of: component.id, + w: 'fill', + properties: { + message: + 'The blue feels right. Give the date a little more room at the bottom, and keep the quieter version for the print edition.' + } + }) + ] + }) + ) + }), + { parentId } + ) + graph.syncInstances(component.id) + return { boardId: board.id, componentId: component.id } +}