@vizejs/vite-plugin-musea 0.273.1 → 0.275.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,10 +238,17 @@ 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;
244
+ /**
245
+ * Vue runtime compiler entry used by the static preview alias for bare `vue`.
246
+ * Defaults to resolving `vue/dist/vue.esm-bundler.js` from the Vite project root.
247
+ *
248
+ * Use this when a workspace needs a custom Vue build or a non-standard package
249
+ * manager layout.
250
+ */
251
+ vueRuntimeCompiler?: string;
245
252
  }
246
253
  //#endregion
247
254
  //#region src/plugin/index.d.ts
@@ -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:")) {
@@ -3234,19 +3276,29 @@ function watchMuseaArtFiles(watcher, files) {
3234
3276
  //#endregion
3235
3277
  //#region src/plugin/vue-alias.ts
3236
3278
  const require = createRequire(import.meta.url);
3237
- function createVueRuntimeCompilerAlias() {
3279
+ function createVueRuntimeCompilerAlias(options = {}) {
3238
3280
  return {
3239
3281
  find: /^vue$/,
3240
- replacement: resolveVueRuntimeCompiler()
3282
+ replacement: resolveVueRuntimeCompiler(options)
3241
3283
  };
3242
3284
  }
3243
- function resolveVueRuntimeCompiler() {
3285
+ function resolveVueRuntimeCompiler(options) {
3286
+ if (options.runtimeCompiler) return normalizeRuntimeCompilerOverride(options.runtimeCompiler, options.root);
3287
+ const root = options.root ?? process.cwd();
3288
+ const projectRequire = createRequire(path.join(root, "package.json"));
3289
+ try {
3290
+ return projectRequire.resolve("vue/dist/vue.esm-bundler.js");
3291
+ } catch {}
3244
3292
  try {
3245
3293
  return require.resolve("vue/dist/vue.esm-bundler.js");
3246
3294
  } catch {
3247
3295
  return "vue/dist/vue.esm-bundler.js";
3248
3296
  }
3249
3297
  }
3298
+ function normalizeRuntimeCompilerOverride(value, root) {
3299
+ if (path.isAbsolute(value) || !value.startsWith(".")) return value;
3300
+ return path.resolve(root ?? process.cwd(), value);
3301
+ }
3250
3302
  //#endregion
3251
3303
  //#region src/plugin/storybook-inputs.ts
3252
3304
  function isStorybookTsxInput(filePath) {
@@ -3439,6 +3491,10 @@ function isMuseaStaticBuild() {
3439
3491
  function shouldEnableMuseaStaticBuild(command) {
3440
3492
  return isMuseaStaticBuild() || command === "build";
3441
3493
  }
3494
+ function shouldEmitMuseaStaticGallery(command, storybookCompat) {
3495
+ if (isMuseaStaticBuild()) return true;
3496
+ return shouldEnableMuseaStaticBuild(command) && !storybookCompat;
3497
+ }
3442
3498
  function museaStaticBuildInput(input) {
3443
3499
  const entries = {};
3444
3500
  if (typeof input === "string") entries[STATIC_USER_INPUT_NAME] = input;
@@ -3790,11 +3846,6 @@ function resolveStaticPreviewVueVersion(configured, plugins) {
3790
3846
  if (hasLegacyVueSfcCompilerPlugin(plugins)) return 2;
3791
3847
  return 3;
3792
3848
  }
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
3849
  function hasLegacyVueSfcCompilerPlugin(plugins) {
3799
3850
  return plugins.some((plugin) => {
3800
3851
  const name = plugin.name ?? "";
@@ -3835,6 +3886,7 @@ function musea(options = {}) {
3835
3886
  resolvedPreviewSetup,
3836
3887
  getConfigRoot: () => config.root,
3837
3888
  getScanRoots: () => scanRoots,
3889
+ getVueVersion: () => vueVersion,
3838
3890
  getServer: () => server,
3839
3891
  processArtFile
3840
3892
  };
@@ -3847,10 +3899,13 @@ function musea(options = {}) {
3847
3899
  return shouldApplyMuseaPlugin(env);
3848
3900
  },
3849
3901
  config(userConfig, env) {
3850
- staticBuildEnabled = shouldEnableMuseaStaticBuild(env.command);
3902
+ staticBuildEnabled = shouldEmitMuseaStaticGallery(env.command, storybookCompat);
3851
3903
  const staticBuildConfig = staticBuildEnabled ? museaStaticBuildConfig(userConfig.build?.rollupOptions?.input) : {};
3852
3904
  return {
3853
- resolve: { alias: [createVueRuntimeCompilerAlias()] },
3905
+ resolve: { alias: [createVueRuntimeCompilerAlias({
3906
+ root: userConfig.root ? path.resolve(userConfig.root) : process.cwd(),
3907
+ runtimeCompiler: options.vueRuntimeCompiler
3908
+ })] },
3854
3909
  ...staticBuildConfig
3855
3910
  };
3856
3911
  },
@@ -3868,6 +3923,7 @@ function musea(options = {}) {
3868
3923
  if (options.tokenPreviews === void 0 && mc.tokenPreviews !== void 0) tokenPreviewConfig = mc.tokenPreviews;
3869
3924
  }
3870
3925
  vueVersion = resolveStaticPreviewVueVersion(vueVersion, resolvedConfig.plugins);
3926
+ staticBuildEnabled = shouldEmitMuseaStaticGallery(resolvedConfig.command, storybookCompat);
3871
3927
  virtualState.basePath = basePath;
3872
3928
  resolvedPreviewCss = previewCss.map((cssPath) => path.isAbsolute(cssPath) ? cssPath : path.resolve(resolvedConfig.root, cssPath));
3873
3929
  if (previewSetup) resolvedPreviewSetup = path.isAbsolute(previewSetup) ? previewSetup : path.resolve(resolvedConfig.root, previewSetup);
@@ -3954,7 +4010,6 @@ function musea(options = {}) {
3954
4010
  },
3955
4011
  async buildStart() {
3956
4012
  console.log(`[musea] config.root: ${config.root}, include: ${JSON.stringify(include)}`);
3957
- assertStaticPreviewRuntimeSupported(vueVersion, staticBuildEnabled);
3958
4013
  if (storybookCompat && staticBuildEnabled) await assertNoUnsupportedStorybookTsxInputs(config.root, include, exclude);
3959
4014
  const files = await scanArtFiles(config.root, include, exclude, inlineArt);
3960
4015
  console.log(`[musea] Found ${files.length} art files`);