reflection-check 0.0.4 → 0.0.5

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/dist/cli.js CHANGED
@@ -14,7 +14,7 @@ export function createCli() {
14
14
  program
15
15
  .name('reflection')
16
16
  .description('Evidence-backed rendered UI validation.')
17
- .version('0.0.4')
17
+ .version('0.0.5')
18
18
  .configureOutput({
19
19
  outputError: (message, write) => write(message)
20
20
  });
@@ -79,9 +79,30 @@ function printConfigSummary(config, serverReachability) {
79
79
  ? `Design contract: ${design.enabled === false ? 'disabled' : 'enabled'}, ${formatCount(design.commands.length, 'command')}`
80
80
  : 'Design contract: not configured');
81
81
  const component = config.contracts.component;
82
- console.log(component
83
- ? `Component contract: ${component.enabled === false ? 'disabled' : 'enabled'}, ${formatCount(component.cases.length, 'case')}`
84
- : 'Component contract: not configured');
82
+ if (component) {
83
+ const runtime = describeComponentRuntime(component);
84
+ console.log(`Component contract: ${component.enabled === false ? 'disabled' : 'enabled'}, ${formatCount(component.cases.length, 'case')}, runtime ${runtime}`);
85
+ if (component.portal) {
86
+ console.log(`Component portal: readyUrl ${component.portal.readyUrl}, reuseExisting ${component.portal.reuseExisting}, timeoutMs ${component.portal.timeoutMs}`);
87
+ }
88
+ }
89
+ else {
90
+ console.log('Component contract: not configured');
91
+ }
92
+ }
93
+ function describeComponentRuntime(component) {
94
+ const hasStorybookCases = component.cases.some((visualCase) => Boolean(visualCase.storyId));
95
+ const hasPortalCases = component.cases.some((visualCase) => Boolean(visualCase.path));
96
+ if (hasStorybookCases && hasPortalCases) {
97
+ return 'mixed';
98
+ }
99
+ if (hasPortalCases) {
100
+ return 'portal';
101
+ }
102
+ if (hasStorybookCases) {
103
+ return 'storybook';
104
+ }
105
+ return 'none';
85
106
  }
86
107
  async function checkConfiguredServerReachability(config) {
87
108
  const readyUrl = config.contracts.browser?.server?.readyUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,13 @@ import type { ArtifactStore } from '../../core/artifact-store.js';
2
2
  import type { CheckResult } from '../../core/report-schema.js';
3
3
  import type { ServerConfig } from '../../core/server-manager.js';
4
4
  import { type ViewportSize } from '../../integrations/playwright/context-factory.js';
5
+ import { type PortalConfig } from '../../integrations/portal/server.js';
5
6
  import type { VisualThreshold } from '../visual/thresholds.js';
7
+ export type ComponentSource = 'storybook' | 'portal';
6
8
  export type ComponentVisualCase = {
7
9
  id: string;
8
- storyId: string;
10
+ storyId?: string | undefined;
11
+ path?: string | undefined;
9
12
  baseline: string;
10
13
  baselineRoot?: string | undefined;
11
14
  viewport?: string | undefined;
@@ -26,14 +29,15 @@ export type ComponentBrowserState = {
26
29
  };
27
30
  };
28
31
  export type ComponentFraming = {
29
- rootSelector: string;
32
+ rootSelector?: string | undefined;
30
33
  background?: string | undefined;
31
34
  align: 'center' | 'start';
32
35
  padding: number;
33
36
  };
34
37
  export type ComponentVisualContractConfig = {
35
38
  enabled?: boolean | undefined;
36
- storybook: ServerConfig;
39
+ storybook?: ServerConfig | undefined;
40
+ portal?: PortalConfig | undefined;
37
41
  cases: ComponentVisualCase[];
38
42
  };
39
43
  export declare function runComponentVisualContract(config: ComponentVisualContractConfig | undefined, store: ArtifactStore): Promise<CheckResult[]>;
@@ -3,6 +3,7 @@ import { dirname } from 'node:path';
3
3
  import { createBaselineStore, createMissingBaselineCheck } from '../../core/baseline-store.js';
4
4
  import { createBrowserContext } from '../../integrations/playwright/context-factory.js';
5
5
  import { launchBrowser } from '../../integrations/playwright/browser-manager.js';
6
+ import { startReflectionPortalServer } from '../../integrations/portal/server.js';
6
7
  import { startStorybookServer } from '../../integrations/storybook/server.js';
7
8
  import { resolveStoryUrl } from '../../integrations/storybook/story-url.js';
8
9
  import { comparePngImages } from '../visual/image-diff.js';
@@ -10,28 +11,73 @@ export async function runComponentVisualContract(config, store) {
10
11
  if (!config || config.enabled === false || config.cases.length === 0) {
11
12
  return [];
12
13
  }
13
- const storybook = await startStorybookServer(config.storybook, {
14
- cwd: process.cwd(),
15
- logPath: store.resolveRunPath('server/storybook.log')
16
- });
14
+ const storybookCases = config.cases.filter(isStorybookCase);
15
+ const portalCases = config.cases.filter(isPortalCase);
16
+ if (storybookCases.length > 0 && !config.storybook) {
17
+ throw new Error('Storybook component visual cases require component.storybook.');
18
+ }
19
+ if (portalCases.length > 0 && !config.portal) {
20
+ throw new Error('Portal component visual cases require component.portal.');
21
+ }
22
+ const storybook = storybookCases.length > 0 && config.storybook
23
+ ? await startStorybookServer(config.storybook, {
24
+ cwd: process.cwd(),
25
+ logPath: store.resolveRunPath('server/storybook.log')
26
+ })
27
+ : undefined;
28
+ const portal = portalCases.length > 0 && config.portal
29
+ ? await startReflectionPortalServer(config.portal, portalCases.map((visualCase) => ({
30
+ id: visualCase.id,
31
+ path: visualCase.path,
32
+ viewport: visualCase.viewport ?? 'component',
33
+ viewportSize: visualCase.viewportSize,
34
+ framing: resolveComponentFraming(visualCase.framing, 'portal')
35
+ })), {
36
+ cwd: process.cwd(),
37
+ rootDir: store.resolveRunPath('server/portal')
38
+ })
39
+ : undefined;
17
40
  const browser = await launchBrowser();
18
41
  try {
19
42
  const checks = [];
20
- for (const visualCase of config.cases) {
43
+ for (const visualCase of storybookCases) {
44
+ if (!storybook)
45
+ continue;
21
46
  const storyUrl = resolveStoryUrl(storybook.index, storybook.baseUrl, visualCase.storyId);
22
- checks.push(await runComponentVisualCase({ visualCase, storyUrl, store, browser }));
47
+ checks.push(await runComponentVisualCase({
48
+ visualCase,
49
+ componentSource: 'storybook',
50
+ targetUrl: storyUrl,
51
+ targetLabel: visualCase.storyId,
52
+ store,
53
+ browser
54
+ }));
55
+ }
56
+ for (const visualCase of portalCases) {
57
+ if (!portal)
58
+ continue;
59
+ const portalUrl = new URL(visualCase.path, portal.baseUrl).toString();
60
+ checks.push(await runComponentVisualCase({
61
+ visualCase,
62
+ componentSource: 'portal',
63
+ targetUrl: portalUrl,
64
+ targetLabel: visualCase.path,
65
+ store,
66
+ browser
67
+ }));
23
68
  }
24
69
  return checks;
25
70
  }
26
71
  finally {
27
72
  await browser.close();
28
- await storybook.server.stop();
73
+ await storybook?.server.stop();
74
+ await portal?.server.stop();
29
75
  }
30
76
  }
31
77
  async function runComponentVisualCase(input) {
32
78
  const viewport = input.visualCase.viewport ?? 'component';
33
79
  const viewportSize = input.visualCase.viewportSize;
34
- const target = `${input.visualCase.storyId} ${viewport}`;
80
+ const target = `${input.targetLabel} ${viewport}`;
35
81
  const baselinePath = resolveCaseBaselinePath(input.visualCase);
36
82
  const blocking = input.visualCase.blocking === true || input.visualCase.strict === true;
37
83
  const strict = input.visualCase.strict === true || input.visualCase.blocking === true;
@@ -41,61 +87,93 @@ async function runComponentVisualCase(input) {
41
87
  target,
42
88
  baselinePath: input.visualCase.baseline,
43
89
  blocking,
44
- metadata: createComponentMetadata(input.visualCase)
90
+ metadata: {
91
+ ...createComponentSourceMetadata(input),
92
+ ...createComponentMetadata(input.visualCase, input.componentSource)
93
+ }
45
94
  });
46
95
  }
47
96
  const artifactBase = `visual/${input.visualCase.id}`;
48
97
  const expectedArtifact = await input.store.writeBuffer(`${artifactBase}/expected.png`, await readFile(baselinePath));
49
- const actualArtifact = await captureComponentScreenshot({
50
- browser: input.browser,
51
- store: input.store,
52
- path: `${artifactBase}/actual.png`,
53
- storyUrl: input.storyUrl,
54
- viewport,
55
- viewportSize,
56
- framing: input.visualCase.framing,
57
- browserState: input.visualCase.browserState
58
- });
59
- const diffRelativePath = `${artifactBase}/diff.png`;
60
- const diffPath = input.store.resolveRunPath(diffRelativePath);
61
- await mkdir(dirname(diffPath), { recursive: true });
62
- const result = await comparePngImages({
63
- expectedPath: baselinePath,
64
- actualPath: input.store.resolveRunPath(actualArtifact.path),
65
- diffPath,
66
- ...(input.visualCase.threshold ? { threshold: input.visualCase.threshold } : {}),
67
- strict
68
- });
69
- const diffArtifact = result.diffPath ? await input.store.describeArtifact(diffRelativePath, 'visual-diff', 'diff') : undefined;
70
- const severity = result.status === 'fail' && blocking ? 'blocking' : 'review';
71
- return {
72
- id: `visual.${input.visualCase.id}`,
73
- suite: 'visual',
74
- target,
75
- status: result.status,
76
- severity,
77
- summary: createComponentVisualSummary(input.visualCase.id, result),
78
- artifacts: [expectedArtifact, actualArtifact, ...(diffArtifact ? [diffArtifact] : [])],
79
- metadata: {
80
- ...result,
81
- storyId: input.visualCase.storyId,
82
- storyUrl: input.storyUrl,
98
+ try {
99
+ const actualArtifact = await captureComponentScreenshot({
100
+ browser: input.browser,
101
+ store: input.store,
102
+ path: `${artifactBase}/actual.png`,
103
+ targetUrl: input.targetUrl,
104
+ componentSource: input.componentSource,
83
105
  viewport,
84
- baselinePath: input.visualCase.baseline,
85
- ...createComponentMetadata(input.visualCase)
86
- },
87
- ...(result.status === 'pass'
88
- ? {}
89
- : { suggestedNextStep: 'Inspect expected, actual, and diff artifacts. If intentional, update only this component visual baseline.' })
90
- };
106
+ viewportSize,
107
+ framing: resolveComponentFraming(input.visualCase.framing, input.componentSource),
108
+ browserState: input.visualCase.browserState
109
+ });
110
+ const diffRelativePath = `${artifactBase}/diff.png`;
111
+ const diffPath = input.store.resolveRunPath(diffRelativePath);
112
+ await mkdir(dirname(diffPath), { recursive: true });
113
+ const result = await comparePngImages({
114
+ expectedPath: baselinePath,
115
+ actualPath: input.store.resolveRunPath(actualArtifact.path),
116
+ diffPath,
117
+ ...(input.visualCase.threshold ? { threshold: input.visualCase.threshold } : {}),
118
+ strict
119
+ });
120
+ const diffArtifact = result.diffPath ? await input.store.describeArtifact(diffRelativePath, 'visual-diff', 'diff') : undefined;
121
+ const severity = result.status === 'fail' && blocking ? 'blocking' : 'review';
122
+ return {
123
+ id: `visual.${input.visualCase.id}`,
124
+ suite: 'visual',
125
+ target,
126
+ status: result.status,
127
+ severity,
128
+ summary: createComponentVisualSummary(input.visualCase.id, result),
129
+ artifacts: [expectedArtifact, actualArtifact, ...(diffArtifact ? [diffArtifact] : [])],
130
+ metadata: {
131
+ ...result,
132
+ ...createComponentSourceMetadata(input),
133
+ viewport,
134
+ baselinePath: input.visualCase.baseline,
135
+ ...createComponentMetadata(input.visualCase, input.componentSource)
136
+ },
137
+ ...(result.status === 'pass'
138
+ ? {}
139
+ : { suggestedNextStep: 'Inspect expected, actual, and diff artifacts. If intentional, update only this component visual baseline.' })
140
+ };
141
+ }
142
+ catch (error) {
143
+ const summary = `${input.visualCase.id} component visual capture failed: ${error instanceof Error ? error.message : String(error)}`;
144
+ return {
145
+ id: `visual.${input.visualCase.id}`,
146
+ suite: 'visual',
147
+ target,
148
+ status: 'fail',
149
+ severity: blocking ? 'blocking' : 'review',
150
+ summary,
151
+ artifacts: [expectedArtifact],
152
+ metadata: {
153
+ classification: 'tool-error',
154
+ ...createComponentSourceMetadata(input),
155
+ viewport,
156
+ baselinePath: input.visualCase.baseline,
157
+ ...createComponentMetadata(input.visualCase, input.componentSource)
158
+ },
159
+ suggestedNextStep: 'Fix the component visual runtime setup, then rerun Reflection.'
160
+ };
161
+ }
91
162
  }
92
163
  async function captureComponentScreenshot(input) {
93
164
  const context = await createBrowserContext(input.browser, input.viewport, input.viewportSize);
94
165
  try {
95
166
  const page = await context.newPage();
96
- await page.goto(input.storyUrl, { waitUntil: 'domcontentloaded' });
167
+ await page.goto(input.targetUrl, { waitUntil: 'domcontentloaded' });
97
168
  await page.waitForLoadState('networkidle', { timeout: 2_000 }).catch(() => undefined);
98
- if (input.framing) {
169
+ if (input.componentSource === 'portal') {
170
+ await waitForPortalReady(page);
171
+ if (!input.viewportSize) {
172
+ throw new Error('Portal component visual cases require viewportSize.');
173
+ }
174
+ await assertPortalFrameDimensions(page, input.viewportSize);
175
+ }
176
+ else if (input.framing) {
99
177
  await applyComponentFraming(page, input.framing);
100
178
  }
101
179
  if (input.browserState) {
@@ -140,6 +218,28 @@ async function applyComponentFraming(page, framing) {
140
218
  `
141
219
  });
142
220
  }
221
+ async function waitForPortalReady(page) {
222
+ await page.waitForFunction(() => {
223
+ const portalState = globalThis;
224
+ return portalState.__reflectionPortalReady === true || typeof portalState.__reflectionPortalError === 'string';
225
+ }, undefined, { timeout: 5_000 });
226
+ const portalError = await page.evaluate(() => {
227
+ const portalState = globalThis;
228
+ return portalState.__reflectionPortalError;
229
+ });
230
+ if (portalError) {
231
+ throw new Error(portalError);
232
+ }
233
+ }
234
+ async function assertPortalFrameDimensions(page, viewportSize) {
235
+ const frame = await page.locator('#reflection-root').boundingBox({ timeout: 2_000 });
236
+ if (!frame) {
237
+ throw new Error('Reflection portal frame #reflection-root was not found.');
238
+ }
239
+ if (frame.width !== viewportSize.width || frame.height !== viewportSize.height) {
240
+ throw new Error(`Reflection portal frame rendered ${frame.width}x${frame.height}, expected ${viewportSize.width}x${viewportSize.height}.`);
241
+ }
242
+ }
143
243
  async function applyBrowserState(page, browserState) {
144
244
  if (browserState.animationStabilization.disableAnimations !== false) {
145
245
  await page.addStyleTag({ content: '*, *::before, *::after { animation: none !important; transition: none !important; }' });
@@ -154,18 +254,38 @@ async function applyBrowserState(page, browserState) {
154
254
  await page.waitForTimeout(browserState.animationStabilization.waitMs);
155
255
  }
156
256
  }
157
- function createComponentStateMetadata(visualCase) {
257
+ function createComponentStateMetadata(visualCase, componentSource) {
158
258
  return {
159
- statePolicy: visualCase.browserState ? 'browser-forced-with-stabilization' : 'story-controlled',
259
+ statePolicy: visualCase.browserState ? 'browser-forced-with-stabilization' : componentSource === 'portal' ? 'portal-controlled' : 'story-controlled',
160
260
  ...(visualCase.stateNote ? { stateNote: visualCase.stateNote } : {}),
161
261
  ...(visualCase.browserState ? { browserState: visualCase.browserState } : {})
162
262
  };
163
263
  }
164
- function createComponentMetadata(visualCase) {
264
+ function createComponentMetadata(visualCase, componentSource) {
265
+ const framing = resolveComponentFraming(visualCase.framing, componentSource);
165
266
  return {
166
267
  ...(visualCase.viewportSize ? { viewportSize: visualCase.viewportSize } : {}),
167
- ...(visualCase.framing ? { framing: visualCase.framing } : {}),
168
- ...createComponentStateMetadata(visualCase)
268
+ ...(framing ? { framing } : {}),
269
+ ...createComponentStateMetadata(visualCase, componentSource)
270
+ };
271
+ }
272
+ function createComponentSourceMetadata(input) {
273
+ return {
274
+ componentSource: input.componentSource,
275
+ ...(input.visualCase.storyId ? { storyId: input.visualCase.storyId, storyUrl: input.targetUrl } : {}),
276
+ ...(input.visualCase.path ? { path: input.visualCase.path, portalUrl: input.targetUrl } : {})
277
+ };
278
+ }
279
+ function resolveComponentFraming(framing, componentSource) {
280
+ if (!framing && componentSource === 'portal') {
281
+ return { rootSelector: '#reflection-root', align: 'center', padding: 0 };
282
+ }
283
+ if (!framing) {
284
+ return undefined;
285
+ }
286
+ return {
287
+ ...framing,
288
+ rootSelector: framing.rootSelector ?? (componentSource === 'portal' ? '#reflection-root' : '#storybook-root')
169
289
  };
170
290
  }
171
291
  function resolveCaseBaselinePath(visualCase) {
@@ -190,4 +310,10 @@ function createComponentVisualSummary(id, result) {
190
310
  }
191
311
  return `${id} differs from approved component visual baseline by ${(result.diffRatio * 100).toFixed(2)}% (${result.diffPixels} pixels)${result.thresholdReason ? `, exceeding ${result.thresholdReason}` : ''}.`;
192
312
  }
313
+ function isStorybookCase(visualCase) {
314
+ return typeof visualCase.storyId === 'string';
315
+ }
316
+ function isPortalCase(visualCase) {
317
+ return typeof visualCase.path === 'string' && visualCase.viewportSize !== undefined;
318
+ }
193
319
  //# sourceMappingURL=component-visual-contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-visual-contract.js","sourceRoot":"","sources":["../../../src/contracts/component/component-visual-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-visual-contract.js","sourceRoot":"","sources":["../../../src/contracts/component/component-visual-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ViewportSize } from '../../integrations/playwright/context-factory.js';
2
+ export type ReflectionPortalFraming = {
3
+ background?: string | undefined;
4
+ align: 'center' | 'start';
5
+ padding: number;
6
+ };
7
+ export type ReflectionPortalMountInput = {
8
+ id: string;
9
+ path: string;
10
+ root: HTMLElement;
11
+ viewport: string;
12
+ viewportSize: ViewportSize;
13
+ framing: ReflectionPortalFraming;
14
+ };
15
+ export type ReflectionPortalCleanup = void | (() => void);
16
+ export type ReflectionPortalMountResult = ReflectionPortalCleanup | Promise<ReflectionPortalCleanup>;
17
+ export type ReflectionPortalMount = (input: ReflectionPortalMountInput) => ReflectionPortalMountResult;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=portal-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-entry.js","sourceRoot":"","sources":["../../../src/contracts/component/portal-entry.ts"],"names":[],"mappings":""}
@@ -94,22 +94,30 @@ declare const ReflectionConfigSchema: z.ZodObject<{
94
94
  }, z.core.$strip>>;
95
95
  component: z.ZodOptional<z.ZodObject<{
96
96
  enabled: z.ZodDefault<z.ZodBoolean>;
97
- storybook: z.ZodObject<{
97
+ storybook: z.ZodOptional<z.ZodObject<{
98
98
  command: z.ZodString;
99
99
  readyUrl: z.ZodString;
100
100
  reuseExisting: z.ZodDefault<z.ZodBoolean>;
101
101
  timeoutMs: z.ZodDefault<z.ZodNumber>;
102
- }, z.core.$strip>;
102
+ }, z.core.$strip>>;
103
+ portal: z.ZodOptional<z.ZodObject<{
104
+ entry: z.ZodString;
105
+ readyUrl: z.ZodString;
106
+ reuseExisting: z.ZodDefault<z.ZodBoolean>;
107
+ timeoutMs: z.ZodDefault<z.ZodNumber>;
108
+ viteConfig: z.ZodOptional<z.ZodString>;
109
+ }, z.core.$strip>>;
103
110
  cases: z.ZodDefault<z.ZodArray<z.ZodObject<{
104
111
  id: z.ZodString;
105
- storyId: z.ZodString;
112
+ storyId: z.ZodOptional<z.ZodString>;
113
+ path: z.ZodOptional<z.ZodString>;
106
114
  viewport: z.ZodDefault<z.ZodString>;
107
115
  viewportSize: z.ZodOptional<z.ZodObject<{
108
116
  width: z.ZodNumber;
109
117
  height: z.ZodNumber;
110
118
  }, z.core.$strip>>;
111
119
  framing: z.ZodOptional<z.ZodObject<{
112
- rootSelector: z.ZodDefault<z.ZodString>;
120
+ rootSelector: z.ZodOptional<z.ZodString>;
113
121
  background: z.ZodOptional<z.ZodString>;
114
122
  align: z.ZodDefault<z.ZodEnum<{
115
123
  center: "center";
@@ -27,7 +27,7 @@ const ViewportSizeSchema = z.object({
27
27
  height: z.number().int().positive()
28
28
  });
29
29
  const ComponentFramingSchema = z.object({
30
- rootSelector: z.string().min(1).default('#storybook-root'),
30
+ rootSelector: z.string().min(1).optional(),
31
31
  background: z.string().min(1).optional(),
32
32
  align: z.enum(['center', 'start']).default('center'),
33
33
  padding: z.number().int().nonnegative().default(0)
@@ -102,9 +102,11 @@ const ComponentBrowserStateSchema = z
102
102
  });
103
103
  }
104
104
  });
105
- const ComponentVisualCaseSchema = z.object({
105
+ const ComponentVisualCaseSchema = z
106
+ .object({
106
107
  id: z.string().min(1),
107
- storyId: z.string().min(1),
108
+ storyId: z.string().min(1).optional(),
109
+ path: z.string().min(1).optional(),
108
110
  viewport: z.string().min(1).default('component'),
109
111
  viewportSize: ViewportSizeSchema.optional(),
110
112
  framing: ComponentFramingSchema.optional(),
@@ -115,16 +117,69 @@ const ComponentVisualCaseSchema = z.object({
115
117
  strict: z.boolean().optional(),
116
118
  stateNote: z.string().min(1).optional(),
117
119
  browserState: ComponentBrowserStateSchema.optional()
120
+ })
121
+ .superRefine((value, context) => {
122
+ if (value.storyId && value.path) {
123
+ context.addIssue({
124
+ code: z.ZodIssueCode.custom,
125
+ path: ['storyId'],
126
+ message: 'component visual cases must define either storyId or path, not both'
127
+ });
128
+ }
129
+ if (!value.storyId && !value.path) {
130
+ context.addIssue({
131
+ code: z.ZodIssueCode.custom,
132
+ path: ['storyId'],
133
+ message: 'component visual cases must define storyId for Storybook or path for portal'
134
+ });
135
+ }
136
+ if (value.path && !value.viewportSize) {
137
+ context.addIssue({
138
+ code: z.ZodIssueCode.custom,
139
+ path: ['viewportSize'],
140
+ message: 'portal component visual cases require viewportSize'
141
+ });
142
+ }
118
143
  });
119
- const ComponentContractSchema = z.object({
144
+ const ComponentContractSchema = z
145
+ .object({
120
146
  enabled: z.boolean().default(true),
121
- storybook: z.object({
147
+ storybook: z
148
+ .object({
122
149
  command: z.string(),
123
150
  readyUrl: z.string().url(),
124
151
  reuseExisting: z.boolean().default(true),
125
152
  timeoutMs: z.number().int().positive().default(60_000)
126
- }),
153
+ })
154
+ .optional(),
155
+ portal: z
156
+ .object({
157
+ entry: z.string().min(1),
158
+ readyUrl: z.string().url(),
159
+ reuseExisting: z.boolean().default(true),
160
+ timeoutMs: z.number().int().positive().default(60_000),
161
+ viteConfig: z.string().min(1).optional()
162
+ })
163
+ .optional(),
127
164
  cases: z.array(ComponentVisualCaseSchema).default([])
165
+ })
166
+ .superRefine((value, context) => {
167
+ for (const [index, visualCase] of value.cases.entries()) {
168
+ if (visualCase.storyId && !value.storybook) {
169
+ context.addIssue({
170
+ code: z.ZodIssueCode.custom,
171
+ path: ['cases', index, 'storyId'],
172
+ message: 'storyId component visual cases require component.storybook'
173
+ });
174
+ }
175
+ if (visualCase.path && !value.portal) {
176
+ context.addIssue({
177
+ code: z.ZodIssueCode.custom,
178
+ path: ['cases', index, 'path'],
179
+ message: 'path component visual cases require component.portal'
180
+ });
181
+ }
182
+ }
128
183
  });
129
184
  const ReflectionConfigSchema = z.object({
130
185
  project: z.string().min(1),
@@ -150,7 +205,34 @@ export function validateReflectionConfig(input) {
150
205
  const details = parsed.error.issues.map((issue) => `${issue.path.join('.') || 'config'}: ${issue.message}`).join('; ');
151
206
  throw new Error(`Invalid Reflection config: ${details}`);
152
207
  }
153
- return parsed.data;
208
+ return normalizeReflectionConfig(parsed.data);
209
+ }
210
+ function normalizeReflectionConfig(config) {
211
+ const component = config.contracts.component;
212
+ if (!component) {
213
+ return config;
214
+ }
215
+ return {
216
+ ...config,
217
+ contracts: {
218
+ ...config.contracts,
219
+ component: {
220
+ ...component,
221
+ cases: component.cases.map((visualCase) => {
222
+ if (!visualCase.framing) {
223
+ return visualCase;
224
+ }
225
+ return {
226
+ ...visualCase,
227
+ framing: {
228
+ ...visualCase.framing,
229
+ rootSelector: visualCase.framing.rootSelector ?? (visualCase.path ? '#reflection-root' : '#storybook-root')
230
+ }
231
+ };
232
+ })
233
+ }
234
+ }
235
+ };
154
236
  }
155
237
  export async function loadReflectionConfig(configPath) {
156
238
  const resolvedConfigPath = resolve(configPath);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -40,9 +40,11 @@ export type RouteVisualTarget = TargetBase & {
40
40
  };
41
41
  export type ComponentVisualTarget = TargetBase & {
42
42
  family: 'component-visual';
43
- story: {
44
- storyId: string;
45
- statePolicy: 'story-controlled' | 'browser-forced-with-stabilization';
43
+ component: {
44
+ source: 'storybook' | 'portal';
45
+ storyId?: string | undefined;
46
+ path?: string | undefined;
47
+ statePolicy: 'story-controlled' | 'portal-controlled' | 'browser-forced-with-stabilization';
46
48
  stateNote?: string | undefined;
47
49
  browserState?: unknown;
48
50
  };
@@ -49,9 +49,15 @@ export function compileReflectionTargets(config) {
49
49
  source: 'reflection-config',
50
50
  runModes: ['visual', 'full'],
51
51
  blocking: componentCase.blocking === true || componentCase.strict === true,
52
- story: {
53
- storyId: componentCase.storyId,
54
- statePolicy: componentCase.browserState ? 'browser-forced-with-stabilization' : 'story-controlled',
52
+ component: {
53
+ source: componentCase.path ? 'portal' : 'storybook',
54
+ ...(componentCase.storyId ? { storyId: componentCase.storyId } : {}),
55
+ ...(componentCase.path ? { path: componentCase.path } : {}),
56
+ statePolicy: componentCase.browserState
57
+ ? 'browser-forced-with-stabilization'
58
+ : componentCase.path
59
+ ? 'portal-controlled'
60
+ : 'story-controlled',
55
61
  ...(componentCase.stateNote ? { stateNote: componentCase.stateNote } : {}),
56
62
  ...(componentCase.browserState ? { browserState: componentCase.browserState } : {})
57
63
  },
@@ -1 +1 @@
1
- {"version":3,"file":"target-ir.js","sourceRoot":"","sources":["../../src/core/target-ir.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"target-ir.js","sourceRoot":"","sources":["../../src/core/target-ir.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { defineReflection } from './core/define-reflection.js';
2
2
  export type { ReflectionConfig, ReflectionConfigInput, RunMode } from './core/config.js';
3
+ export type { ReflectionPortalCleanup, ReflectionPortalFraming, ReflectionPortalMount, ReflectionPortalMountInput, ReflectionPortalMountResult } from './contracts/component/portal-entry.js';
@@ -0,0 +1,25 @@
1
+ import type { ManagedServer } from '../../core/server-manager.js';
2
+ import type { ViewportSize } from '../playwright/context-factory.js';
3
+ import type { ComponentFraming } from '../../contracts/component/component-visual-contract.js';
4
+ export type PortalComponentCase = {
5
+ id: string;
6
+ path: string;
7
+ viewport: string;
8
+ viewportSize: ViewportSize;
9
+ framing?: ComponentFraming | undefined;
10
+ };
11
+ export type PortalConfig = {
12
+ entry: string;
13
+ readyUrl: string;
14
+ reuseExisting?: boolean | undefined;
15
+ timeoutMs?: number | undefined;
16
+ viteConfig?: string | undefined;
17
+ };
18
+ export type ReflectionPortalServer = {
19
+ baseUrl: string;
20
+ server: ManagedServer;
21
+ };
22
+ export declare function startReflectionPortalServer(config: PortalConfig, cases: PortalComponentCase[], options: {
23
+ cwd: string;
24
+ rootDir: string;
25
+ }): Promise<ReflectionPortalServer>;
@@ -0,0 +1,186 @@
1
+ import { mkdir, rm, writeFile } from 'node:fs/promises';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { createServer } from 'vite';
4
+ import { waitForUrl } from '../../core/server-manager.js';
5
+ export async function startReflectionPortalServer(config, cases, options) {
6
+ if ((config.reuseExisting ?? true) && (await isUrlReachable(config.readyUrl))) {
7
+ return {
8
+ baseUrl: config.readyUrl,
9
+ server: {
10
+ readyUrl: config.readyUrl,
11
+ reused: true,
12
+ started: false,
13
+ pid: undefined,
14
+ stop: async () => undefined
15
+ }
16
+ };
17
+ }
18
+ const rootDir = resolve(options.rootDir);
19
+ await mkdir(rootDir, { recursive: true });
20
+ await writePortalFiles({
21
+ rootDir,
22
+ entryPath: resolve(options.cwd, config.entry),
23
+ cases
24
+ });
25
+ const readyUrl = new URL(config.readyUrl);
26
+ const port = Number(readyUrl.port || (readyUrl.protocol === 'https:' ? 443 : 80));
27
+ const host = readyUrl.hostname || '127.0.0.1';
28
+ const vite = await createServer(createViteConfig({ config, rootDir, host, port, cwd: options.cwd }));
29
+ try {
30
+ await vite.listen();
31
+ await waitForUrl(config.readyUrl, { timeoutMs: config.timeoutMs ?? 60_000 });
32
+ }
33
+ catch (error) {
34
+ await vite.close();
35
+ await rm(rootDir, { recursive: true, force: true });
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new Error(`Reflection portal did not become ready at ${config.readyUrl}: ${message}`);
38
+ }
39
+ return {
40
+ baseUrl: config.readyUrl,
41
+ server: {
42
+ readyUrl: config.readyUrl,
43
+ reused: false,
44
+ started: true,
45
+ pid: undefined,
46
+ stop: async () => {
47
+ await vite.close();
48
+ }
49
+ }
50
+ };
51
+ }
52
+ function createViteConfig(input) {
53
+ return {
54
+ root: input.rootDir,
55
+ configFile: input.config.viteConfig ? resolve(input.cwd, input.config.viteConfig) : false,
56
+ appType: 'spa',
57
+ logLevel: 'silent',
58
+ server: {
59
+ host: input.host,
60
+ port: input.port,
61
+ strictPort: true,
62
+ hmr: false,
63
+ fs: {
64
+ allow: [input.cwd, input.rootDir, dirname(resolve(input.cwd, input.config.entry))]
65
+ }
66
+ }
67
+ };
68
+ }
69
+ async function writePortalFiles(input) {
70
+ await writeFile(resolve(input.rootDir, 'index.html'), [
71
+ '<!doctype html>',
72
+ '<html>',
73
+ '<head>',
74
+ ' <meta charset="utf-8" />',
75
+ ' <meta name="viewport" content="width=device-width, initial-scale=1" />',
76
+ ' <title>Reflection Portal</title>',
77
+ '</head>',
78
+ '<body>',
79
+ ' <script type="module" src="/reflection-portal.js"></script>',
80
+ '</body>',
81
+ '</html>',
82
+ ''
83
+ ].join('\n'), 'utf8');
84
+ await writeFile(resolve(input.rootDir, 'reflection-portal.js'), renderPortalScript(input), 'utf8');
85
+ }
86
+ function renderPortalScript(input) {
87
+ return `
88
+ import { mountReflectionCase } from "${toViteFsImport(input.entryPath)}";
89
+
90
+ const cases = ${JSON.stringify(input.cases.map((visualCase) => serializePortalCase(visualCase)))};
91
+
92
+ const state = globalThis;
93
+ state.__reflectionPortalReady = false;
94
+ state.__reflectionPortalError = undefined;
95
+
96
+ function normalizePath(path) {
97
+ if (!path.startsWith("/")) return \`/\${path}\`;
98
+ return path;
99
+ }
100
+
101
+ function setPortalError(error) {
102
+ state.__reflectionPortalError = error instanceof Error ? error.message : String(error);
103
+ state.__reflectionPortalReady = false;
104
+ }
105
+
106
+ function applyFrame(frame, caseRoot, visualCase) {
107
+ const framing = visualCase.framing;
108
+ const background = framing.background || "transparent";
109
+ document.documentElement.style.cssText = "margin:0;width:100%;height:100%;overflow:hidden;background:" + background;
110
+ document.body.style.cssText = "margin:0;width:100%;height:100%;overflow:hidden;background:" + background;
111
+
112
+ frame.style.boxSizing = "border-box";
113
+ frame.style.width = visualCase.viewportSize.width + "px";
114
+ frame.style.height = visualCase.viewportSize.height + "px";
115
+ frame.style.margin = "0";
116
+ frame.style.padding = framing.padding + "px";
117
+ frame.style.background = background;
118
+ frame.style.overflow = "hidden";
119
+
120
+ if (framing.align === "center") {
121
+ frame.style.display = "grid";
122
+ frame.style.placeItems = "center";
123
+ } else {
124
+ frame.style.display = "block";
125
+ caseRoot.style.width = "100%";
126
+ caseRoot.style.height = "100%";
127
+ }
128
+ }
129
+
130
+ async function boot() {
131
+ const currentPath = normalizePath(window.location.pathname);
132
+ const visualCase = cases.find((entry) => normalizePath(entry.path) === currentPath);
133
+ if (!visualCase) {
134
+ throw new Error("No Reflection portal case configured for " + currentPath);
135
+ }
136
+
137
+ document.body.innerHTML = '<main id="reflection-root"><div id="reflection-case-root"></div></main>';
138
+ const frame = document.getElementById("reflection-root");
139
+ const caseRoot = document.getElementById("reflection-case-root");
140
+ applyFrame(frame, caseRoot, visualCase);
141
+
142
+ const cleanup = await mountReflectionCase({
143
+ id: visualCase.id,
144
+ path: visualCase.path,
145
+ root: caseRoot,
146
+ viewport: visualCase.viewport,
147
+ viewportSize: visualCase.viewportSize,
148
+ framing: {
149
+ background: visualCase.framing.background,
150
+ align: visualCase.framing.align,
151
+ padding: visualCase.framing.padding
152
+ }
153
+ });
154
+
155
+ state.__reflectionPortalCleanup = cleanup;
156
+ state.__reflectionPortalReady = true;
157
+ }
158
+
159
+ boot().catch(setPortalError);
160
+ `;
161
+ }
162
+ function serializePortalCase(visualCase) {
163
+ return {
164
+ ...visualCase,
165
+ framing: {
166
+ rootSelector: visualCase.framing?.rootSelector ?? '#reflection-root',
167
+ background: visualCase.framing?.background,
168
+ align: visualCase.framing?.align ?? 'center',
169
+ padding: visualCase.framing?.padding ?? 0
170
+ }
171
+ };
172
+ }
173
+ function toViteFsImport(path) {
174
+ return `/@fs/${path.replaceAll('\\', '/')}`;
175
+ }
176
+ async function isUrlReachable(url) {
177
+ try {
178
+ const response = await fetch(url, { cache: 'no-store' });
179
+ await response.body?.cancel();
180
+ return response.status >= 200 && response.status < 500;
181
+ }
182
+ catch {
183
+ return false;
184
+ }
185
+ }
186
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/integrations/portal/server.ts"],"names":[],"mappings":"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"}
@@ -44,9 +44,12 @@ Typical files:
44
44
  server/
45
45
  app.log
46
46
  storybook.log
47
+ portal/
48
+ index.html
49
+ reflection-portal.js
47
50
  ```
48
51
 
49
- Not every run contains every folder. For example, a browser-only run may have screenshots but no component visual artifacts.
52
+ Not every run contains every folder. For example, a browser-only run may have screenshots but no component visual artifacts. Portal component runs keep the generated wrapper under `server/portal/` so the exact runtime shell used for the capture is available for inspection.
50
53
 
51
54
  ## `report.json`
52
55
 
@@ -187,6 +187,10 @@ Each design command runs as a project-owned process and writes stdout/stderr evi
187
187
 
188
188
  ## Component visual contract
189
189
 
190
+ Component visuals can render from Storybook or from a Reflection-generated portal. Storybook remains useful for existing projects; the portal is intended for strict design-system baselines where a dedicated route should render exactly one component state.
191
+
192
+ ### Storybook runtime
193
+
190
194
  ```ts
191
195
  component: {
192
196
  enabled: true,
@@ -229,9 +233,58 @@ component: {
229
233
 
230
234
  Component visual cases resolve Storybook `/index.json`, open the story iframe, capture an actual screenshot, and compare it against the configured baseline.
231
235
 
232
- `viewport` accepts the built-in presets (`desktop`, `tablet`, `mobile`, `component`) and any custom string label. When `viewportSize` is provided, Reflection captures the Storybook iframe at that exact `{ width, height }` instead of resolving the string preset. Use this for exported Figma baselines: the PNG dimensions must match `viewportSize` exactly or the check fails with `visual-dimension-mismatch`.
236
+ ### Generated portal runtime
233
237
 
234
- `framing` lets a component visual case normalize the Storybook canvas before the screenshot:
238
+ ```ts
239
+ component: {
240
+ enabled: true,
241
+ portal: {
242
+ entry: './tests/reflection/react-portal.tsx',
243
+ readyUrl: 'http://127.0.0.1:6106',
244
+ reuseExisting: true,
245
+ timeoutMs: 60_000,
246
+ viteConfig: './vite.config.ts'
247
+ },
248
+ cases: [
249
+ {
250
+ id: 'primary-button',
251
+ path: '/reflection/button/primary/light',
252
+ viewport: 'button-default',
253
+ viewportSize: { width: 390, height: 220 },
254
+ framing: {
255
+ rootSelector: '#reflection-root',
256
+ background: '#ffffff',
257
+ align: 'center',
258
+ padding: 0
259
+ },
260
+ baselineRoot: 'tests/fixtures/baselines',
261
+ baseline: 'components/button/primary.chromium-linux.light.png',
262
+ threshold: { maxDiffPixels: 0, maxDiffPixelRatio: 0 },
263
+ strict: true
264
+ }
265
+ ]
266
+ }
267
+ ```
268
+
269
+ Portal cases use `path` instead of `storyId`. Reflection generates a Vite-backed portal for the run, creates `#reflection-root` and `#reflection-case-root`, imports the configured `portal.entry`, and calls `mountReflectionCase` for the matching path.
270
+
271
+ The portal entry exports a mount function:
272
+
273
+ ```ts
274
+ import type { ReflectionPortalMountInput } from 'reflection-check';
275
+
276
+ export function mountReflectionCase(input: ReflectionPortalMountInput) {
277
+ input.root.textContent = input.id;
278
+ }
279
+ ```
280
+
281
+ Portal cases must define `viewportSize`. Reflection uses that exact size for the browser viewport and for the generated portal frame. This keeps the config as the source of truth for frame dimensions.
282
+
283
+ ### Shared case fields
284
+
285
+ `viewport` accepts the built-in presets (`desktop`, `tablet`, `mobile`, `component`) and any custom string label. When `viewportSize` is provided, Reflection captures at that exact `{ width, height }` instead of resolving the string preset. Use this for exported Figma baselines: the PNG dimensions must match `viewportSize` exactly or the check fails with `visual-dimension-mismatch`.
286
+
287
+ `framing` lets a component visual case normalize the runtime frame before the screenshot:
235
288
 
236
289
  ```ts
237
290
  framing: {
@@ -242,11 +295,18 @@ framing: {
242
295
  }
243
296
  ```
244
297
 
245
- Use it when the approved baseline is a fixed Figma frame: `background` should match the Figma frame fill, `align: 'center'` centers the story root content, and `padding` reserves explicit frame padding. `rootSelector` defaults to `#storybook-root`.
298
+ Use it when the approved baseline is a fixed Figma frame: `background` should match the Figma frame fill, `align: 'center'` centers the component in the frame, and `padding` reserves explicit frame padding. `rootSelector` defaults to `#storybook-root` for Storybook cases and `#reflection-root` for portal cases.
299
+
300
+ Case/runtime rules:
301
+
302
+ - Storybook cases use `storyId` and require `component.storybook`.
303
+ - Portal cases use `path` and require `component.portal`.
304
+ - A case cannot define both `storyId` and `path`.
305
+ - Portal cases require `viewportSize`; strict Figma baselines should not rely on implicit preset dimensions.
246
306
 
247
307
  Pseudo-state policy:
248
308
 
249
- - Prefer story-controlled variants for hover, focus, active, selected, open, and disabled states.
309
+ - Prefer runtime-controlled variants for hover, focus, active, selected, open, and disabled states.
250
310
  - If a browser-forced state is necessary, configure `browserState` with `kind: 'hover' | 'focus'`, a selector, and effective animation stabilization.
251
311
  - Reflection records `statePolicy` metadata in reports so reviewers can tell whether the state came from the story or was forced in the browser.
252
312
 
@@ -30,7 +30,7 @@ The IR currently supports four families:
30
30
  | --- | --- | --- | --- |
31
31
  | `browser-route` | browser routes | `smoke`, `full` | Render a route and evaluate DOM/layout/console expectations. |
32
32
  | `route-visual` | browser visual smoke cases | `smoke`, `full` | Compare route screenshots against read-only baselines. |
33
- | `component-visual` | Storybook component cases | `visual`, `full` | Compare component story screenshots against read-only baselines. |
33
+ | `component-visual` | Storybook or portal component cases | `visual`, `full` | Compare component screenshots against read-only baselines. |
34
34
  | `design-command` | design command checks | `design`, `full` | Run project-owned design contract commands. |
35
35
 
36
36
  All targets include:
@@ -59,20 +59,20 @@ console.log(ir.targets.map((target) => `${target.family}:${target.id}`));
59
59
  // ]
60
60
  ```
61
61
 
62
- The compiler preserves visual metadata that matters to later review, including zero-valued thresholds, explicit component `viewportSize` values, and component `framing`. Do not use truthiness checks when copying optional numeric metadata; use explicit `!== undefined` checks so values like `0` survive.
62
+ The compiler preserves visual metadata that matters to later review, including component source (`storybook` or `portal`), portal paths, story ids, zero-valued thresholds, explicit component `viewportSize` values, and component `framing`. Do not use truthiness checks when copying optional numeric metadata; use explicit `!== undefined` checks so values like `0` survive.
63
63
 
64
64
  ## Adapter contract
65
65
 
66
66
  Adapters should compile their input into the same target shape and mark targets with `source: 'adapter'`.
67
67
 
68
- Adapters must not make core runners aware of the source format. The runner should receive normalized route/story/visual/command information and should not branch on adapter names.
68
+ Adapters must not make core runners aware of the source format. The runner should receive normalized route/component/visual/command information and should not branch on adapter names.
69
69
 
70
70
  A good adapter is:
71
71
 
72
72
  - **optional** — normal Reflection config works without it;
73
73
  - **validated** — malformed adapter input fails before runner execution;
74
74
  - **neutral** — no external product names leak into core commands or reports unless the user explicitly names their own target ids;
75
- - **lossless enough for review** — route paths, viewports, component viewport sizes, component framing, expectations, baselines, thresholds, and blocking semantics are preserved in IR.
75
+ - **lossless enough for review** — route paths, component portal paths or Storybook ids, viewports, component viewport sizes, component framing, expectations, baselines, thresholds, and blocking semantics are preserved in IR.
76
76
 
77
77
  ## Route manifest adapter proof
78
78
 
@@ -82,7 +82,7 @@ If the matching browser route result is missing, the visual check becomes a revi
82
82
 
83
83
  ## Component visual baselines
84
84
 
85
- Component visual cases use Storybook. Reflection resolves the configured `storyId` through Storybook `/index.json`, opens the iframe URL, captures a screenshot, and compares it with the configured baseline.
85
+ Component visual cases can use Storybook or a Reflection-generated portal. Storybook cases resolve `storyId` through Storybook `/index.json`; portal cases open a configured `path` in a generated Vite runtime.
86
86
 
87
87
  ```ts
88
88
  component: {
@@ -111,11 +111,40 @@ component: {
111
111
  }
112
112
  ```
113
113
 
114
- For component baselines exported from a design tool, treat `viewportSize` and `framing` as part of the visual contract. The exported PNG width/height and the runtime Storybook screenshot width/height must be identical. `viewport` may be a built-in preset such as `component` or a semantic custom label such as `button-default`; when `viewportSize` is present, the explicit dimensions win.
114
+ Portal cases use the same case fields, but replace `storyId` with `path` and configure `component.portal`:
115
115
 
116
- `framing` is optional and only affects the screenshot when configured. It applies fixed canvas styles before capture so a Storybook story can match a Figma frame:
116
+ ```ts
117
+ component: {
118
+ portal: {
119
+ entry: './tests/reflection/react-portal.tsx',
120
+ readyUrl: 'http://127.0.0.1:6106'
121
+ },
122
+ cases: [
123
+ {
124
+ id: 'button-primary',
125
+ path: '/reflection/button/primary/light',
126
+ viewport: 'button-default',
127
+ viewportSize: { width: 390, height: 220 },
128
+ framing: {
129
+ rootSelector: '#reflection-root',
130
+ background: '#ffffff',
131
+ align: 'center',
132
+ padding: 0
133
+ },
134
+ baselineRoot: 'tests/fixtures/baselines',
135
+ baseline: 'components/button/primary.chromium-linux.light.png',
136
+ threshold: { maxDiffPixels: 0, maxDiffPixelRatio: 0 },
137
+ strict: true
138
+ }
139
+ ]
140
+ }
141
+ ```
142
+
143
+ For component baselines exported from a design tool, treat `viewportSize` and `framing` as part of the visual contract. The exported PNG width/height and the runtime screenshot width/height must be identical. `viewport` may be a built-in preset such as `component` or a semantic custom label such as `button-default`; when `viewportSize` is present, the explicit dimensions win. Portal cases require `viewportSize`, and the generated frame uses those dimensions directly.
144
+
145
+ `framing` is optional and only affects the screenshot when configured. It applies fixed canvas styles before capture so the runtime component can match a Figma frame:
117
146
 
118
- - `rootSelector`: story root to frame; defaults to `#storybook-root`.
147
+ - `rootSelector`: root to frame; defaults to `#storybook-root` for Storybook and `#reflection-root` for portal cases.
119
148
  - `background`: CSS background matching the Figma frame fill.
120
149
  - `align`: `center` or `start`; `center` places the component in the middle of the frame.
121
150
  - `padding`: integer pixel padding inside the frame.
@@ -145,6 +174,7 @@ When the browser must force a state, Reflection requires effective animation sta
145
174
  Reports include `statePolicy` metadata:
146
175
 
147
176
  - `story-controlled` when no `browserState` is configured;
177
+ - `portal-controlled` when the generated portal renders the state;
148
178
  - `browser-forced-with-stabilization` when Reflection applies hover/focus in the browser.
149
179
 
150
180
  ## Thresholds
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reflection-check",
3
- "version": "0.0.4",
3
+ "version": "0.0.5",
4
4
  "description": "CLI for evidence-backed rendered UI validation.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -45,8 +45,9 @@
45
45
  "commander": "^14.0.3",
46
46
  "jiti": "^2.7.0",
47
47
  "pixelmatch": "^7.2.0",
48
- "pngjs": "^7.0.0",
49
48
  "playwright": "^1.60.0",
49
+ "pngjs": "^7.0.0",
50
+ "vite": "^8.0.16",
50
51
  "zod": "^4.4.3"
51
52
  },
52
53
  "devDependencies": {