@vizejs/vite-plugin-musea 0.273.1 → 0.274.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.
@@ -1,2 +1,2 @@
1
- import { a as generateA11yJsonReport, i as generateA11yHtmlReport, n as MuseaA11yRunner, r as computeA11ySummary, t as A11ySummary } from "../index-C5RD-jcD.mjs";
1
+ import { a as generateA11yJsonReport, i as generateA11yHtmlReport, n as MuseaA11yRunner, r as computeA11ySummary, t as A11ySummary } from "../index-leLThbJH.mjs";
2
2
  export { A11ySummary, MuseaA11yRunner, computeA11ySummary, generateA11yHtmlReport, generateA11yJsonReport };
@@ -0,0 +1,61 @@
1
+ import { a as generateGalleryGlobalsScript, n as generateGalleryScript, t as generateGalleryBody } from "./template-CFSGRuGu.mjs";
2
+ //#region src/gallery/styles-base.css?inline
3
+ var styles_base_default = ":root {\n --musea-bg-primary: #e6e2d6;\n --musea-bg-secondary: #ddd9cd;\n --musea-bg-tertiary: #d4d0c4;\n --musea-bg-elevated: #e6e2d6;\n --musea-accent: #121212;\n --musea-accent-hover: #2a2a2a;\n --musea-accent-subtle: #12121214;\n --musea-text: #121212;\n --musea-text-secondary: #3a3a3a;\n --musea-text-muted: #6b6b6b;\n --musea-border: #c8c4b8;\n --musea-border-subtle: #d4d0c4;\n --musea-success: #16a34a;\n --musea-shadow: 0 4px 24px #00000014;\n --musea-radius-sm: 4px;\n --musea-radius-md: 6px;\n --musea-radius-lg: 8px;\n --musea-transition: .15s ease;\n}\n\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nbody {\n background: var(--musea-bg-primary);\n color: var(--musea-text);\n -webkit-font-smoothing: antialiased;\n min-height: 100vh;\n font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n line-height: 1.5;\n}\n";
4
+ //#endregion
5
+ //#region src/gallery/styles-layout.css?inline
6
+ var styles_layout_default = ".header {\n background: var(--musea-bg-secondary);\n border-bottom: 1px solid var(--musea-border);\n z-index: 100;\n justify-content: space-between;\n align-items: center;\n height: 56px;\n padding: 0 1.5rem;\n display: flex;\n position: sticky;\n top: 0;\n}\n\n.header-left {\n align-items: center;\n gap: 1.5rem;\n display: flex;\n}\n\n.logo {\n color: var(--musea-accent);\n align-items: center;\n gap: .5rem;\n font-size: 1.125rem;\n font-weight: 700;\n text-decoration: none;\n display: flex;\n}\n\n.logo-svg {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n}\n\n.logo-icon svg {\n width: 16px;\n height: 16px;\n color: var(--musea-text);\n}\n\n.header-subtitle {\n color: var(--musea-text-muted);\n border-left: 1px solid var(--musea-border);\n padding-left: 1.5rem;\n font-size: .8125rem;\n font-weight: 500;\n}\n\n.search-container {\n width: 280px;\n position: relative;\n}\n\n.search-input {\n background: var(--musea-bg-tertiary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-md);\n width: 100%;\n color: var(--musea-text);\n transition: border-color var(--musea-transition),\n background var(--musea-transition);\n outline: none;\n padding: .5rem .75rem .5rem 2.25rem;\n font-size: .8125rem;\n}\n\n.search-input::placeholder {\n color: var(--musea-text-muted);\n}\n\n.search-input:focus {\n border-color: var(--musea-accent);\n background: var(--musea-bg-elevated);\n}\n\n.search-icon {\n color: var(--musea-text-muted);\n pointer-events: none;\n position: absolute;\n top: 50%;\n left: .75rem;\n transform: translateY(-50%);\n}\n\n.main {\n grid-template-columns: 260px 1fr;\n min-height: calc(100vh - 56px);\n display: grid;\n}\n\n.sidebar {\n background: var(--musea-bg-secondary);\n border-right: 1px solid var(--musea-border);\n overflow: hidden auto;\n}\n\n.sidebar::-webkit-scrollbar {\n width: 6px;\n}\n\n.sidebar::-webkit-scrollbar-track {\n background: none;\n}\n\n.sidebar::-webkit-scrollbar-thumb {\n background: var(--musea-border);\n border-radius: 3px;\n}\n\n.sidebar-section {\n padding: .75rem;\n}\n\n.category-header {\n text-transform: uppercase;\n letter-spacing: .08em;\n color: var(--musea-text-muted);\n cursor: pointer;\n user-select: none;\n border-radius: var(--musea-radius-sm);\n transition: background var(--musea-transition);\n align-items: center;\n gap: .5rem;\n padding: .625rem .75rem;\n font-size: .6875rem;\n font-weight: 600;\n display: flex;\n}\n\n.category-header:hover {\n background: var(--musea-bg-tertiary);\n}\n\n.category-icon {\n width: 16px;\n height: 16px;\n transition: transform var(--musea-transition);\n}\n\n.category-header.collapsed .category-icon {\n transform: rotate(-90deg);\n}\n\n.category-count {\n background: var(--musea-bg-tertiary);\n border-radius: 4px;\n margin-left: auto;\n padding: .125rem .375rem;\n font-size: .625rem;\n}\n\n.art-list {\n margin-top: .25rem;\n list-style: none;\n}\n\n.art-item {\n border-radius: var(--musea-radius-sm);\n cursor: pointer;\n color: var(--musea-text-secondary);\n transition: all var(--musea-transition);\n align-items: center;\n gap: .625rem;\n padding: .5rem .75rem .5rem 1.75rem;\n font-size: .8125rem;\n display: flex;\n position: relative;\n}\n\n.art-item:before {\n content: \"\";\n background: var(--musea-border);\n width: 6px;\n height: 6px;\n transition: background var(--musea-transition);\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: .75rem;\n transform: translateY(-50%);\n}\n\n.art-item:hover {\n background: var(--musea-bg-tertiary);\n color: var(--musea-text);\n}\n\n.art-item:hover:before {\n background: var(--musea-text-muted);\n}\n\n.art-item.active {\n background: var(--musea-accent-subtle);\n color: var(--musea-accent-hover);\n}\n\n.art-item.active:before {\n background: var(--musea-accent);\n}\n\n.art-variant-count {\n color: var(--musea-text-muted);\n opacity: 0;\n transition: opacity var(--musea-transition);\n margin-left: auto;\n font-size: .6875rem;\n}\n\n.art-item:hover .art-variant-count {\n opacity: 1;\n}\n\n.content {\n background: var(--musea-bg-primary);\n overflow-y: auto;\n}\n\n.content-inner {\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n.content-header {\n margin-bottom: 2rem;\n}\n\n.content-title {\n margin-bottom: .5rem;\n font-size: 1.5rem;\n font-weight: 700;\n}\n\n.content-description {\n color: var(--musea-text-muted);\n max-width: 600px;\n font-size: .9375rem;\n}\n\n.content-meta {\n align-items: center;\n gap: 1rem;\n margin-top: 1rem;\n display: flex;\n}\n\n.meta-tag {\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-sm);\n color: var(--musea-text-muted);\n align-items: center;\n gap: .375rem;\n padding: .25rem .625rem;\n font-size: .75rem;\n display: inline-flex;\n}\n\n.meta-tag svg {\n width: 12px;\n height: 12px;\n}\n";
7
+ //#endregion
8
+ //#region src/gallery/styles-components.css?inline
9
+ var styles_components_default = ".gallery {\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 1.25rem;\n display: grid;\n}\n\n.variant-card {\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-lg);\n overflow: hidden;\n}\n\n.variant-preview {\n aspect-ratio: 16 / 7;\n background: var(--musea-bg-tertiary);\n box-sizing: border-box;\n justify-content: center;\n align-items: center;\n display: flex;\n position: relative;\n overflow: hidden;\n}\n\n.variant-preview iframe {\n border-radius: var(--musea-radius-md);\n background: #fff;\n border: none;\n width: 70%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n box-shadow: 0 12px 30px #0d0d0d1f;\n}\n\n.variant-preview-placeholder {\n color: var(--musea-text-muted);\n text-align: center;\n padding: 1rem;\n font-size: .8125rem;\n}\n\n.variant-preview-code {\n color: var(--musea-text-muted);\n background: var(--musea-bg-primary);\n width: 100%;\n max-height: 100%;\n padding: 1rem;\n font-family: JetBrains Mono, SF Mono, Fira Code, monospace;\n font-size: .75rem;\n overflow: auto;\n}\n\n.variant-info {\n border-top: 1px solid var(--musea-border);\n justify-content: space-between;\n align-items: center;\n padding: 1rem;\n display: flex;\n}\n\n.variant-name {\n font-size: .875rem;\n font-weight: 600;\n}\n\n.variant-badge {\n text-transform: uppercase;\n letter-spacing: .04em;\n background: var(--musea-accent-subtle);\n color: var(--musea-accent);\n border-radius: 4px;\n padding: .1875rem .5rem;\n font-size: .625rem;\n font-weight: 600;\n}\n\n.variant-actions {\n gap: .5rem;\n display: flex;\n}\n\n.variant-action-btn {\n background: var(--musea-bg-tertiary);\n border-radius: var(--musea-radius-sm);\n width: 28px;\n height: 28px;\n color: var(--musea-text-muted);\n cursor: pointer;\n transition: all var(--musea-transition);\n border: none;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.variant-action-btn:hover {\n background: var(--musea-bg-elevated);\n color: var(--musea-text);\n}\n\n.variant-action-btn svg {\n width: 14px;\n height: 14px;\n}\n\n.empty-state {\n text-align: center;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n min-height: 400px;\n padding: 2rem;\n display: flex;\n}\n\n.empty-state-icon {\n background: var(--musea-bg-secondary);\n border-radius: var(--musea-radius-lg);\n justify-content: center;\n align-items: center;\n width: 80px;\n height: 80px;\n margin-bottom: 1.5rem;\n display: flex;\n}\n\n.empty-state-icon svg {\n width: 40px;\n height: 40px;\n color: var(--musea-text-muted);\n}\n\n.empty-state-title {\n margin-bottom: .5rem;\n font-size: 1.125rem;\n font-weight: 600;\n}\n\n.empty-state-text {\n color: var(--musea-text-muted);\n max-width: 300px;\n font-size: .875rem;\n}\n\n.loading {\n min-height: 200px;\n color: var(--musea-text-muted);\n justify-content: center;\n align-items: center;\n gap: .75rem;\n display: flex;\n}\n\n.loading-spinner {\n border: 2px solid var(--musea-border);\n border-top-color: var(--musea-accent);\n border-radius: 50%;\n width: 20px;\n height: 20px;\n animation: .8s linear infinite spin;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (width <= 768px) {\n .main {\n grid-template-columns: 1fr;\n }\n\n .sidebar, .header-subtitle {\n display: none;\n }\n}\n";
10
+ //#endregion
11
+ //#region src/gallery/styles.ts
12
+ /**
13
+ * CSS theme variables and style definitions for the Musea gallery.
14
+ *
15
+ * CSS is split into separate .css files and imported as text
16
+ * via tsdown's `?inline` support.
17
+ */
18
+ /**
19
+ * Generate the full gallery CSS styles string.
20
+ */
21
+ function generateGalleryStyles() {
22
+ return `${styles_base_default}\n${styles_layout_default}\n${styles_components_default}`;
23
+ }
24
+ //#endregion
25
+ //#region src/gallery/index.ts
26
+ /**
27
+ * Gallery HTML generation for the Musea component gallery.
28
+ *
29
+ * Contains the inline gallery SPA template (used as a fallback when the
30
+ * pre-built gallery is not available) and the gallery virtual module.
31
+ */
32
+ /**
33
+ * Generate the inline gallery HTML page.
34
+ */
35
+ function generateGalleryHtml(basePath, devSessionToken, themeConfig, tokenPreviewConfig) {
36
+ return `<!DOCTYPE html>
37
+ <html lang="en">
38
+ <head>
39
+ <meta charset="UTF-8">
40
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
41
+ <title>Musea - Component Gallery</title>
42
+ <script>${generateGalleryGlobalsScript({
43
+ basePath,
44
+ devSessionToken,
45
+ themeConfig,
46
+ tokenPreviewConfig
47
+ })}<\/script>
48
+ <style>${generateGalleryStyles()}
49
+ </style>
50
+ </head>
51
+ <body>${generateGalleryBody(basePath)}
52
+
53
+ <script type="module">${generateGalleryScript(basePath)}
54
+ <\/script>
55
+ </body>
56
+ </html>`;
57
+ }
58
+ //#endregion
59
+ export { generateGalleryHtml };
60
+
61
+ //# sourceMappingURL=gallery-onvFYjip.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery-onvFYjip.mjs","names":["stylesBase","stylesLayout","stylesComponents"],"sources":["../src/gallery/styles-base.css?inline","../src/gallery/styles-layout.css?inline","../src/gallery/styles-components.css?inline","../src/gallery/styles.ts","../src/gallery/index.ts"],"sourcesContent":[":root {\n --musea-bg-primary: #e6e2d6;\n --musea-bg-secondary: #ddd9cd;\n --musea-bg-tertiary: #d4d0c4;\n --musea-bg-elevated: #e6e2d6;\n --musea-accent: #121212;\n --musea-accent-hover: #2a2a2a;\n --musea-accent-subtle: rgba(18, 18, 18, 0.08);\n --musea-text: #121212;\n --musea-text-secondary: #3a3a3a;\n --musea-text-muted: #6b6b6b;\n --musea-border: #c8c4b8;\n --musea-border-subtle: #d4d0c4;\n --musea-success: #16a34a;\n --musea-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);\n --musea-radius-sm: 4px;\n --musea-radius-md: 6px;\n --musea-radius-lg: 8px;\n --musea-transition: 0.15s ease;\n}\n\n* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n background: var(--musea-bg-primary);\n color: var(--musea-text);\n min-height: 100vh;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n}\n","/* Header */\n.header {\n background: var(--musea-bg-secondary);\n border-bottom: 1px solid var(--musea-border);\n padding: 0 1.5rem;\n height: 56px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: sticky;\n top: 0;\n z-index: 100;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n}\n\n.logo {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.125rem;\n font-weight: 700;\n color: var(--musea-accent);\n text-decoration: none;\n}\n\n.logo-svg {\n width: 32px;\n height: 32px;\n flex-shrink: 0;\n}\n\n.logo-icon svg {\n width: 16px;\n height: 16px;\n color: var(--musea-text);\n}\n\n.header-subtitle {\n color: var(--musea-text-muted);\n font-size: 0.8125rem;\n font-weight: 500;\n padding-left: 1.5rem;\n border-left: 1px solid var(--musea-border);\n}\n\n.search-container {\n position: relative;\n width: 280px;\n}\n\n.search-input {\n width: 100%;\n background: var(--musea-bg-tertiary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-md);\n padding: 0.5rem 0.75rem 0.5rem 2.25rem;\n color: var(--musea-text);\n font-size: 0.8125rem;\n outline: none;\n transition:\n border-color var(--musea-transition),\n background var(--musea-transition);\n}\n\n.search-input::placeholder {\n color: var(--musea-text-muted);\n}\n\n.search-input:focus {\n border-color: var(--musea-accent);\n background: var(--musea-bg-elevated);\n}\n\n.search-icon {\n position: absolute;\n left: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n color: var(--musea-text-muted);\n pointer-events: none;\n}\n\n/* Layout */\n.main {\n display: grid;\n grid-template-columns: 260px 1fr;\n min-height: calc(100vh - 56px);\n}\n\n/* Sidebar */\n.sidebar {\n background: var(--musea-bg-secondary);\n border-right: 1px solid var(--musea-border);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.sidebar::-webkit-scrollbar {\n width: 6px;\n}\n\n.sidebar::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.sidebar::-webkit-scrollbar-thumb {\n background: var(--musea-border);\n border-radius: 3px;\n}\n\n.sidebar-section {\n padding: 0.75rem;\n}\n\n.category-header {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.625rem 0.75rem;\n font-size: 0.6875rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: var(--musea-text-muted);\n cursor: pointer;\n user-select: none;\n border-radius: var(--musea-radius-sm);\n transition: background var(--musea-transition);\n}\n\n.category-header:hover {\n background: var(--musea-bg-tertiary);\n}\n\n.category-icon {\n width: 16px;\n height: 16px;\n transition: transform var(--musea-transition);\n}\n\n.category-header.collapsed .category-icon {\n transform: rotate(-90deg);\n}\n\n.category-count {\n margin-left: auto;\n background: var(--musea-bg-tertiary);\n padding: 0.125rem 0.375rem;\n border-radius: 4px;\n font-size: 0.625rem;\n}\n\n.art-list {\n list-style: none;\n margin-top: 0.25rem;\n}\n\n.art-item {\n display: flex;\n align-items: center;\n gap: 0.625rem;\n padding: 0.5rem 0.75rem 0.5rem 1.75rem;\n border-radius: var(--musea-radius-sm);\n cursor: pointer;\n font-size: 0.8125rem;\n color: var(--musea-text-secondary);\n transition: all var(--musea-transition);\n position: relative;\n}\n\n.art-item::before {\n content: \"\";\n position: absolute;\n left: 0.75rem;\n top: 50%;\n transform: translateY(-50%);\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--musea-border);\n transition: background var(--musea-transition);\n}\n\n.art-item:hover {\n background: var(--musea-bg-tertiary);\n color: var(--musea-text);\n}\n\n.art-item:hover::before {\n background: var(--musea-text-muted);\n}\n\n.art-item.active {\n background: var(--musea-accent-subtle);\n color: var(--musea-accent-hover);\n}\n\n.art-item.active::before {\n background: var(--musea-accent);\n}\n\n.art-variant-count {\n margin-left: auto;\n font-size: 0.6875rem;\n color: var(--musea-text-muted);\n opacity: 0;\n transition: opacity var(--musea-transition);\n}\n\n.art-item:hover .art-variant-count {\n opacity: 1;\n}\n\n/* Content */\n.content {\n background: var(--musea-bg-primary);\n overflow-y: auto;\n}\n\n.content-inner {\n max-width: 1400px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n.content-header {\n margin-bottom: 2rem;\n}\n\n.content-title {\n font-size: 1.5rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n}\n\n.content-description {\n color: var(--musea-text-muted);\n font-size: 0.9375rem;\n max-width: 600px;\n}\n\n.content-meta {\n display: flex;\n align-items: center;\n gap: 1rem;\n margin-top: 1rem;\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n padding: 0.25rem 0.625rem;\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-sm);\n font-size: 0.75rem;\n color: var(--musea-text-muted);\n}\n\n.meta-tag svg {\n width: 12px;\n height: 12px;\n}\n","/* Gallery Grid */\n.gallery {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 1.25rem;\n}\n\n/* Variant Card */\n.variant-card {\n background: var(--musea-bg-secondary);\n border: 1px solid var(--musea-border);\n border-radius: var(--musea-radius-lg);\n overflow: hidden;\n}\n\n.variant-preview {\n aspect-ratio: 16 / 7;\n background: var(--musea-bg-tertiary);\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n}\n\n.variant-preview iframe {\n width: 70%;\n height: 100%;\n max-width: 100%;\n max-height: 100%;\n border: none;\n background: white;\n border-radius: var(--musea-radius-md);\n box-shadow: 0 12px 30px rgba(13, 13, 13, 0.12);\n}\n\n.variant-preview-placeholder {\n color: var(--musea-text-muted);\n font-size: 0.8125rem;\n text-align: center;\n padding: 1rem;\n}\n\n.variant-preview-code {\n font-family: \"JetBrains Mono\", \"SF Mono\", \"Fira Code\", monospace;\n font-size: 0.75rem;\n color: var(--musea-text-muted);\n background: var(--musea-bg-primary);\n padding: 1rem;\n overflow: auto;\n max-height: 100%;\n width: 100%;\n}\n\n.variant-info {\n padding: 1rem;\n border-top: 1px solid var(--musea-border);\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.variant-name {\n font-weight: 600;\n font-size: 0.875rem;\n}\n\n.variant-badge {\n font-size: 0.625rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n padding: 0.1875rem 0.5rem;\n border-radius: 4px;\n background: var(--musea-accent-subtle);\n color: var(--musea-accent);\n}\n\n.variant-actions {\n display: flex;\n gap: 0.5rem;\n}\n\n.variant-action-btn {\n width: 28px;\n height: 28px;\n border: none;\n background: var(--musea-bg-tertiary);\n border-radius: var(--musea-radius-sm);\n color: var(--musea-text-muted);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all var(--musea-transition);\n}\n\n.variant-action-btn:hover {\n background: var(--musea-bg-elevated);\n color: var(--musea-text);\n}\n\n.variant-action-btn svg {\n width: 14px;\n height: 14px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n padding: 2rem;\n}\n\n.empty-state-icon {\n width: 80px;\n height: 80px;\n background: var(--musea-bg-secondary);\n border-radius: var(--musea-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n}\n\n.empty-state-icon svg {\n width: 40px;\n height: 40px;\n color: var(--musea-text-muted);\n}\n\n.empty-state-title {\n font-size: 1.125rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n}\n\n.empty-state-text {\n color: var(--musea-text-muted);\n font-size: 0.875rem;\n max-width: 300px;\n}\n\n/* Loading */\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n color: var(--musea-text-muted);\n gap: 0.75rem;\n}\n\n.loading-spinner {\n width: 20px;\n height: 20px;\n border: 2px solid var(--musea-border);\n border-top-color: var(--musea-accent);\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .main {\n grid-template-columns: 1fr;\n }\n .sidebar {\n display: none;\n }\n .header-subtitle {\n display: none;\n }\n}\n","/**\n * CSS theme variables and style definitions for the Musea gallery.\n *\n * CSS is split into separate .css files and imported as text\n * via tsdown's `?inline` support.\n */\n\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesBase from \"./styles-base.css?inline\";\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesLayout from \"./styles-layout.css?inline\";\n// @ts-expect-error -- CSS imported as text via tsdown `?inline`\nimport stylesComponents from \"./styles-components.css?inline\";\n\n/**\n * Generate the full gallery CSS styles string.\n */\nexport function generateGalleryStyles(): string {\n return `${stylesBase}\\n${stylesLayout}\\n${stylesComponents}`;\n}\n","/**\n * Gallery HTML generation for the Musea component gallery.\n *\n * Contains the inline gallery SPA template (used as a fallback when the\n * pre-built gallery is not available) and the gallery virtual module.\n */\n\nimport { generateGalleryStyles } from \"./styles.js\";\nimport { generateGalleryBody, generateGalleryScript } from \"./template.js\";\nimport { generateGalleryGlobalsScript } from \"./globals.js\";\nimport type { MuseaTokenPreviewConfig } from \"../tokens/preview.js\";\n\nexport { generateGalleryModule } from \"./module.js\";\n\n/**\n * Generate the inline gallery HTML page.\n */\nexport function generateGalleryHtml(\n basePath: string,\n devSessionToken: string,\n themeConfig?: { default: string; custom?: Record<string, unknown> },\n tokenPreviewConfig?: MuseaTokenPreviewConfig,\n): string {\n const globalsScript = generateGalleryGlobalsScript({\n basePath,\n devSessionToken,\n themeConfig,\n tokenPreviewConfig,\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>Musea - Component Gallery</title>\n <script>${globalsScript}${\"<\"}/script>\n <style>${generateGalleryStyles()}\n </style>\n</head>\n<body>${generateGalleryBody(basePath)}\n\n <script type=\"module\">${generateGalleryScript(basePath)}\n </script>\n</body>\n</html>`;\n}\n"],"mappings":";;AAAA,IAAA,sBAAM;;;ACAN,IAAA,wBAAG;;;ACAH,IAAA,4BAAG;;;;;;;;;;;;ACiBH,SAAgB,wBAAgC;CAC9C,OAAO,GAAGA,oBAAW,IAAIC,sBAAa,IAAIC;;;;;;;;;;;;;ACD5C,SAAgB,oBACd,UACA,iBACA,aACA,oBACQ;CAOR,OAAO;;;;;;YANe,6BAA6B;EACjD;EACA;EACA;EACA;EACD,CAOsB,CAAA;WACd,uBAAuB,CAAC;;;QAG3B,oBAAoB,SAAS,CAAC;;0BAEZ,sBAAsB,SAAS,CAAC"}
@@ -1,4 +1,4 @@
1
- import { c as ArtFileInfo, r as MuseaVrtRunner } from "./vrt-D76vnsOt.mjs";
1
+ import { c as ArtFileInfo, r as MuseaVrtRunner } from "./vrt-C5O4NHsc.mjs";
2
2
  import { Page } from "playwright";
3
3
 
4
4
  //#region src/types/api.d.ts
@@ -148,4 +148,4 @@ declare class MuseaA11yRunner {
148
148
  }
149
149
  //#endregion
150
150
  export { generateA11yJsonReport as a, AnalysisApiResponse as c, generateA11yHtmlReport as i, PaletteApiResponse as l, MuseaA11yRunner as n, A11yOptions as o, computeA11ySummary as r, A11yResult as s, A11ySummary as t };
151
- //# sourceMappingURL=index-C5RD-jcD.d.mts.map
151
+ //# sourceMappingURL=index-leLThbJH.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-C5RD-jcD.d.mts","names":[],"sources":["../src/types/api.ts","../src/a11y/report.ts","../src/a11y/index.ts"],"mappings":";;;;;;;UAGiB,kBAAA;EACf,KAAA;EACA,QAAA,EAAU,cAAA;EACV,MAAA;EACA,IAAA;EACA,UAAA;AAAA;;;;UAMe,cAAA;EACf,IAAA;EACA,OAAA,EAAS,WAAA;EACT,aAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA,EAAS,KAAA;IAAQ,KAAA;IAAe,KAAA;EAAA;EAChC,KAAA;IAAU,GAAA;IAAa,GAAA;IAAa,IAAA;EAAA;EACpC,KAAA;AAAA;;;;KAMU,WAAA;;;;UAiBK,mBAAA;EACf,KAAA,EAAO,KAAA;IACL,IAAA;IACA,IAAA;IACA,QAAA;IACA,aAAA;EAAA;EAEF,KAAA;AAAA;;;;UAUe,WAAA;EAbb;EAeF,OAAA;EAZA;EAcA,YAAA;EAdK;EAgBL,YAAA;EAN0B;EAQ1B,KAAA;AAAA;;;;UAMe,UAAA;EACf,OAAA;EACA,WAAA;EACA,UAAA,EAAY,aAAA;EACZ,MAAA;EACA,UAAA;AAAA;;;;UAMe,aAAA;EACf,EAAA;EACA,MAAA;EACA,WAAA;EACA,OAAA;EACA,KAAA;AAAA;;;;;;iBC9Ec,kBAAA,CAAmB,OAAA,EAAS,UAAA,KAAe,WAAA;;;;iBAkB3C,sBAAA,CAAuB,OAAA,EAAS,UAAA,IAAc,OAAA,EAAS,WAAA;ADlBvE;;;AAAA,iBC8JgB,sBAAA,CAAuB,OAAA,EAAS,UAAA;;;;;;UCrJ/B,WAAA;EACf,eAAA;EACA,aAAA;EACA,eAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;AAAA;;;;cAqBW,eAAA;EAAA,QACH,OAAA;cAEI,OAAA,GAAS,WAAA;EFlCrB;;;;EE+CM,SAAA,CACJ,QAAA,EAAU,WAAA,IACV,OAAA,UACA,SAAA,GAAY,cAAA,GACX,OAAA,CAAQ,UAAA;EFlDD;;;EEiHJ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,OAAA,UAAiB,WAAA,WAAsB,OAAA,CAAQ,UAAA;EFhHtE;;AAMP;EE6IE,UAAA,CAAW,OAAA,EAAS,UAAA,KAAe,WAAA;;;;EAOnC,kBAAA,CAAmB,OAAA,EAAS,UAAA;EFnIM;;;EE2IlC,kBAAA,CAAmB,OAAA,EAAS,UAAA;EF1IrB;;;EAAA,QEiJO,YAAA;EF7IZ;;;EAAA,QE2JM,eAAA;EAAA,QAqCA,eAAA;AAAA"}
1
+ {"version":3,"file":"index-leLThbJH.d.mts","names":[],"sources":["../src/types/api.ts","../src/a11y/report.ts","../src/a11y/index.ts"],"mappings":";;;;;;;UAGiB,kBAAA;EACf,KAAA;EACA,QAAA,EAAU,cAAA;EACV,MAAA;EACA,IAAA;EACA,UAAA;AAAA;;;;UAMe,cAAA;EACf,IAAA;EACA,OAAA,EAAS,WAAA;EACT,aAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA,EAAS,KAAA;IAAQ,KAAA;IAAe,KAAA;EAAA;EAChC,KAAA;IAAU,GAAA;IAAa,GAAA;IAAa,IAAA;EAAA;EACpC,KAAA;AAAA;;;;KAMU,WAAA;;;;UAiBK,mBAAA;EACf,KAAA,EAAO,KAAA;IACL,IAAA;IACA,IAAA;IACA,QAAA;IACA,aAAA;EAAA;EAEF,KAAA;AAAA;;;;UAUe,WAAA;EAbb;EAeF,OAAA;EAZA;EAcA,YAAA;EAdK;EAgBL,YAAA;EAN0B;EAQ1B,KAAA;AAAA;;;;UAMe,UAAA;EACf,OAAA;EACA,WAAA;EACA,UAAA,EAAY,aAAA;EACZ,MAAA;EACA,UAAA;AAAA;;;;UAMe,aAAA;EACf,EAAA;EACA,MAAA;EACA,WAAA;EACA,OAAA;EACA,KAAA;AAAA;;;;;;iBC9Ec,kBAAA,CAAmB,OAAA,EAAS,UAAA,KAAe,WAAA;;;;iBAkB3C,sBAAA,CAAuB,OAAA,EAAS,UAAA,IAAc,OAAA,EAAS,WAAA;ADlBvE;;;AAAA,iBC8JgB,sBAAA,CAAuB,OAAA,EAAS,UAAA;;;;;;UCrJ/B,WAAA;EACf,eAAA;EACA,aAAA;EACA,eAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;AAAA;;;;cAqBW,eAAA;EAAA,QACH,OAAA;cAEI,OAAA,GAAS,WAAA;EFlCrB;;;;EE+CM,SAAA,CACJ,QAAA,EAAU,WAAA,IACV,OAAA,UACA,SAAA,GAAY,cAAA,GACX,OAAA,CAAQ,UAAA;EFlDD;;;EEiHJ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,OAAA,UAAiB,WAAA,WAAsB,OAAA,CAAQ,UAAA;EFhHtE;;AAMP;EE6IE,UAAA,CAAW,OAAA,EAAS,UAAA,KAAe,WAAA;;;;EAOnC,kBAAA,CAAmB,OAAA,EAAS,UAAA;EFnIM;;;EE2IlC,kBAAA,CAAmB,OAAA,EAAS,UAAA;EF1IrB;;;EAAA,QEiJO,YAAA;EF7IZ;;;EAAA,QE2JM,eAAA;EAAA,QAqCA,eAAA;AAAA"}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { c as ArtFileInfo, d as CsfOutput, f as CaptureConfig, g as VrtOptions, h as ViewportConfig, l as ArtMetadata, m as ComparisonConfig, n as generateVrtReport, o as VrtResult, p as CiConfig, r as MuseaVrtRunner, s as VrtSummary, t as generateVrtJsonReport, u as ArtVariant } from "./vrt-D76vnsOt.mjs";
2
- import { c as AnalysisApiResponse, l as PaletteApiResponse, n as MuseaA11yRunner, o as A11yOptions, s as A11yResult, t as A11ySummary } from "./index-C5RD-jcD.mjs";
1
+ import { c as ArtFileInfo, d as CsfOutput, f as CaptureConfig, g as VrtOptions, h as ViewportConfig, l as ArtMetadata, m as ComparisonConfig, n as generateVrtReport, o as VrtResult, p as CiConfig, r as MuseaVrtRunner, s as VrtSummary, t as generateVrtJsonReport, u as ArtVariant } from "./vrt-C5O4NHsc.mjs";
2
+ import { c as AnalysisApiResponse, l as PaletteApiResponse, n as MuseaA11yRunner, o as A11yOptions, s as A11yResult, t as A11ySummary } from "./index-leLThbJH.mjs";
3
3
  import { AutogenOptions, AutogenOutput, GeneratedVariant, PropDefinition, generateArtFile, writeArtFile } from "./autogen/index.mjs";
4
4
  import { Plugin } from "vite";
5
5
 
@@ -238,7 +238,6 @@ interface MuseaOptions {
238
238
  previewSetup?: string;
239
239
  /**
240
240
  * Host Vue version for preview runtime compatibility checks.
241
- * Legacy Vue static builds currently fail fast with an actionable diagnostic.
242
241
  * @default 3
243
242
  */
244
243
  vueVersion?: MuseaVueVersion;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/tokens/parser.ts","../src/tokens/preview.ts","../src/types/plugin.ts","../src/plugin/index.ts","../src/tokens/usage.ts","../src/tokens/resolver.ts","../src/tokens/generator.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/tokens/parser.ts","../src/tokens/preview.ts","../src/types/plugin.ts","../src/plugin/index.ts","../src/tokens/usage.ts","../src/tokens/resolver.ts","../src/tokens/generator.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as validateDevApiRequest, a as generateDevGlobalsScript, c as HttpError, d as decodeUrlComponent, f as parseJsonBody, g as serializeScriptValue, h as resolveUrlPathInside, i as generateGalleryScript, l as collectRequestBody, m as resolveInsideAny, n as generateGalleryModule, o as generateGalleryGlobalsScript, p as resolveInside, r as generateGalleryBody, u as createDevSessionToken } from "./gallery-qM8Q_21C.mjs";
1
+ import { a as generateGalleryGlobalsScript, c as collectRequestBody, d as parseJsonBody, f as resolveInside, g as validateDevApiRequest, h as serializeScriptValue, i as generateDevGlobalsScript, l as createDevSessionToken, m as resolveUrlPathInside, n as generateGalleryScript, p as resolveInsideAny, r as generateGalleryModule, s as HttpError, t as generateGalleryBody, u as decodeUrlComponent } from "./template-CFSGRuGu.mjs";
2
2
  import { i as MuseaVrtRunner, n as generateVrtJsonReport, r as generateVrtReport } from "./vrt-Cv1PK1EF.mjs";
3
3
  import { t as MuseaA11yRunner } from "./a11y-62l8G1tr.mjs";
4
4
  import { n as writeArtFile, t as generateArtFile } from "./autogen-B7_TO0n5.mjs";
@@ -799,7 +799,7 @@ function generatePreviewHtml(art, variant, _basePath, viteBase) {
799
799
  }
800
800
  //#endregion
801
801
  //#region src/preview/index.ts
802
- function generatePreviewModule(art, variantComponentName, variantName, cssImports = [], previewSetup = null) {
802
+ function generatePreviewModule(art, variantComponentName, variantName, cssImports = [], previewSetup = null, vueVersion = 3) {
803
803
  const artModuleId = `virtual:musea-art:${art.path}`;
804
804
  const artModuleIdLiteral = JSON.stringify(artModuleId);
805
805
  const variantNameLiteral = JSON.stringify(variantName);
@@ -809,10 +809,16 @@ function generatePreviewModule(art, variantComponentName, variantName, cssImport
809
809
  const setupCall = previewSetup ? "await __museaPreviewSetup(app);" : "";
810
810
  const actionEvents = JSON.stringify(art.metadata.actionEvents ?? []);
811
811
  const artStyleId = `musea-art-styles-${art.path.replace(/[^\w-]+/g, "_")}`;
812
+ const artStyleIdLiteral = JSON.stringify(artStyleId);
813
+ const legacyVue = isLegacyVueVersion(vueVersion);
814
+ const vueImport = legacyVue ? "import Vue, { reactive } from 'vue';" : "import { createApp, reactive, h } from 'vue';";
815
+ const destroyCurrentApp = legacyVue ? "currentApp.$destroy();" : "currentApp.unmount();";
816
+ const mountInitialApp = legacyVue ? "const app = new Vue({ render: (h) => h(VariantComponent) });" : "const app = createApp(VariantComponent);";
817
+ const mountCurrentApp = legacyVue ? "mountVue2App(app);" : "app.mount(container);\n currentApp = app;";
812
818
  return `
813
819
  ${cssImportStatements}
814
820
  ${setupImport}
815
- import { createApp, reactive, h } from 'vue';
821
+ ${vueImport}
816
822
  import * as artModule from ${artModuleIdLiteral};
817
823
 
818
824
  const container = document.getElementById('app');
@@ -824,7 +830,7 @@ const propsOverride = reactive({});
824
830
  const slotsOverride = reactive({ default: '' });
825
831
 
826
832
  function ensureArtStyles(styles) {
827
- const styleId = ${JSON.stringify(artStyleId)};
833
+ const styleId = ${artStyleIdLiteral};
828
834
  const existing = document.getElementById(styleId);
829
835
 
830
836
  if (!Array.isArray(styles) || styles.length === 0) {
@@ -865,6 +871,8 @@ function renderError(title, error) {
865
871
  container.appendChild(root);
866
872
  }
867
873
 
874
+ ${legacyVue ? vue2MountHelperSnippet() : ""}
875
+
868
876
  window.__museaSetProps = (props) => {
869
877
  // Clear old keys
870
878
  for (const key of Object.keys(propsOverride)) {
@@ -891,13 +899,12 @@ async function mount() {
891
899
  }
892
900
 
893
901
  // Create and mount the app
894
- const app = createApp(VariantComponent);
902
+ ${mountInitialApp}
895
903
  ensureArtStyles(artModule.__styles__);
896
904
  ${setupCall}
897
905
  container.innerHTML = '';
898
906
  container.className = 'musea-variant';
899
- app.mount(container);
900
- currentApp = app;
907
+ ${mountCurrentApp}
901
908
 
902
909
  console.log('[musea-preview] Mounted variant:', ${variantNameLiteral});
903
910
  __museaInitAddons(container, ${variantNameLiteral}, ${actionEvents});
@@ -926,9 +933,47 @@ async function mount() {
926
933
 
927
934
  async function remountWithProps(Component) {
928
935
  if (currentApp) {
929
- currentApp.unmount();
936
+ ${destroyCurrentApp}
930
937
  }
931
- const app = createApp({
938
+ ${legacyVue ? vue2RemountAppSnippet() : vue3RemountAppSnippet()}
939
+ ensureArtStyles(artModule.__styles__);
940
+ ${setupCall}
941
+ container.innerHTML = '';
942
+ ${mountCurrentApp}
943
+ }
944
+
945
+ mount();
946
+ `;
947
+ }
948
+ function isLegacyVueVersion(version) {
949
+ return version === .11 || version === 1 || version === 2 || version === "2.7" || version === "legacy";
950
+ }
951
+ function vue2MountHelperSnippet() {
952
+ return `function mountVue2App(app) {
953
+ container.innerHTML = '';
954
+ const mountPoint = document.createElement('div');
955
+ container.appendChild(mountPoint);
956
+ app.$mount(mountPoint);
957
+ currentApp = app;
958
+ }`;
959
+ }
960
+ function vue2RemountAppSnippet() {
961
+ return `const app = new Vue({
962
+ render(h) {
963
+ const slotFns = {};
964
+ const children = [];
965
+ for (const [name, content] of Object.entries(slotsOverride)) {
966
+ if (!content) continue;
967
+ const slot = () => [h('span', String(content))];
968
+ slotFns[name] = slot;
969
+ if (name === 'default') children.push(...slot());
970
+ }
971
+ return h(Component, { props: { ...propsOverride }, scopedSlots: slotFns }, children);
972
+ }
973
+ });`;
974
+ }
975
+ function vue3RemountAppSnippet() {
976
+ return `const app = createApp({
932
977
  setup() {
933
978
  return () => {
934
979
  const slotFns = {};
@@ -938,18 +983,9 @@ async function remountWithProps(Component) {
938
983
  return h(Component, { ...propsOverride }, slotFns);
939
984
  };
940
985
  }
941
- });
942
- ensureArtStyles(artModule.__styles__);
943
- ${setupCall}
944
- container.innerHTML = '';
945
- app.mount(container);
946
- currentApp = app;
947
- }
948
-
949
- mount();
950
- `;
986
+ });`;
951
987
  }
952
- function generatePreviewModuleWithProps(art, variantComponentName, variantName, propsOverride, cssImports = [], previewSetup = null) {
988
+ function generatePreviewModuleWithProps(art, variantComponentName, variantName, propsOverride, cssImports = [], previewSetup = null, vueVersion = 3) {
953
989
  const artModuleId = `virtual:musea-art:${art.path}`;
954
990
  const artModuleIdLiteral = JSON.stringify(artModuleId);
955
991
  const variantNameLiteral = JSON.stringify(variantName);
@@ -960,10 +996,12 @@ function generatePreviewModuleWithProps(art, variantComponentName, variantName,
960
996
  const setupCall = previewSetup ? "await __museaPreviewSetup(app);" : "";
961
997
  const actionEvents = JSON.stringify(art.metadata.actionEvents ?? []);
962
998
  const artStyleId = `musea-art-styles-${art.path.replace(/[^\w-]+/g, "_")}`;
999
+ const artStyleIdLiteral = JSON.stringify(artStyleId);
1000
+ const legacyVue = isLegacyVueVersion(vueVersion);
963
1001
  return `
964
1002
  ${cssImportStatements}
965
1003
  ${setupImport}
966
- import { createApp, h } from 'vue';
1004
+ ${legacyVue ? "import Vue from 'vue';" : "import { createApp, h } from 'vue';"}
967
1005
  import * as artModule from ${artModuleIdLiteral};
968
1006
 
969
1007
  const container = document.getElementById('app');
@@ -972,7 +1010,7 @@ const propsOverride = ${propsJson};
972
1010
  ${MUSEA_ADDONS_INIT_CODE}
973
1011
 
974
1012
  function ensureArtStyles(styles) {
975
- const styleId = ${JSON.stringify(artStyleId)};
1013
+ const styleId = ${artStyleIdLiteral};
976
1014
  const existing = document.getElementById(styleId);
977
1015
 
978
1016
  if (!Array.isArray(styles) || styles.length === 0) {
@@ -1013,18 +1051,22 @@ async function mount() {
1013
1051
  throw new Error('Variant component ' + ${variantComponentNameLiteral} + ' not found');
1014
1052
  }
1015
1053
 
1016
- const WrappedComponent = {
1054
+ ${legacyVue ? `const WrappedComponent = {
1055
+ render(h) {
1056
+ return h(VariantComponent, { props: propsOverride });
1057
+ }
1058
+ };` : `const WrappedComponent = {
1017
1059
  render() {
1018
1060
  return h(VariantComponent, propsOverride);
1019
1061
  }
1020
- };
1062
+ };`}
1021
1063
 
1022
- const app = createApp(WrappedComponent);
1064
+ ${legacyVue ? "const app = new Vue(WrappedComponent);" : "const app = createApp(WrappedComponent);"}
1023
1065
  ensureArtStyles(artModule.__styles__);
1024
1066
  ${setupCall}
1025
1067
  container.innerHTML = '';
1026
1068
  container.className = 'musea-variant';
1027
- app.mount(container);
1069
+ ${legacyVue ? "const mountPoint = document.createElement('div');\n container.appendChild(mountPoint);\n app.$mount(mountPoint);" : "app.mount(container);"}
1028
1070
  console.log('[musea-preview] Mounted variant with props override:', ${variantNameLiteral});
1029
1071
  __museaInitAddons(container, ${variantNameLiteral}, ${actionEvents});
1030
1072
  } catch (error) {
@@ -1306,7 +1348,7 @@ function generateArtModule(art, filePath, options = {}) {
1306
1348
  }
1307
1349
  let code = `
1308
1350
  // Auto-generated module for: ${path.basename(filePath)}
1309
- import { defineComponent, h } from 'vue';
1351
+ import { defineComponent as __museaDefineComponent } from 'vue';
1310
1352
  `;
1311
1353
  if (scriptSetup) {
1312
1354
  const artDir = path.dirname(filePath);
@@ -1347,7 +1389,7 @@ ${scriptSetup.setupBody.join("\n")}
1347
1389
  }
1348
1390
  const components = componentNames.size > 0 ? ` components: { ${[...componentNames].map(([name, value]) => `${JSON.stringify(name)}: ${value}`).join(", ")} },\n` : "";
1349
1391
  if (scriptSetup && hasSetup && isolatedSetup) code += `
1350
- export const ${variantComponentName} = defineComponent({
1392
+ export const ${variantComponentName} = __museaDefineComponent({
1351
1393
  name: '${variantComponentName}',
1352
1394
  ${components} setup() {
1353
1395
  ${scriptSetup.setupBody.join("\n")}
@@ -1357,7 +1399,7 @@ ${scriptSetup.setupBody.join("\n")}
1357
1399
  });
1358
1400
  `;
1359
1401
  else if (scriptSetup && hasSetup) code += `
1360
- export const ${variantComponentName} = defineComponent({
1402
+ export const ${variantComponentName} = __museaDefineComponent({
1361
1403
  name: '${variantComponentName}',
1362
1404
  ${components} setup() {
1363
1405
  return __museaSharedSetup;
@@ -1420,7 +1462,7 @@ async function tryLoadSourceGalleryHtml(devServer, url, basePath, devSessionToke
1420
1462
  return devServer.transformIndexHtml(url, html);
1421
1463
  }
1422
1464
  async function generateFallbackGalleryHtml(basePath, devSessionToken, themeConfig, tokenPreviewConfig) {
1423
- const { generateGalleryHtml } = await import("./gallery-qM8Q_21C.mjs").then((n) => n.t);
1465
+ const { generateGalleryHtml } = await import("./gallery-onvFYjip.mjs");
1424
1466
  return generateGalleryHtml(basePath, devSessionToken, themeConfig, tokenPreviewConfig);
1425
1467
  }
1426
1468
  async function serveGalleryAsset(galleryDistDir, requestUrl, res) {
@@ -3177,7 +3219,7 @@ function createLoad(state) {
3177
3219
  const artPath = rest.slice(0, lastColonIndex);
3178
3220
  const variantName = rest.slice(lastColonIndex + 1);
3179
3221
  const art = state.artFiles.get(artPath);
3180
- if (art) return generatePreviewModule(art, toPascalCase(variantName), variantName, state.resolvedPreviewCss, state.resolvedPreviewSetup);
3222
+ if (art) return generatePreviewModule(art, toPascalCase(variantName), variantName, state.resolvedPreviewCss, state.resolvedPreviewSetup, state.getVueVersion());
3181
3223
  }
3182
3224
  }
3183
3225
  if (id.startsWith("\0musea-art:")) {
@@ -3439,6 +3481,10 @@ function isMuseaStaticBuild() {
3439
3481
  function shouldEnableMuseaStaticBuild(command) {
3440
3482
  return isMuseaStaticBuild() || command === "build";
3441
3483
  }
3484
+ function shouldEmitMuseaStaticGallery(command, storybookCompat) {
3485
+ if (isMuseaStaticBuild()) return true;
3486
+ return shouldEnableMuseaStaticBuild(command) && !storybookCompat;
3487
+ }
3442
3488
  function museaStaticBuildInput(input) {
3443
3489
  const entries = {};
3444
3490
  if (typeof input === "string") entries[STATIC_USER_INPUT_NAME] = input;
@@ -3790,11 +3836,6 @@ function resolveStaticPreviewVueVersion(configured, plugins) {
3790
3836
  if (hasLegacyVueSfcCompilerPlugin(plugins)) return 2;
3791
3837
  return 3;
3792
3838
  }
3793
- function assertStaticPreviewRuntimeSupported(vueVersion, staticBuildEnabled) {
3794
- if (!staticBuildEnabled) return;
3795
- if (vueVersion === 3 || vueVersion === void 0) return;
3796
- throw new Error("[musea] Static Musea builds currently require the Vue 3 preview runtime. Vue 2/Nuxt 2 projects should use the dev gallery or run Nuxt static generation with @vizejs/nuxt until a Vue 2 static preview runtime is available.");
3797
- }
3798
3839
  function hasLegacyVueSfcCompilerPlugin(plugins) {
3799
3840
  return plugins.some((plugin) => {
3800
3841
  const name = plugin.name ?? "";
@@ -3835,6 +3876,7 @@ function musea(options = {}) {
3835
3876
  resolvedPreviewSetup,
3836
3877
  getConfigRoot: () => config.root,
3837
3878
  getScanRoots: () => scanRoots,
3879
+ getVueVersion: () => vueVersion,
3838
3880
  getServer: () => server,
3839
3881
  processArtFile
3840
3882
  };
@@ -3847,7 +3889,7 @@ function musea(options = {}) {
3847
3889
  return shouldApplyMuseaPlugin(env);
3848
3890
  },
3849
3891
  config(userConfig, env) {
3850
- staticBuildEnabled = shouldEnableMuseaStaticBuild(env.command);
3892
+ staticBuildEnabled = shouldEmitMuseaStaticGallery(env.command, storybookCompat);
3851
3893
  const staticBuildConfig = staticBuildEnabled ? museaStaticBuildConfig(userConfig.build?.rollupOptions?.input) : {};
3852
3894
  return {
3853
3895
  resolve: { alias: [createVueRuntimeCompilerAlias()] },
@@ -3868,6 +3910,7 @@ function musea(options = {}) {
3868
3910
  if (options.tokenPreviews === void 0 && mc.tokenPreviews !== void 0) tokenPreviewConfig = mc.tokenPreviews;
3869
3911
  }
3870
3912
  vueVersion = resolveStaticPreviewVueVersion(vueVersion, resolvedConfig.plugins);
3913
+ staticBuildEnabled = shouldEmitMuseaStaticGallery(resolvedConfig.command, storybookCompat);
3871
3914
  virtualState.basePath = basePath;
3872
3915
  resolvedPreviewCss = previewCss.map((cssPath) => path.isAbsolute(cssPath) ? cssPath : path.resolve(resolvedConfig.root, cssPath));
3873
3916
  if (previewSetup) resolvedPreviewSetup = path.isAbsolute(previewSetup) ? previewSetup : path.resolve(resolvedConfig.root, previewSetup);
@@ -3954,7 +3997,6 @@ function musea(options = {}) {
3954
3997
  },
3955
3998
  async buildStart() {
3956
3999
  console.log(`[musea] config.root: ${config.root}, include: ${JSON.stringify(include)}`);
3957
- assertStaticPreviewRuntimeSupported(vueVersion, staticBuildEnabled);
3958
4000
  if (storybookCompat && staticBuildEnabled) await assertNoUnsupportedStorybookTsxInputs(config.root, include, exclude);
3959
4001
  const files = await scanArtFiles(config.root, include, exclude, inlineArt);
3960
4002
  console.log(`[musea] Found ${files.length} art files`);