@vizejs/vite-plugin-musea 0.12.0 → 0.14.0

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.
Files changed (58) hide show
  1. package/dist/{a11y-C6xqILwZ.js → a11y-7maCHrYD.js} +164 -143
  2. package/dist/a11y-7maCHrYD.js.map +1 -0
  3. package/dist/a11y-CjpWs0s0.js +3 -0
  4. package/dist/autogen-Dx-SIBf_.js +3 -0
  5. package/dist/{autogen-ymQnARZK.js → autogen-dfLosbY_.js} +97 -85
  6. package/dist/autogen-dfLosbY_.js.map +1 -0
  7. package/dist/cli/index.d.ts +61 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/{cli.js → cli/index.js} +146 -138
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/gallery/assets/{cssMode-CcXMra0m.js → cssMode-Bh8Yx3kR.js} +1 -1
  12. package/dist/gallery/assets/{editor.api-DngZ07MW.js → editor.api-CmduODkO.js} +1 -1
  13. package/dist/gallery/assets/{editor.main-B7YVyVYi.js → editor.main-BGzZ6mZ7.js} +2 -2
  14. package/dist/gallery/assets/{freemarker2-VkSVdked.js → freemarker2-Cn3sOnVM.js} +1 -1
  15. package/dist/gallery/assets/{handlebars-YowBDP4W.js → handlebars-Bxtt_XDm.js} +1 -1
  16. package/dist/gallery/assets/{html-DJtSoeLQ.js → html-wxaydg4H.js} +1 -1
  17. package/dist/gallery/assets/{htmlMode-CfXIwSy5.js → htmlMode-EOxgEq0U.js} +1 -1
  18. package/dist/gallery/assets/{index-0_abCQYn.css → index-Cp7AWs0x.css} +1 -1
  19. package/dist/gallery/assets/{index-D94E3YZ4.js → index-DiHal_rf.js} +3 -3
  20. package/dist/gallery/assets/{javascript-OR93O4ZK.js → javascript-DN4Z2eWk.js} +1 -1
  21. package/dist/gallery/assets/{jsonMode-Cgol9YnW.js → jsonMode-tuRq32My.js} +1 -1
  22. package/dist/gallery/assets/{liquid-CrwTQQjB.js → liquid-D4J1rGOp.js} +1 -1
  23. package/dist/gallery/assets/{mdx-DwR18PX6.js → mdx-DxeOF6WC.js} +1 -1
  24. package/dist/gallery/assets/{monaco.contribution-CtStVxRd.js → monaco.contribution-C457czx3.js} +2 -2
  25. package/dist/gallery/assets/{python-D86nvZ4A.js → python-HLp-R9eA.js} +1 -1
  26. package/dist/gallery/assets/{razor-1784i4Ae.js → razor-2U4-SYvG.js} +1 -1
  27. package/dist/gallery/assets/{tsMode-DMkSHunc.js → tsMode-jWuA-Omz.js} +1 -1
  28. package/dist/gallery/assets/{typescript-Bu4A5btR.js → typescript-rOoZv0aH.js} +1 -1
  29. package/dist/gallery/assets/{xml-Sny7sZAt.js → xml-BfA65ILD.js} +1 -1
  30. package/dist/gallery/assets/{yaml-DKD1HvU8.js → yaml-CddGDANN.js} +1 -1
  31. package/dist/gallery/index.html +2 -2
  32. package/dist/index.css +488 -0
  33. package/dist/index.css.map +1 -0
  34. package/dist/index.d.ts +342 -24
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +925 -1320
  37. package/dist/index.js.map +1 -1
  38. package/dist/{vrt-CrjRhMVE.js → vrt-5_c9P1YY.js} +224 -184
  39. package/dist/vrt-5_c9P1YY.js.map +1 -0
  40. package/dist/{vrt-BuMkTrLK.d.ts → vrt-D6OumJUH.d.ts} +76 -260
  41. package/dist/vrt-D6OumJUH.d.ts.map +1 -0
  42. package/dist/vrt.d.ts +1 -1
  43. package/dist/vrt.js +1 -1
  44. package/package.json +7 -7
  45. package/dist/a11y-C6xqILwZ.js.map +0 -1
  46. package/dist/a11y-cQIJXM5k.d.ts +0 -61
  47. package/dist/a11y-cQIJXM5k.d.ts.map +0 -1
  48. package/dist/a11y.d.ts +0 -3
  49. package/dist/a11y.js +0 -3
  50. package/dist/autogen-D3Zjc3zI.d.ts +0 -64
  51. package/dist/autogen-D3Zjc3zI.d.ts.map +0 -1
  52. package/dist/autogen-ymQnARZK.js.map +0 -1
  53. package/dist/autogen.d.ts +0 -2
  54. package/dist/autogen.js +0 -3
  55. package/dist/cli.d.ts +0 -1
  56. package/dist/cli.js.map +0 -1
  57. package/dist/vrt-BuMkTrLK.d.ts.map +0 -1
  58. package/dist/vrt-CrjRhMVE.js.map +0 -1
@@ -1,119 +1,21 @@
1
- import { BrowserContext, Page } from "playwright";
1
+ import { Browser, BrowserContext, Page } from "playwright";
2
2
 
3
- //#region src/types.d.ts
3
+ //#region src/types/vrt.d.ts
4
4
  /**
5
- * Theme color definitions for Musea gallery UI.
6
- * All properties are optional — unspecified colors inherit from the `base` built-in theme.
5
+ * Viewport configuration.
7
6
  */
8
7
  /**
9
- * Theme color definitions for Musea gallery UI.
10
- * All properties are optional — unspecified colors inherit from the `base` built-in theme.
11
- */
12
- interface MuseaThemeColors {
13
- bgPrimary?: string;
14
- bgSecondary?: string;
15
- bgTertiary?: string;
16
- bgElevated?: string;
17
- accent?: string;
18
- accentHover?: string;
19
- accentSubtle?: string;
20
- text?: string;
21
- textSecondary?: string;
22
- textMuted?: string;
23
- border?: string;
24
- borderSubtle?: string;
25
- success?: string;
26
- error?: string;
27
- info?: string;
28
- warning?: string;
29
- shadow?: string;
30
- }
31
- /**
32
- * Custom theme definition.
33
- */
34
- interface MuseaTheme {
35
- /** Unique name for this theme. */
36
- name: string;
37
- /** Built-in theme to inherit unspecified colors from. @default 'dark' */
38
- base?: "dark" | "light";
39
- /** Color overrides. */
40
- colors: MuseaThemeColors;
41
- }
42
- /**
43
- * Musea plugin options.
8
+ * Viewport configuration.
44
9
  */
45
- interface MuseaOptions {
46
- /**
47
- * Glob patterns to include Art files.
48
- * @default ['**\/*.art.vue']
49
- */
50
- include?: string[];
51
- /**
52
- * Glob patterns to exclude.
53
- * @default ['node_modules/**', 'dist/**']
54
- */
55
- exclude?: string[];
56
- /**
57
- * Base path for Musea gallery UI.
58
- * @default '/__musea__'
59
- */
60
- basePath?: string;
61
- /**
62
- * Enable Storybook CSF output.
63
- * @default false
64
- */
65
- storybookCompat?: boolean;
66
- /**
67
- * Storybook output directory (when storybookCompat is true).
68
- * @default '.storybook/stories'
69
- */
70
- storybookOutDir?: string;
71
- /**
72
- * Enable inline <art> blocks in regular .vue SFC files.
73
- * When enabled, regular .vue files containing <art> blocks will be
74
- * included in the gallery. Use <Self> to reference the host component.
75
- * @default false
76
- */
77
- inlineArt?: boolean;
78
- /**
79
- * VRT (Visual Regression Testing) configuration.
80
- */
81
- vrt?: VrtOptions;
82
- /**
83
- * Path to Style Dictionary tokens JSON file or directory.
84
- * Supports standard Style Dictionary format.
85
- * @example 'src/tokens.json' or 'src/tokens/'
86
- */
87
- tokensPath?: string;
88
- /**
89
- * Gallery theme configuration.
90
- *
91
- * - `'dark'` / `'light'` — use a built-in theme (default: `'dark'`)
92
- * - `'system'` — follow the OS color-scheme preference
93
- * - `MuseaTheme` — single custom theme (replaces defaults)
94
- * - `MuseaTheme[]` — multiple custom themes (first is default, user can switch)
95
- */
96
- theme?: "dark" | "light" | "system" | MuseaTheme | MuseaTheme[];
97
- /**
98
- * CSS files to inject into component preview iframes.
99
- * Useful for loading global styles (custom properties, resets, fonts, etc.)
100
- * that components depend on.
101
- *
102
- * Paths are resolved relative to the project root.
103
- * @example ['app/assets/styles/main.css']
104
- */
105
- previewCss?: string[];
106
- /**
107
- * Path to a module that exports a default setup function for preview iframes.
108
- * The function receives the Vue `App` instance and can install plugins
109
- * (e.g. vue-i18n, vue-router) before the component is mounted.
110
- *
111
- * Signature: `(app: App) => void | Promise<void>`
112
- *
113
- * Path is resolved relative to the project root.
114
- * @example 'musea.preview.ts'
115
- */
116
- previewSetup?: string;
10
+ interface ViewportConfig {
11
+ /** Width in pixels */
12
+ width: number;
13
+ /** Height in pixels */
14
+ height: number;
15
+ /** Device scale factor */
16
+ deviceScaleFactor?: number;
17
+ /** Viewport name for identification */
18
+ name?: string;
117
19
  }
118
20
  /**
119
21
  * VRT configuration options.
@@ -136,18 +38,55 @@ interface VrtOptions {
136
38
  viewports?: ViewportConfig[];
137
39
  }
138
40
  /**
139
- * Viewport configuration.
41
+ * Screenshot capture configuration.
140
42
  */
141
- interface ViewportConfig {
142
- /** Width in pixels */
143
- width: number;
144
- /** Height in pixels */
145
- height: number;
146
- /** Device scale factor */
147
- deviceScaleFactor?: number;
148
- /** Viewport name for identification */
149
- name?: string;
43
+ interface CaptureConfig {
44
+ /** Capture full page vs viewport only */
45
+ fullPage?: boolean;
46
+ /** Wait for network idle before capture */
47
+ waitForNetwork?: boolean;
48
+ /** Additional wait time after load (ms) */
49
+ settleTime?: number;
50
+ /** CSS selector to wait for */
51
+ waitSelector?: string;
52
+ /** Elements to hide before capture (CSS selectors) */
53
+ hideElements?: string[];
54
+ /** Elements to mask before capture (CSS selectors) */
55
+ maskElements?: string[];
150
56
  }
57
+ /**
58
+ * Image comparison configuration.
59
+ */
60
+ interface ComparisonConfig {
61
+ /** Anti-aliasing detection */
62
+ antiAliasing?: boolean;
63
+ /** Alpha channel comparison */
64
+ alpha?: boolean;
65
+ /** Diff image output format */
66
+ diffStyle?: "overlay" | "sideBySide" | "diffOnly" | "animated";
67
+ /** Diff highlight color */
68
+ diffColor?: {
69
+ r: number;
70
+ g: number;
71
+ b: number;
72
+ };
73
+ }
74
+ /**
75
+ * CI-specific configuration.
76
+ */
77
+ interface CiConfig {
78
+ /** Fail build on any diff */
79
+ failOnDiff?: boolean;
80
+ /** Auto-update baselines on main branch */
81
+ autoUpdateOnMain?: boolean;
82
+ /** Generate JSON report for CI */
83
+ jsonReport?: boolean;
84
+ /** Retry failed tests */
85
+ retries?: number;
86
+ } //#endregion
87
+ //#region src/types/art.d.ts
88
+
89
+ //# sourceMappingURL=vrt.d.ts.map
151
90
  /**
152
91
  * Art file metadata.
153
92
  */
@@ -201,136 +140,10 @@ interface CsfOutput {
201
140
  code: string;
202
141
  /** Suggested filename */
203
142
  filename: string;
204
- }
205
- /**
206
- * Palette API response.
207
- */
208
- interface PaletteApiResponse {
209
- title: string;
210
- controls: PaletteControl[];
211
- groups: string[];
212
- json: string;
213
- typescript: string;
214
- }
215
- /**
216
- * Single prop control definition.
217
- */
218
- interface PaletteControl {
219
- name: string;
220
- control: ControlKind;
221
- default_value?: unknown;
222
- description?: string;
223
- required: boolean;
224
- options: Array<{
225
- label: string;
226
- value: unknown;
227
- }>;
228
- range?: {
229
- min: number;
230
- max: number;
231
- step?: number;
232
- };
233
- group?: string;
234
- }
235
- /**
236
- * Supported control kinds for the props panel.
237
- */
238
- type ControlKind = "text" | "number" | "boolean" | "range" | "select" | "radio" | "color" | "date" | "object" | "array" | "file" | "raw";
239
- /**
240
- * Analysis API response (Props/Emits info).
241
- */
242
- interface AnalysisApiResponse {
243
- props: Array<{
244
- name: string;
245
- type: string;
246
- required: boolean;
247
- default_value?: unknown;
248
- }>;
249
- emits: string[];
250
- }
251
- /**
252
- * Screenshot capture configuration.
253
- */
254
- interface CaptureConfig {
255
- /** Capture full page vs viewport only */
256
- fullPage?: boolean;
257
- /** Wait for network idle before capture */
258
- waitForNetwork?: boolean;
259
- /** Additional wait time after load (ms) */
260
- settleTime?: number;
261
- /** CSS selector to wait for */
262
- waitSelector?: string;
263
- /** Elements to hide before capture (CSS selectors) */
264
- hideElements?: string[];
265
- /** Elements to mask before capture (CSS selectors) */
266
- maskElements?: string[];
267
- }
268
- /**
269
- * Image comparison configuration.
270
- */
271
- interface ComparisonConfig {
272
- /** Anti-aliasing detection */
273
- antiAliasing?: boolean;
274
- /** Alpha channel comparison */
275
- alpha?: boolean;
276
- /** Diff image output format */
277
- diffStyle?: "overlay" | "sideBySide" | "diffOnly" | "animated";
278
- /** Diff highlight color */
279
- diffColor?: {
280
- r: number;
281
- g: number;
282
- b: number;
283
- };
284
- }
285
- /**
286
- * CI-specific configuration.
287
- */
288
- interface CiConfig {
289
- /** Fail build on any diff */
290
- failOnDiff?: boolean;
291
- /** Auto-update baselines on main branch */
292
- autoUpdateOnMain?: boolean;
293
- /** Generate JSON report for CI */
294
- jsonReport?: boolean;
295
- /** Retry failed tests */
296
- retries?: number;
297
- }
298
- /**
299
- * Accessibility testing options.
300
- */
301
- interface A11yOptions {
302
- /** Enable a11y auditing during VRT */
303
- enabled?: boolean;
304
- /** axe-core rules to include */
305
- includeRules?: string[];
306
- /** axe-core rules to exclude */
307
- excludeRules?: string[];
308
- /** WCAG level (A, AA, AAA) */
309
- level?: "A" | "AA" | "AAA";
310
- }
311
- /**
312
- * Accessibility audit result.
313
- */
314
- interface A11yResult {
315
- artPath: string;
316
- variantName: string;
317
- violations: A11yViolation[];
318
- passes: number;
319
- incomplete: number;
320
- }
321
- /**
322
- * Single accessibility violation.
323
- */
324
- interface A11yViolation {
325
- id: string;
326
- impact: "minor" | "moderate" | "serious" | "critical";
327
- description: string;
328
- helpUrl: string;
329
- nodes: number;
330
143
  } //#endregion
331
- //#region src/vrt/runner.d.ts
144
+ //#region src/vrt/types.d.ts
332
145
 
333
- //# sourceMappingURL=types.d.ts.map
146
+ //# sourceMappingURL=art.d.ts.map
334
147
  /**
335
148
  * VRT test result for a single variant.
336
149
  */
@@ -386,6 +199,10 @@ interface PixelCompareOptions {
386
199
  b: number;
387
200
  };
388
201
  }
202
+
203
+ //#endregion
204
+ //#region src/vrt/runner.d.ts
205
+ //# sourceMappingURL=types.d.ts.map
389
206
  /**
390
207
  * VRT runner using Playwright.
391
208
  */
@@ -397,6 +214,14 @@ declare class MuseaVrtRunner {
397
214
  private browser;
398
215
  private startTime;
399
216
  constructor(options?: ExtendedVrtOptions);
217
+ /** @internal */
218
+ getBrowser(): Browser | null;
219
+ /** @internal */
220
+ getOptions(): Required<VrtOptions>;
221
+ /** @internal */
222
+ getCapture(): Required<CaptureConfig>;
223
+ /** @internal */
224
+ getComparison(): ComparisonConfig;
400
225
  /**
401
226
  * Initialize Playwright browser.
402
227
  */
@@ -450,15 +275,6 @@ declare class MuseaVrtRunner {
450
275
  * Get VRT summary statistics.
451
276
  */
452
277
  getSummary(results: VrtResult[]): VrtSummary;
453
- /**
454
- * Build URL for variant preview.
455
- */
456
- private buildVariantUrl;
457
- /**
458
- * Compare two PNG images and generate a diff image.
459
- * Returns pixel difference statistics.
460
- */
461
- private compareImages;
462
278
  }
463
279
 
464
280
  //#endregion
@@ -477,5 +293,5 @@ declare function generateVrtJsonReport(results: VrtResult[], summary: VrtSummary
477
293
  //#endregion
478
294
  //# sourceMappingURL=report.d.ts.map
479
295
 
480
- export { A11yOptions, A11yResult, AnalysisApiResponse, ArtFileInfo, ArtMetadata, ArtVariant, CaptureConfig, CiConfig, ComparisonConfig, CsfOutput, ExtendedVrtOptions, MuseaOptions, MuseaTheme, MuseaThemeColors, MuseaVrtRunner as MuseaVrtRunner$1, PaletteApiResponse, PixelCompareOptions, ViewportConfig, VrtOptions, VrtResult, VrtSummary, generateVrtJsonReport as generateVrtJsonReport$1, generateVrtReport as generateVrtReport$1 };
481
- //# sourceMappingURL=vrt-BuMkTrLK.d.ts.map
296
+ export { ArtFileInfo, ArtMetadata, ArtVariant, CaptureConfig, CiConfig, ComparisonConfig, CsfOutput, ExtendedVrtOptions, MuseaVrtRunner as MuseaVrtRunner$1, PixelCompareOptions, ViewportConfig, VrtOptions, VrtResult, VrtSummary, generateVrtJsonReport as generateVrtJsonReport$1, generateVrtReport as generateVrtReport$1 };
297
+ //# sourceMappingURL=vrt-D6OumJUH.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vrt-D6OumJUH.d.ts","names":[],"sources":["../src/types/vrt.ts","../src/types/art.ts","../src/vrt/types.ts","../src/vrt/runner.ts","../src/vrt/report.ts"],"sourcesContent":null,"mappings":";;;;;;;;;UAGiB,cAAA;;;EAAA;;;;EAcA;;;;AAuBjB;;UAvBiB,UAAA;;AAyCjB;;;;EAciB;;;;;;;ACrEjB;;cD+Bc;;AClBd;;;UDwBiB,aAAA;ECbA;EAAW,QAAA,CAAA,EAAA,OAAA;EAAA;EAIL,cAEX,CAAA,EAAA,OAAA;EAAU;;;;EAkBL;;;;;;;AC1CjB;UFiDiB,gBAAA;;;EE/BA;;;;EAYA;EAAmB,SAAA,CAAA,EAAA;IACxB,CAAA,EAAA,MAAA;IACG,CAAA,EAAA,MAAA;IACR,CAAA,EAAA,MAAA;EAAQ,CAAA;AAHuC;;;;AAWrC,UFsBA,QAAA,CEtBmB;;;;;;;ECfvB;EAAc,OAAA,CAAA,EAAA,MAAA;CAAA;;;;;;;UFhCV,WAAA;;;EDAA,SAAA,CAAA,EAAA,MAAc;;;;EAcd,KAAA,CAAA,EAAA,MAAU;;;;AAuB3B;UCxBiB,UAAA;;;ED0CA,SAAA,EAAA,OAAA;;SCrCR;;ADmDT;;;UC7CiB,WAAA;;;;EAxBA,QAAA,EA4BL,WA5BgB;;YA8BhB;;EAjBK,cAAU,EAAA,OAAA;;;;EAWV,SAAA,EAAA,OAAW;EAAA;EAAA,UAIhB,EAAA,MAAA;EAAW;EAED,QAAA,CAAA,EAAA,OAAA;;;;AAkBtB;;;UAAiB,SAAA;;;;EC1CA,QAAA,EAAA,MAAS;;;;;;;AFN1B;UEMiB,SAAA;;;EFQA,QAAA,EELL,cFsBE;;;;EAMG,QAAA,CAAA,EAAA,MAAa;;;;EAkBb,KAAA,CAAA,EAAA,MAAA;;;;AAcjB;;UE7CiB,UAAA;;;;;EDxBA,OAAA,EAAA,MAAW;;;;AAa5B;;UCuBiB,kBAAA,SAA2B;YAChC;EDbK,UAAA,CAAA,ECcF,gBDda;EAAA,EAAA,CAAA,ECerB,QDfqB;EAAA;EAIL,IAEX,CAAA,EAAA,OAAA;AAAU;;;;AAkBL,UCDA,mBAAA,CDCS;;;;;;;EC1CT;;;;IAkBA,CAAA,EAAA,MAAU;;;;;;;AFV3B;;;cGkBa,cAAA;EHKI,QAAA,OAAA;;;;EAkBA,QAAA,OAAA;;wBGfM;;EH6BN,UAAA,CAAA,CAAQ,EGLT,OHKS,GAAA,IAAA;;gBGAT,SAAS;;gBAKT,SAAS;;mBAKN;EF/EF;;;UEsFD;EFzEC;;;WEkFA;EFvEA;;;EAIM,KAEX,CAAA,CAAA,EE2EK,OF3EL,CAAA,IAAA,CAAA;EAAU;;;UEkFN;EFhEC;;;wBEuEa,iCAAiC,QAAQ;;;;EDjHtD,QAAA,CAAA,QAAS,ECmKZ,WDhKF,EAAA,EAAA,OAAc,EAAA,MAAA,EAAA,SAAA,EAAA;;MCmKrB,QAAQ;;ADpJb;;yBCgKS,4CAEK,kCAET,QAAQ;;ADxJb;;EAAoC,UACxB,CAAA,QAAA,EC8JiB,cD9JjB,CAAA,EC8JkC,OD9JlC,CAAA;IACG,IAAA,EC6J+C,ID7J/C;IACR,OAAA,EC4JsE,cD5JtE;EAAQ,CAAA,CAAA;EAHuC;;;2BC8KrB,cAAc;EDnK9B;;;0BCwLe,gCAAgC;;;;EAvMnD,YAAA,CAAA,QAAc,EAqNI,WArNJ,EAAA,CAAA,EAqNoB,OArNpB,CAAA,MAAA,CAAA;EAAA;;;EAgCJ,UAKE,CAAA,OAAA,EAoNH,SApNG,EAAA,CAAA,EAoNW,UApNX;;;;;;;;;AHvDzB;iBIDgB,iBAAA,UAA2B,sBAAsB;;;AJwBjE;iBI+OgB,qBAAA,UAA+B,sBAAsB"}
package/dist/vrt.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { ExtendedVrtOptions, MuseaVrtRunner$1 as MuseaVrtRunner, PixelCompareOptions, VrtResult, VrtSummary, generateVrtJsonReport$1 as generateVrtJsonReport, generateVrtReport$1 as generateVrtReport } from "./vrt-BuMkTrLK.js";
1
+ import { ExtendedVrtOptions, MuseaVrtRunner$1 as MuseaVrtRunner, PixelCompareOptions, VrtResult, VrtSummary, generateVrtJsonReport$1 as generateVrtJsonReport, generateVrtReport$1 as generateVrtReport } from "./vrt-D6OumJUH.js";
2
2
  export { ExtendedVrtOptions, MuseaVrtRunner, PixelCompareOptions, VrtResult, VrtSummary, MuseaVrtRunner as default, generateVrtJsonReport, generateVrtReport };
package/dist/vrt.js CHANGED
@@ -1,3 +1,3 @@
1
- import { MuseaVrtRunner, generateVrtJsonReport, generateVrtReport, vrt_default } from "./vrt-CrjRhMVE.js";
1
+ import { MuseaVrtRunner, generateVrtJsonReport, generateVrtReport, vrt_default } from "./vrt-5_c9P1YY.js";
2
2
 
3
3
  export { MuseaVrtRunner, vrt_default as default, generateVrtJsonReport, generateVrtReport };
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@vizejs/vite-plugin-musea",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "Vite plugin for Musea - Component gallery for Vue components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "bin": {
9
- "musea-vrt": "./dist/cli.js"
9
+ "musea-vrt": "./dist/cli/index.js"
10
10
  },
11
11
  "exports": {
12
12
  ".": {
@@ -18,8 +18,8 @@
18
18
  "types": "./dist/vrt.d.ts"
19
19
  },
20
20
  "./cli": {
21
- "import": "./dist/cli.js",
22
- "types": "./dist/cli.d.ts"
21
+ "import": "./dist/cli/index.js",
22
+ "types": "./dist/cli/index.d.ts"
23
23
  },
24
24
  "./a11y": {
25
25
  "import": "./dist/a11y.js",
@@ -52,7 +52,7 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "pngjs": "^7.0.0",
55
- "@vizejs/native": "0.12.0"
55
+ "@vizejs/native": "0.14.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@mdi/js": "^7.4.47",
@@ -68,13 +68,13 @@
68
68
  "vite": "^8.0.0-beta.0",
69
69
  "vue": "^3.5.0",
70
70
  "vue-router": "^4.5.0",
71
- "@vizejs/vite-plugin": "0.12.0"
71
+ "@vizejs/vite-plugin": "0.14.0"
72
72
  },
73
73
  "peerDependencies": {
74
74
  "axe-core": "^4.7.0",
75
75
  "playwright": "^1.40.0",
76
76
  "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0",
77
- "@vizejs/vite-plugin": "0.12.0"
77
+ "@vizejs/vite-plugin": "0.14.0"
78
78
  },
79
79
  "peerDependenciesMeta": {
80
80
  "playwright": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y-C6xqILwZ.js","names":["options: A11yOptions","artFiles: ArtFileInfo[]","baseUrl: string","vrtRunner?: MuseaVrtRunner","results: A11yResult[]","defaultViewport: ViewportConfig","page: Page | null","context: { page: Page; context: { close(): Promise<void> } } | null","page: Page","artPath: string","variantName: string","violations: A11yViolation[]","impact: string","runOnly: Record<string, unknown>","tags: string[]","rules: Record<string, { enabled: boolean }>","str: string"],"sources":["../src/a11y.ts"],"sourcesContent":["/**\n * Accessibility (a11y) testing module for Musea.\n * Uses axe-core for automated accessibility auditing via Playwright.\n */\n\nimport type { Page } from \"playwright\";\nimport type {\n ArtFileInfo,\n A11yResult,\n A11yViolation,\n A11yOptions,\n ViewportConfig,\n} from \"./types.js\";\nimport type { MuseaVrtRunner } from \"./vrt.js\";\nimport path from \"node:path\";\n\n/**\n * A11y audit summary.\n */\nexport interface A11ySummary {\n totalComponents: number;\n totalVariants: number;\n totalViolations: number;\n criticalCount: number;\n seriousCount: number;\n moderateCount: number;\n minorCount: number;\n}\n\n/**\n * axe-core result shape (subset).\n */\ninterface AxeResult {\n violations: Array<{\n id: string;\n impact: string;\n description: string;\n helpUrl: string;\n nodes: Array<unknown>;\n }>;\n passes: Array<unknown>;\n incomplete: Array<unknown>;\n}\n\n/**\n * A11y runner using axe-core via Playwright.\n */\nexport class MuseaA11yRunner {\n private options: Required<A11yOptions>;\n\n constructor(options: A11yOptions = {}) {\n this.options = {\n enabled: options.enabled ?? true,\n includeRules: options.includeRules ?? [],\n excludeRules: options.excludeRules ?? [],\n level: options.level ?? \"AA\",\n };\n }\n\n /**\n * Run a11y audits on all art file variants.\n * Reuses VRT runner's browser if available.\n */\n async runAudits(\n artFiles: ArtFileInfo[],\n baseUrl: string,\n vrtRunner?: MuseaVrtRunner,\n ): Promise<A11yResult[]> {\n const results: A11yResult[] = [];\n const defaultViewport: ViewportConfig = { width: 1280, height: 720, name: \"desktop\" };\n\n for (const art of artFiles) {\n for (const variant of art.variants) {\n if (variant.skipVrt) continue;\n\n let page: Page | null = null;\n let context: { page: Page; context: { close(): Promise<void> } } | null = null;\n\n try {\n if (vrtRunner) {\n context = await vrtRunner.createPage(defaultViewport);\n page = context.page;\n } else {\n // Standalone mode: launch own browser\n const { chromium } = await import(\"playwright\");\n const browser = await chromium.launch({ headless: true });\n const ctx = await browser.newContext({\n viewport: { width: defaultViewport.width, height: defaultViewport.height },\n });\n page = await ctx.newPage();\n context = { page, context: ctx };\n }\n\n const variantUrl = this.buildVariantUrl(baseUrl, art.path, variant.name);\n await page.goto(variantUrl, { waitUntil: \"networkidle\" });\n await page.waitForSelector(\".musea-variant\", { timeout: 10000 });\n await page.waitForTimeout(200);\n\n const result = await this.auditPage(page, art.path, variant.name);\n results.push(result);\n } catch (error) {\n results.push({\n artPath: art.path,\n variantName: variant.name,\n violations: [\n {\n id: \"audit-error\",\n impact: \"critical\",\n description: `Audit failed: ${error instanceof Error ? error.message : String(error)}`,\n helpUrl: \"\",\n nodes: 0,\n },\n ],\n passes: 0,\n incomplete: 0,\n });\n } finally {\n if (context) {\n await context.context.close();\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Audit a single page using axe-core.\n */\n async auditPage(page: Page, artPath: string, variantName: string): Promise<A11yResult> {\n // Inject axe-core into the page\n const axeSource = await this.getAxeSource();\n await page.evaluate(axeSource);\n\n // Build axe-core run options\n const runOptions = this.buildAxeOptions();\n\n // Run axe-core\n const axeResult = (await page.evaluate((opts) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (window as any).axe.run(document, opts);\n }, runOptions)) as AxeResult;\n\n // Map to our result format\n const violations: A11yViolation[] = axeResult.violations.map((v) => ({\n id: v.id,\n impact: v.impact as A11yViolation[\"impact\"],\n description: v.description,\n helpUrl: v.helpUrl,\n nodes: v.nodes.length,\n }));\n\n return {\n artPath,\n variantName,\n violations,\n passes: axeResult.passes.length,\n incomplete: axeResult.incomplete.length,\n };\n }\n\n /**\n * Get summary statistics from results.\n */\n getSummary(results: A11yResult[]): A11ySummary {\n const components = new Set(results.map((r) => r.artPath));\n const allViolations = results.flatMap((r) => r.violations);\n\n return {\n totalComponents: components.size,\n totalVariants: results.length,\n totalViolations: allViolations.length,\n criticalCount: allViolations.filter((v) => v.impact === \"critical\").length,\n seriousCount: allViolations.filter((v) => v.impact === \"serious\").length,\n moderateCount: allViolations.filter((v) => v.impact === \"moderate\").length,\n minorCount: allViolations.filter((v) => v.impact === \"minor\").length,\n };\n }\n\n /**\n * Generate HTML report.\n */\n generateHtmlReport(results: A11yResult[]): string {\n const summary = this.getSummary(results);\n const timestamp = new Date().toLocaleString(\"ja-JP\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n\n const impactColor = (impact: string): string => {\n switch (impact) {\n case \"critical\":\n return \"#f87171\";\n case \"serious\":\n return \"#fb923c\";\n case \"moderate\":\n return \"#fbbf24\";\n case \"minor\":\n return \"#60a5fa\";\n default:\n return \"#7b8494\";\n }\n };\n\n const resultItems = results\n .filter((r) => r.violations.length > 0)\n .map((r) => {\n const artName = path.basename(r.artPath, \".art.vue\");\n const violationRows = r.violations\n .map(\n (v) => `\n <tr>\n <td><span style=\"color:${impactColor(v.impact)};font-weight:600;text-transform:uppercase;font-size:0.6875rem\">${escapeHtml(v.impact)}</span></td>\n <td><code>${escapeHtml(v.id)}</code></td>\n <td>${escapeHtml(v.description)}</td>\n <td>${v.nodes}</td>\n <td>${v.helpUrl ? `<a href=\"${escapeHtml(v.helpUrl)}\" target=\"_blank\" style=\"color:#60a5fa\">docs</a>` : \"\"}</td>\n </tr>`,\n )\n .join(\"\");\n\n return `\n <div class=\"result\">\n <div class=\"result-header\">\n <div class=\"result-info\">\n <span class=\"result-name\">${escapeHtml(artName)} / ${escapeHtml(r.variantName)}</span>\n <span class=\"result-count\">${r.violations.length} violation(s)</span>\n </div>\n </div>\n <table class=\"violations-table\">\n <thead><tr><th>Impact</th><th>Rule</th><th>Description</th><th>Nodes</th><th>Help</th></tr></thead>\n <tbody>${violationRows}</tbody>\n </table>\n </div>`;\n })\n .join(\"\");\n\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>A11y Report - Musea</title>\n <style>\n :root {\n --musea-bg-primary: #0d0d0d;\n --musea-bg-secondary: #1a1815;\n --musea-bg-tertiary: #252220;\n --musea-accent: #a34828;\n --musea-text: #e6e9f0;\n --musea-text-muted: #7b8494;\n --musea-border: #3a3530;\n }\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n background: var(--musea-bg-primary);\n color: var(--musea-text);\n min-height: 100vh;\n line-height: 1.5;\n }\n .header {\n background: var(--musea-bg-secondary);\n border-bottom: 1px solid var(--musea-border);\n padding: 1rem 2rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n .logo { font-size: 1.25rem; font-weight: 700; color: var(--musea-accent); }\n .header-meta { color: var(--musea-text-muted); font-size: 0.8125rem; }\n .main { max-width: 1200px; margin: 0 auto; padding: 2rem; }\n .summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 1rem; margin-bottom: 2rem; }\n .stat { background: var(--musea-bg-secondary); border: 1px solid var(--musea-border); border-radius: 8px; padding: 1rem; text-align: center; }\n .stat-value { font-size: 1.75rem; font-weight: 700; font-variant-numeric: tabular-nums; }\n .stat-label { color: var(--musea-text-muted); font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.08em; }\n .stat.critical .stat-value { color: #f87171; }\n .stat.serious .stat-value { color: #fb923c; }\n .stat.moderate .stat-value { color: #fbbf24; }\n .stat.minor .stat-value { color: #60a5fa; }\n .stat.total .stat-value { color: var(--musea-text); }\n .results { display: flex; flex-direction: column; gap: 1rem; }\n .result { background: var(--musea-bg-secondary); border: 1px solid var(--musea-border); border-radius: 8px; overflow: hidden; }\n .result-header { padding: 1rem; background: var(--musea-bg-tertiary); display: flex; justify-content: space-between; align-items: center; }\n .result-name { font-weight: 600; }\n .result-count { color: var(--musea-text-muted); font-size: 0.8125rem; }\n .violations-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }\n .violations-table th { padding: 0.75rem 1rem; text-align: left; color: var(--musea-text-muted); font-weight: 500; font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.08em; border-bottom: 1px solid var(--musea-border); }\n .violations-table td { padding: 0.75rem 1rem; border-bottom: 1px solid var(--musea-border); }\n .violations-table code { background: var(--musea-bg-tertiary); padding: 0.125rem 0.375rem; border-radius: 3px; font-size: 0.75rem; }\n .all-clear { background: rgba(74, 222, 128, 0.1); border: 1px solid rgba(74, 222, 128, 0.2); border-radius: 8px; padding: 2rem; text-align: center; }\n .all-clear-text { color: #4ade80; font-weight: 600; }\n </style>\n</head>\n<body>\n <header class=\"header\">\n <div><span class=\"logo\">Musea</span> <span style=\"color:var(--musea-text-muted);font-size:0.875rem;margin-left:1rem\">Accessibility Report</span></div>\n <div class=\"header-meta\">${timestamp}</div>\n </header>\n <main class=\"main\">\n <div class=\"summary\">\n <div class=\"stat total\"><div class=\"stat-value\">${summary.totalViolations}</div><div class=\"stat-label\">Violations</div></div>\n <div class=\"stat critical\"><div class=\"stat-value\">${summary.criticalCount}</div><div class=\"stat-label\">Critical</div></div>\n <div class=\"stat serious\"><div class=\"stat-value\">${summary.seriousCount}</div><div class=\"stat-label\">Serious</div></div>\n <div class=\"stat moderate\"><div class=\"stat-value\">${summary.moderateCount}</div><div class=\"stat-label\">Moderate</div></div>\n <div class=\"stat minor\"><div class=\"stat-value\">${summary.minorCount}</div><div class=\"stat-label\">Minor</div></div>\n </div>\n ${\n summary.totalViolations === 0\n ? `<div class=\"all-clear\"><div class=\"all-clear-text\">No accessibility violations found across ${summary.totalVariants} variant(s)</div></div>`\n : `<div class=\"results\">${resultItems}</div>`\n }\n </main>\n</body>\n</html>`;\n }\n\n /**\n * Generate JSON report for CI integration.\n */\n generateJsonReport(results: A11yResult[]): string {\n const summary = this.getSummary(results);\n return JSON.stringify(\n {\n timestamp: new Date().toISOString(),\n summary,\n results: results.map((r) => ({\n art: path.basename(r.artPath, \".art.vue\"),\n variant: r.variantName,\n violations: r.violations,\n passes: r.passes,\n incomplete: r.incomplete,\n })),\n },\n null,\n 2,\n );\n }\n\n /**\n * Get axe-core source code for injection.\n */\n private async getAxeSource(): Promise<string> {\n try {\n const axeCore = await import(\"axe-core\");\n return axeCore.source;\n } catch {\n throw new Error(\n \"axe-core is not installed. Install it as a peer dependency: npm install axe-core\",\n );\n }\n }\n\n /**\n * Build axe-core run options from configuration.\n */\n private buildAxeOptions(): Record<string, unknown> {\n const runOnly: Record<string, unknown> = {};\n\n // Set WCAG level\n const tags: string[] = [];\n switch (this.options.level) {\n case \"A\":\n tags.push(\"wcag2a\", \"wcag21a\");\n break;\n case \"AA\":\n tags.push(\"wcag2a\", \"wcag2aa\", \"wcag21a\", \"wcag21aa\", \"wcag22aa\");\n break;\n case \"AAA\":\n tags.push(\"wcag2a\", \"wcag2aa\", \"wcag2aaa\", \"wcag21a\", \"wcag21aa\", \"wcag22aa\");\n break;\n }\n\n if (tags.length > 0) {\n runOnly.type = \"tag\";\n runOnly.values = tags;\n }\n\n const rules: Record<string, { enabled: boolean }> = {};\n\n for (const ruleId of this.options.includeRules) {\n rules[ruleId] = { enabled: true };\n }\n for (const ruleId of this.options.excludeRules) {\n rules[ruleId] = { enabled: false };\n }\n\n return {\n ...(Object.keys(runOnly).length > 0 ? { runOnly } : {}),\n ...(Object.keys(rules).length > 0 ? { rules } : {}),\n };\n }\n\n private buildVariantUrl(baseUrl: string, artPath: string, variantName: string): string {\n const encodedPath = encodeURIComponent(artPath);\n const encodedVariant = encodeURIComponent(variantName);\n return `${baseUrl}/__musea__/preview?art=${encodedPath}&variant=${encodedVariant}`;\n }\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#x27;\");\n}\n"],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import { A11yOptions, A11yResult, ArtFileInfo, MuseaVrtRunner$1 as MuseaVrtRunner } from "./vrt-BuMkTrLK.js";
2
- import { Page } from "playwright";
3
-
4
- //#region src/a11y.d.ts
5
- /**
6
- * A11y audit summary.
7
- */
8
-
9
- /**
10
- * A11y audit summary.
11
- */
12
- interface A11ySummary {
13
- totalComponents: number;
14
- totalVariants: number;
15
- totalViolations: number;
16
- criticalCount: number;
17
- seriousCount: number;
18
- moderateCount: number;
19
- minorCount: number;
20
- }
21
- /**
22
- * A11y runner using axe-core via Playwright.
23
- */
24
- declare class MuseaA11yRunner {
25
- private options;
26
- constructor(options?: A11yOptions);
27
- /**
28
- * Run a11y audits on all art file variants.
29
- * Reuses VRT runner's browser if available.
30
- */
31
- runAudits(artFiles: ArtFileInfo[], baseUrl: string, vrtRunner?: MuseaVrtRunner): Promise<A11yResult[]>;
32
- /**
33
- * Audit a single page using axe-core.
34
- */
35
- auditPage(page: Page, artPath: string, variantName: string): Promise<A11yResult>;
36
- /**
37
- * Get summary statistics from results.
38
- */
39
- getSummary(results: A11yResult[]): A11ySummary;
40
- /**
41
- * Generate HTML report.
42
- */
43
- generateHtmlReport(results: A11yResult[]): string;
44
- /**
45
- * Generate JSON report for CI integration.
46
- */
47
- generateJsonReport(results: A11yResult[]): string;
48
- /**
49
- * Get axe-core source code for injection.
50
- */
51
- private getAxeSource;
52
- /**
53
- * Build axe-core run options from configuration.
54
- */
55
- private buildAxeOptions;
56
- private buildVariantUrl;
57
- } //#endregion
58
-
59
- //# sourceMappingURL=a11y.d.ts.map
60
- export { A11ySummary, MuseaA11yRunner as MuseaA11yRunner$1 };
61
- //# sourceMappingURL=a11y-cQIJXM5k.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y-cQIJXM5k.d.ts","names":[],"sources":["../src/a11y.ts"],"sourcesContent":null,"mappings":";;;;;;;;AAmBA;;;UAAiB,WAAA;EA4BJ,eAAA,EAAA,MAAe;EAAA,aAAA,EAAA,MAAA;EAAA,eAGL,EAAA,MAAA;EAAgB,aAczB,EAAA,MAAA;EAAW,YAET,EAAA,MAAA;EAAc,aACjB,EAAA,MAAA;EAAU,UAAlB,EAAA,MAAA;;;;;AAkGgC,cAtHxB,eAAA,CAsHwB;EAAW,QAkBlB,OAAA;EAAU,WA6IV,CAAA,OAAA,CAAA,EAlRP,WAkRO;EAAU;;;;sBApQ1B,4CAEE,iBACX,QAAQ;;;;kBA+DW,6CAA6C,QAAQ;;;;sBAmCvD,eAAe;;;;8BAkBP;;;;8BA6IA"}
package/dist/a11y.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import "./vrt-BuMkTrLK.js";
2
- import { A11ySummary, MuseaA11yRunner$1 as MuseaA11yRunner } from "./a11y-cQIJXM5k.js";
3
- export { A11ySummary, MuseaA11yRunner };
package/dist/a11y.js DELETED
@@ -1,3 +0,0 @@
1
- import { MuseaA11yRunner } from "./a11y-C6xqILwZ.js";
2
-
3
- export { MuseaA11yRunner };
@@ -1,64 +0,0 @@
1
- //#region src/autogen.d.ts
2
- /**
3
- * Variant auto-generation module.
4
- * Generates .art.vue files from component prop analysis.
5
- */
6
- /**
7
- * Autogen configuration options.
8
- */
9
- interface AutogenOptions {
10
- /** Maximum number of variants to generate (default: 20) */
11
- maxVariants?: number;
12
- /** Include a "Default" variant with all default values (default: true) */
13
- includeDefault?: boolean;
14
- /** Include boolean toggle variants (default: true) */
15
- includeBooleanToggles?: boolean;
16
- /** Include enum/union variants (default: true) */
17
- includeEnumVariants?: boolean;
18
- /** Include boundary value variants for numbers (default: false) */
19
- includeBoundaryValues?: boolean;
20
- /** Include empty string variants for optional strings (default: false) */
21
- includeEmptyStrings?: boolean;
22
- }
23
- /**
24
- * Prop definition for variant generation.
25
- */
26
- interface PropDefinition {
27
- name: string;
28
- propType: string;
29
- required: boolean;
30
- defaultValue?: unknown;
31
- }
32
- /**
33
- * Generated variant.
34
- */
35
- interface GeneratedVariant {
36
- name: string;
37
- isDefault: boolean;
38
- props: Record<string, unknown>;
39
- description?: string;
40
- }
41
- /**
42
- * Autogen output.
43
- */
44
- interface AutogenOutput {
45
- variants: GeneratedVariant[];
46
- artFileContent: string;
47
- componentName: string;
48
- }
49
- /**
50
- * Generate .art.vue file for a component.
51
- *
52
- * @param componentPath - Path to the Vue component file
53
- * @param options - Auto-generation options
54
- * @returns Generated .art.vue content and metadata
55
- */
56
- declare function generateArtFile(componentPath: string, options?: AutogenOptions): Promise<AutogenOutput>;
57
- /**
58
- * Write generated .art.vue file to disk.
59
- */
60
- declare function writeArtFile(componentPath: string, options?: AutogenOptions, outputPath?: string): Promise<string>; //#endregion
61
-
62
- //# sourceMappingURL=autogen.d.ts.map
63
- export { AutogenOptions, AutogenOutput, GeneratedVariant, PropDefinition, generateArtFile as generateArtFile$1, writeArtFile as writeArtFile$1 };
64
- //# sourceMappingURL=autogen-D3Zjc3zI.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autogen-D3Zjc3zI.d.ts","names":[],"sources":["../src/autogen.ts"],"sourcesContent":null,"mappings":";;;;;;;;UAYiB,cAAA;EAAA;;;;EAkBA;;;;EAUA;;;;AAUjB;;;;UApBiB,cAAA;;;;EAqFK,YAAA,CAAA,EAAA,OAAe;;;;;AAG3B,UA9EO,gBAAA,CA8EP;;;SA3ED;EAiJa,WAAA,CAAA,EAAA,MAAY;;;;AAIxB;UA9IO,aAAA;YACL;;;;;;;;;;;iBAgEU,eAAA,kCAEX,iBACR,QAAQ;;;;iBAsEW,YAAA,kCAEX,sCAER"}