Skip to content

Commit 91a8905

Browse files
author
DavidQ
committed
Add object-level transform accordion and reorganize shape transform layout - PR_26133_090-object-transform-accordion-and-layout-reorganization
1 parent 07ead6c commit 91a8905

7 files changed

Lines changed: 660 additions & 147 deletions

File tree

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Playwright V8 Coverage Report
1+
# Playwright V8 Coverage Report
22

3-
PR: PR_26133_089-auto-origin-terminology-final-polish
3+
PR: PR_26133_090-object-transform-accordion-and-layout-reorganization
44

55
Command: `npm run test:workspace-v2`
66

@@ -9,10 +9,10 @@ Result: PASS
99
Coverage source: Playwright/Chromium built-in V8 coverage from the final passing workspace-v2 run.
1010

1111
Changed runtime JS coverage:
12-
- `tools/object-vector-studio-v2/js/ToolStarterApp.js`: 95% entry coverage, 7574/7574 executed lines, 771/809 executed functions.
12+
- `tools/object-vector-studio-v2/js/bootstrap.js`: 83% entry coverage, 110/110 executed lines, 5/6 executed functions.
13+
- `tools/object-vector-studio-v2/js/ToolStarterApp.js`: 94% entry coverage, 8031/8031 executed lines, 783/835 executed functions.
1314

1415
Notes:
1516
- The generated detailed text artifact remains at `docs/dev/reports/playwright_v8_coverage_report.txt`.
1617
- Coverage is advisory for this PR; no new thresholds were introduced.
17-
- The changed runtime JS file was exercised by the passing Playwright run.
18-
- `tools/object-vector-studio-v2/js/bootstrap.js` remains covered by the run but is not changed by PR089.
18+
- The changed runtime JS files were exercised by the passing Playwright run.
Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
# Playwright Workspace V2 Results
1+
# Playwright Workspace V2 Results
22

3-
PR: PR_26133_089-auto-origin-terminology-final-polish
3+
PR: PR_26133_090-object-transform-accordion-and-layout-reorganization
44

55
Command: `npm run test:workspace-v2`
66

77
Result: PASS
88

99
Summary:
1010
- 54/54 Playwright tests passed.
11-
- Final run completed in 5.5 minutes.
12-
- Object Transform now shows `Auto Origin` directly under the Origin X/Y/Apply row.
13-
- The origin-balancing action no longer uses Auto Center or Balance Center wording.
14-
- Auto Origin coverage verifies origin/pivot recalculation from visible object bounds without changing geometry or moving visible bounds, and dirty state is set through the existing transform update path.
15-
- Select All rotation behavior from PR088 remains covered and passing.
16-
- Copy icon remains `nf-fa-copy`.
11+
- Final run completed in 5.2 minutes.
12+
- Object Transform now owns object-level Move, Rotate, Scale, Origin/Apply, Auto Origin, and Resize controls in the left column after Object.
13+
- Shape Transform is a separate right-column accordion directly under Shape/Tools and contains the existing single-shape transform workflow.
14+
- Shape Transform controls are disabled when multiple shapes are selected; Object Transform does not require Select All and can affect every shape in the selected object.
15+
- Right-column order now starts with Shape/Tools, Shape Transform, then Palette and Shape Geometry.
1716
- Existing console/page error assertions remained clean in the covered flows.
1817

1918
Manual/targeted verification notes:
20-
- Origin controls remain grouped together: Origin row followed immediately by Auto Origin.
21-
- Preview Center dot control remains separate and unchanged.
22-
- Auto Origin logs an OK status after successful origin/pivot update.
19+
- Targeted layout, dirty-state, object authoring, and grouping/transform Playwright checks passed before the final full run.
20+
- Object-level move/rotate behavior was verified through updated Object Vector Studio V2 coverage.
21+
- Shape-level move/rotate/scale/resize behavior remains covered through the existing Shape Transform IDs.

tests/playwright/tools/WorkspaceManagerV2.spec.mjs

Lines changed: 62 additions & 54 deletions
Large diffs are not rendered by default.

tools/object-vector-studio-v2/index.html

Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ <h2 class="tools-platform-frame__eyebrow">First-Class Tools Surface V2</h2>
7979
<span class="accordion-v2__icon" aria-hidden="true">+</span>
8080
</button>
8181
<div id="objectVectorStudioV2ObjectTransformContent" class="accordion-v2__content object-vector-studio-v2__scroll-content">
82-
<div id="objectVectorStudioV2ObjectTransform" class="object-vector-studio-v2__details">No shape selected.</div>
82+
<div id="objectVectorStudioV2ObjectTransform" class="object-vector-studio-v2__details">No object selected.</div>
8383
</div>
8484
</section>
8585

@@ -165,54 +165,6 @@ <h2 class="tools-platform-frame__eyebrow">First-Class Tools Surface V2</h2>
165165
</section>
166166

167167
<aside class="tool-starter__panel tool-starter__panel--right" aria-label="Tool output">
168-
<section class="accordion-v2 tool-starter__accordion tool-starter__accordion--compact object-vector-studio-v2__palette-accordion is-open" data-accordion-v2-open="true">
169-
<button class="accordion-v2__header" type="button" aria-expanded="true" aria-controls="objectVectorStudioV2PaletteContent">
170-
<span>Palette <span id="objectVectorStudioV2PaletteSwatchCount" class="object-vector-studio-v2__header-count">(0 swatches)</span></span>
171-
<span class="accordion-v2__icon" aria-hidden="true">+</span>
172-
</button>
173-
<div id="objectVectorStudioV2PaletteContent" class="accordion-v2__content object-vector-studio-v2__scroll-content">
174-
<div class="object-vector-studio-v2__palette-controls" aria-label="Palette paint controls">
175-
<div class="object-vector-studio-v2__palette-primary-row">
176-
<button id="objectVectorStudioV2PaintModeButton" type="button" aria-pressed="true">
177-
<span class="object-vector-studio-v2__palette-mode-swatch" data-palette-mode-swatch="paint" aria-hidden="true"></span>
178-
<span class="object-vector-studio-v2__palette-mode-label">Paint</span>
179-
</button>
180-
<button id="objectVectorStudioV2PalettePickerButton" class="object-vector-studio-v2__palette-picker-button" type="button" aria-pressed="false" data-shape-tool="picker" title="Sample a shape style into Palette controls" aria-label="Picker">
181-
<span class="object-vector-studio-v2__shape-icon object-vector-studio-v2__shape-icon--picker" aria-hidden="true"></span>
182-
</button>
183-
<button id="objectVectorStudioV2StrokeModeButton" type="button" aria-pressed="false">
184-
<span class="object-vector-studio-v2__palette-mode-swatch" data-palette-mode-swatch="stroke" aria-hidden="true"></span>
185-
<span class="object-vector-studio-v2__palette-mode-label">Stroke</span>
186-
</button>
187-
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2StrokeWidth">
188-
<span>Width</span>
189-
<input id="objectVectorStudioV2StrokeWidth" type="number" min="0.1" step="0.1" value="2">
190-
</label>
191-
</div>
192-
<div class="object-vector-studio-v2__palette-opacity-row">
193-
<span class="object-vector-studio-v2__palette-opacity-heading">Opacity</span>
194-
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2FillOpacity">
195-
<span>Fill</span>
196-
<input id="objectVectorStudioV2FillOpacity" type="number" min="0" max="255" step="1" value="255">
197-
</label>
198-
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2StrokeOpacity">
199-
<span>Stroke</span>
200-
<input id="objectVectorStudioV2StrokeOpacity" type="number" min="0" max="255" step="1" value="255">
201-
</label>
202-
</div>
203-
</div>
204-
<hr class="object-vector-studio-v2__separator">
205-
<div id="objectVectorStudioV2PaletteSummary" class="object-vector-studio-v2__palette-swatch-list" aria-label="Read-only palette swatches"></div>
206-
<div class="object-vector-studio-v2__palette-sort" aria-label="Palette sorting">
207-
<button type="button" data-palette-sort="hue" aria-pressed="false">Hue</button>
208-
<button type="button" data-palette-sort="sat" aria-pressed="false">Sat</button>
209-
<button type="button" data-palette-sort="bri" aria-pressed="false">Bri</button>
210-
<button type="button" data-palette-sort="name" aria-pressed="true">Name</button>
211-
<button type="button" data-palette-sort="tag" aria-pressed="false">Tag</button>
212-
</div>
213-
</div>
214-
</section>
215-
216168
<section class="accordion-v2 tool-starter__accordion tool-starter__accordion--fill is-open" data-accordion-v2-open="true">
217169
<button class="accordion-v2__header" type="button" aria-expanded="true" aria-controls="objectVectorStudioV2ShapeToolsContent">
218170
<span>Shape/Tools</span>
@@ -275,6 +227,64 @@ <h2 class="tools-platform-frame__eyebrow">First-Class Tools Surface V2</h2>
275227
</div>
276228
</section>
277229

230+
<section class="accordion-v2 tool-starter__accordion tool-starter__accordion--compact is-open" data-accordion-v2-open="true">
231+
<button class="accordion-v2__header" type="button" aria-expanded="true" aria-controls="objectVectorStudioV2ShapeTransformContent">
232+
<span>Shape Transform</span>
233+
<span class="accordion-v2__icon" aria-hidden="true">+</span>
234+
</button>
235+
<div id="objectVectorStudioV2ShapeTransformContent" class="accordion-v2__content object-vector-studio-v2__scroll-content">
236+
<div id="objectVectorStudioV2ShapeTransform" class="object-vector-studio-v2__details">No shape selected.</div>
237+
</div>
238+
</section>
239+
240+
<section class="accordion-v2 tool-starter__accordion tool-starter__accordion--compact object-vector-studio-v2__palette-accordion is-open" data-accordion-v2-open="true">
241+
<button class="accordion-v2__header" type="button" aria-expanded="true" aria-controls="objectVectorStudioV2PaletteContent">
242+
<span>Palette <span id="objectVectorStudioV2PaletteSwatchCount" class="object-vector-studio-v2__header-count">(0 swatches)</span></span>
243+
<span class="accordion-v2__icon" aria-hidden="true">+</span>
244+
</button>
245+
<div id="objectVectorStudioV2PaletteContent" class="accordion-v2__content object-vector-studio-v2__scroll-content">
246+
<div class="object-vector-studio-v2__palette-controls" aria-label="Palette paint controls">
247+
<div class="object-vector-studio-v2__palette-primary-row">
248+
<button id="objectVectorStudioV2PaintModeButton" type="button" aria-pressed="true">
249+
<span class="object-vector-studio-v2__palette-mode-swatch" data-palette-mode-swatch="paint" aria-hidden="true"></span>
250+
<span class="object-vector-studio-v2__palette-mode-label">Paint</span>
251+
</button>
252+
<button id="objectVectorStudioV2PalettePickerButton" class="object-vector-studio-v2__palette-picker-button" type="button" aria-pressed="false" data-shape-tool="picker" title="Sample a shape style into Palette controls" aria-label="Picker">
253+
<span class="object-vector-studio-v2__shape-icon object-vector-studio-v2__shape-icon--picker" aria-hidden="true"></span>
254+
</button>
255+
<button id="objectVectorStudioV2StrokeModeButton" type="button" aria-pressed="false">
256+
<span class="object-vector-studio-v2__palette-mode-swatch" data-palette-mode-swatch="stroke" aria-hidden="true"></span>
257+
<span class="object-vector-studio-v2__palette-mode-label">Stroke</span>
258+
</button>
259+
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2StrokeWidth">
260+
<span>Width</span>
261+
<input id="objectVectorStudioV2StrokeWidth" type="number" min="0.1" step="0.1" value="2">
262+
</label>
263+
</div>
264+
<div class="object-vector-studio-v2__palette-opacity-row">
265+
<span class="object-vector-studio-v2__palette-opacity-heading">Opacity</span>
266+
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2FillOpacity">
267+
<span>Fill</span>
268+
<input id="objectVectorStudioV2FillOpacity" type="number" min="0" max="255" step="1" value="255">
269+
</label>
270+
<label class="object-vector-studio-v2__inline-field" for="objectVectorStudioV2StrokeOpacity">
271+
<span>Stroke</span>
272+
<input id="objectVectorStudioV2StrokeOpacity" type="number" min="0" max="255" step="1" value="255">
273+
</label>
274+
</div>
275+
</div>
276+
<hr class="object-vector-studio-v2__separator">
277+
<div id="objectVectorStudioV2PaletteSummary" class="object-vector-studio-v2__palette-swatch-list" aria-label="Read-only palette swatches"></div>
278+
<div class="object-vector-studio-v2__palette-sort" aria-label="Palette sorting">
279+
<button type="button" data-palette-sort="hue" aria-pressed="false">Hue</button>
280+
<button type="button" data-palette-sort="sat" aria-pressed="false">Sat</button>
281+
<button type="button" data-palette-sort="bri" aria-pressed="false">Bri</button>
282+
<button type="button" data-palette-sort="name" aria-pressed="true">Name</button>
283+
<button type="button" data-palette-sort="tag" aria-pressed="false">Tag</button>
284+
</div>
285+
</div>
286+
</section>
287+
278288
<section class="accordion-v2 tool-starter__accordion tool-starter__accordion--compact is-open" data-accordion-v2-open="true">
279289
<button class="accordion-v2__header" type="button" aria-expanded="true" aria-controls="objectVectorStudioV2ShapeGeometryContent">
280290
<span class="object-vector-studio-v2__geometry-header-title">

0 commit comments

Comments
 (0)