Give every behavior variable one row shape on asset and instance
buildStructBlock only covered structs, so a placed instance drew numbers,
text, bools and lists through createFieldRow on a 64 px name column while
its struct block sat on the asset's grid below it. variableRows.ts now
builds the row for every variable kind on both sides; the edit option
decides what the owner may change (asset: rename, x, item kind; instance:
revert and push). Label and Button take a fixed width so the mark column
no longer shifts names when a list shows its item-kind picker.
The two structFields calls that became dead with 9f48257 are gone. The
e2e steps locate the Enabled toggle through __gm.inspectorField instead
of clicking a fixed offset from its label.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9f482573e5
commit
631cf54c72
17 files changed
+515
-472
No files matched your search
@@ -8,6 +8,10 @@ export async function structVariable(t) {
|
||||
/** `locate` throws when the text is absent, which is the wrong shape for "is it there?". */
|
||||
const find = (text) => json(`__gm.locate(${JSON.stringify(text)}, false)`);
|
||||
const piece = () => json("__gm.state.project.assets.find((a) => a.id === 'structy').props.piece");
|
||||
/** Left edge of each row's control – one column grid means one number, in the browser's own font. */
|
||||
const leftsOf = (labels) =>
|
||||
json(`[${labels.map((l) => `__gm.inspectorField(${JSON.stringify(l)})?.left ?? null`).join(',')}]`);
|
||||
const oneColumn = (xs) => xs.every((x) => x !== null && x === xs[0]);
|
||||
|
||||
// A throwaway behavior carrying one struct variable; removed again at the end of the step.
|
||||
await mutate(`
|
||||
@@ -39,6 +43,12 @@ export async function structVariable(t) {
|
||||
check('a struct variable carries the add-a-field control', (await find('+ Field')) !== null);
|
||||
check('and a row for each declared field', (await find('x')) !== null && (await find('tag')) !== null);
|
||||
check('whose value is shown, not a summary of the bundle', (await find('30.000')) !== null);
|
||||
const assetLefts = await leftsOf(['Name', 'Run in editor', 'x', 'tag']);
|
||||
check(
|
||||
'a field value starts on the same column as every other row',
|
||||
oneColumn(assetLefts),
|
||||
JSON.stringify(assetLefts),
|
||||
);
|
||||
await shot('01-struct-rows');
|
||||
|
||||
// 2. Writing one field keeps the others. Two edits in a row without a rebuild in between is
|
||||
@@ -183,6 +193,12 @@ export async function structVariable(t) {
|
||||
JSON.stringify({ fieldMark, fieldName, fieldValue }),
|
||||
);
|
||||
check('the shape itself cannot be changed from here', (await find('+ Field')) === null);
|
||||
const placedLefts = await leftsOf(['Name', 'Run in editor', 'Offset X', 'column', 'tag']);
|
||||
check(
|
||||
'and its values share the column of position, offset and the switches',
|
||||
oneColumn(placedLefts) && placedLefts[0] === assetLefts[0],
|
||||
JSON.stringify({ placedLefts, asset: assetLefts[0] }),
|
||||
);
|
||||
|
||||
// Typing over a name has to do nothing: a Label is not a TextField, and the declaration is
|
||||
// the asset's. Plain letters are safe here – the only shortcuts are modified ones and Delete.
|
||||
|
||||
Reference in new issue
Block a user