@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.
- package/dist/a11y/index.d.mts +1 -1
- package/dist/gallery-onvFYjip.mjs +61 -0
- package/dist/gallery-onvFYjip.mjs.map +1 -0
- package/dist/{index-C5RD-jcD.d.mts → index-leLThbJH.d.mts} +2 -2
- package/dist/{index-C5RD-jcD.d.mts.map → index-leLThbJH.d.mts.map} +1 -1
- package/dist/index.d.mts +10 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +97 -42
- package/dist/index.mjs.map +1 -1
- package/dist/{gallery-qM8Q_21C.mjs → template-CFSGRuGu.mjs} +11 -86
- package/dist/template-CFSGRuGu.mjs.map +1 -0
- package/dist/{vrt-D76vnsOt.d.mts → vrt-C5O4NHsc.d.mts} +1 -1
- package/dist/{vrt-D76vnsOt.d.mts.map → vrt-C5O4NHsc.d.mts.map} +1 -1
- package/dist/vrt.d.mts +1 -1
- package/package.json +4 -4
- package/dist/gallery-qM8Q_21C.mjs.map +0 -1
package/dist/a11y/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as generateA11yJsonReport, i as generateA11yHtmlReport, n as MuseaA11yRunner, r as computeA11ySummary, t as A11ySummary } from "../index-
|
|
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-
|
|
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-
|
|
151
|
+
//# sourceMappingURL=index-leLThbJH.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
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-
|
|
2
|
-
import { c as AnalysisApiResponse, l as PaletteApiResponse, n as MuseaA11yRunner, o as A11yOptions, s as A11yResult, t as A11ySummary } from "./index-
|
|
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
|
package/dist/index.d.mts.map
CHANGED
|
@@ -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":";;;;;;;;;;;;AAYA;;UAAiB,WAAA;EACf,KAAA;EACA,IAAA;EACA,WAAA;EACA,UAAA,GAAa,MAAA;EACb,KAAA;EACA,UAAA;EACA,cAAA;AAAA;;;;UAMe,aAAA;EACf,IAAA;EACA,MAAA,EAAQ,MAAA,SAAe,WAAA;EACvB,aAAA,GAAgB,aAAA;AAAA;;;;UAMD,qBAAA;EACf,UAAA,EAAY,aAAA;EACZ,QAAA;IACE,IAAA;IACA,OAAA;IACA,WAAA;EAAA;AAAA;AALJ;;;AAAA,UAYiB,qBAAA;EAXf;;;EAeA,UAAA;EAZE;;;;EAkBF,YAAA;EAVoC;;;;EAgBpC,SAAA;EAAA;;;EAKA,UAAA,GAAa,cAAA;AAAA;AAMf;;;AAAA,KAAY,cAAA,IAAkB,KAAA,EAAO,WAAA,EAAa,IAAA,eAAmB,WAAA;;;;iBAK/C,WAAA,CAAY,UAAA,WAAqB,OAAA,CAAQ,aAAA;;;KC5EnD,qBAAA;AAAA,UAaK,qBAAA;EACf,IAAA,EAAM,qBAAA;EACN,IAAA;EACA,YAAA;EACA,YAAA;EACA,qBAAA;AAAA;AAAA,UAGe,uBAAA;EDVf;;;;ECeA,KAAA,GAAQ,qBAAA;EDXR;ECaA,aAAA,GAAgB,qBAAA;AAAA;AAAA,UAGD,oBAAA;EACf,IAAA,EAAM,qBAAA;EACN,KAAA;EACA,SAAA;EACA,SAAA;IACE,IAAA;IACA,KAAA,GAAQ,WAAA;IACR,KAAA;EAAA;AAAA;AAAA,UAIa,wBAAA;EACf,SAAA;EACA,KAAA,EAAO,WAAA;EACP,QAAA,GAAW,MAAA,SAAe,WAAA;EAC1B,MAAA,GAAS,uBAAA;AAAA;AAAA,iBASK,mBAAA,CAAoB,KAAA,EAAO,wBAAA,GAA2B,oBAAA;;;KCtD1D,eAAA;;;;AFSZ;UEHiB,gBAAA;EACf,SAAA;EACA,WAAA;EACA,UAAA;EACA,UAAA;EACA,MAAA;EACA,WAAA;EACA,cAAA;EACA,YAAA;EACA,IAAA;EACA,aAAA;EACA,SAAA;EACA,MAAA;EACA,YAAA;EACA,OAAA;EACA,KAAA;EACA,IAAA;EACA,OAAA;EACA,MAAA;AAAA;;;;UAMe,UAAA;EFNQ;EEQvB,IAAA;EFPgB;EEShB,IAAA;EFT6B;EEW7B,MAAA,EAAQ,gBAAA;AAAA;;;;UAMO,YAAA;EFTf;;;;EEcA,OAAA;EFXa;AAOf;;;EEUE,OAAA;EFNA;;;;EEYA,QAAA;EFK2B;;AAM7B;;EELE,eAAA;EFK8E;;;;EEC9E,eAAA;EFD8E;;AAKhF;;;;EEIE,SAAA;EFJqD;;;EESrD,GAAA,GAAM,UAAA;;;;ADrFR;;EC4FE,UAAA;ED5F+B;;AAajC;;ECqFE,aAAA,GAAgB,uBAAA;EDpFW;;;;;;;;;AAO7B;ECyFE,WAAA;;;;;;;;;EAUA,KAAA,iCAAsC,UAAA,GAAa,UAAA;EDzFhB;;;;;;;;ECmGnC,UAAA;ED7FE;;;;;AAKJ;;;;;ECoGE,YAAA;EDhGS
|
|
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 {
|
|
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
|
-
|
|
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 = ${
|
|
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
|
-
|
|
902
|
+
${mountInitialApp}
|
|
895
903
|
ensureArtStyles(artModule.__styles__);
|
|
896
904
|
${setupCall}
|
|
897
905
|
container.innerHTML = '';
|
|
898
906
|
container.className = 'musea-variant';
|
|
899
|
-
|
|
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
|
-
|
|
936
|
+
${destroyCurrentApp}
|
|
930
937
|
}
|
|
931
|
-
|
|
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 = ${
|
|
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
|
|
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} =
|
|
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} =
|
|
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-
|
|
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 =
|
|
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`);
|