@assemblyline-agents/openui 3.0.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/LICENSE +21 -0
- package/README.md +72 -0
- package/dist/CORMORANT-GARAMOND-OFL.txt +93 -0
- package/dist/OUTFIT-OFL.txt +93 -0
- package/dist/artifact.d.ts +31 -0
- package/dist/artifact.d.ts.map +1 -0
- package/dist/artifact.js +79 -0
- package/dist/artifact.js.map +1 -0
- package/dist/config.d.ts +60 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +203 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/library.d.ts +9 -0
- package/dist/library.d.ts.map +1 -0
- package/dist/library.js +109 -0
- package/dist/library.js.map +1 -0
- package/dist/openui-browser.js +629 -0
- package/dist/openui-styles.css +1 -0
- package/dist/render.d.ts +3 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +229 -0
- package/dist/render.js.map +1 -0
- package/dist/report-library.d.ts +2 -0
- package/dist/report-library.d.ts.map +1 -0
- package/dist/report-library.js +224 -0
- package/dist/report-library.js.map +1 -0
- package/dist/responsive-stack.d.ts +35 -0
- package/dist/responsive-stack.d.ts.map +1 -0
- package/dist/responsive-stack.js +58 -0
- package/dist/responsive-stack.js.map +1 -0
- package/dist/standard-pack.d.ts +4 -0
- package/dist/standard-pack.d.ts.map +1 -0
- package/dist/standard-pack.js +10 -0
- package/dist/standard-pack.js.map +1 -0
- package/dist/tools.d.ts +33 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +350 -0
- package/dist/tools.js.map +1 -0
- package/package.json +60 -0
- package/skills/openui-artifacts/SKILL.md +40 -0
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAyErE"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
const OPENUI_BROWSER_SCRIPT = readFileSync(new URL("./openui-browser.js", import.meta.url), "utf8");
|
|
3
|
+
const OPENUI_STYLES = readFileSync(new URL("./openui-styles.css", import.meta.url), "utf8");
|
|
4
|
+
export function renderOpenUiArtifact(input) {
|
|
5
|
+
const brand = input.config.brand;
|
|
6
|
+
const initialTheme = themeVariables(brand.theme);
|
|
7
|
+
const themeColor = themeToken(brand.theme, "background") ?? "#ffffff";
|
|
8
|
+
const logo = brand.logo
|
|
9
|
+
? '<img class="artifact-logo" src="' + attribute(brand.logo.dataUri) + '" alt="' + attribute(brand.logo.alt) + '">'
|
|
10
|
+
: '<div class="artifact-brand">' + text(brand.name) + "</div>";
|
|
11
|
+
const footerText = brand.footer ?? brand.legalName;
|
|
12
|
+
const footer = footerText ? "<footer>" + text(footerText) + "</footer>" : "";
|
|
13
|
+
const bootOptions = jsonForScript({
|
|
14
|
+
source: input.source,
|
|
15
|
+
theme: brand.theme
|
|
16
|
+
});
|
|
17
|
+
const bootScript = [
|
|
18
|
+
"(function(){",
|
|
19
|
+
"const root=document.getElementById('openui-root');",
|
|
20
|
+
"try{",
|
|
21
|
+
"const options=" + bootOptions + ";",
|
|
22
|
+
"const api=window.__AssemblyLineOpenUI;",
|
|
23
|
+
"if(!api){throw new Error('OpenUI browser runtime did not load.');}",
|
|
24
|
+
"const content=api.React.createElement(api.Renderer,{",
|
|
25
|
+
"response:options.source,library:api.openuiLibrary,isStreaming:false",
|
|
26
|
+
"});",
|
|
27
|
+
"function Report(){",
|
|
28
|
+
"api.React.useEffect(function(){",
|
|
29
|
+
"root.classList.remove('openui-loading');",
|
|
30
|
+
"root.removeAttribute('aria-busy');",
|
|
31
|
+
"root.removeAttribute('aria-label');",
|
|
32
|
+
"},[]);",
|
|
33
|
+
"return api.React.createElement(api.ThemeProvider,{",
|
|
34
|
+
"mode:'light',lightTheme:options.theme,darkTheme:options.theme",
|
|
35
|
+
"},content);",
|
|
36
|
+
"}",
|
|
37
|
+
"api.createRoot(root).render(api.React.createElement(Report));",
|
|
38
|
+
"}catch(error){",
|
|
39
|
+
"root.className='openui-load-failed';",
|
|
40
|
+
"root.removeAttribute('aria-busy');",
|
|
41
|
+
"root.setAttribute('aria-label','Report failed to load');",
|
|
42
|
+
"root.innerHTML='<div class=\"artifact-load-error\"><strong>Report unavailable</strong><span>Refresh the page to try again.</span></div>';",
|
|
43
|
+
"console.error(error);",
|
|
44
|
+
"}",
|
|
45
|
+
"}());"
|
|
46
|
+
].join("");
|
|
47
|
+
return [
|
|
48
|
+
"<!doctype html>",
|
|
49
|
+
'<html lang="en" style="' + attribute(initialTheme) + '">',
|
|
50
|
+
"<head>",
|
|
51
|
+
'<meta charset="utf-8">',
|
|
52
|
+
'<meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
53
|
+
'<meta name="referrer" content="no-referrer">',
|
|
54
|
+
'<meta name="theme-color" content="' + attribute(themeColor) + '">',
|
|
55
|
+
'<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:; connect-src 'none'; media-src 'none'; frame-src 'none'; worker-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none'">',
|
|
56
|
+
"<title>" + text(input.title) + "</title>",
|
|
57
|
+
"<style>" + styleText(OPENUI_STYLES) + styleText(shellStyles()) + "</style>",
|
|
58
|
+
"</head>",
|
|
59
|
+
"<body>",
|
|
60
|
+
'<main class="artifact-shell">',
|
|
61
|
+
'<header class="artifact-header">',
|
|
62
|
+
logo,
|
|
63
|
+
'<h1 class="artifact-title">' + text(input.title) + "</h1>",
|
|
64
|
+
"</header>",
|
|
65
|
+
'<div id="openui-root" class="openui-loading" aria-busy="true" aria-label="Loading report">',
|
|
66
|
+
loadingSkeleton(),
|
|
67
|
+
"</div>",
|
|
68
|
+
'<noscript><div class="artifact-load-error"><strong>JavaScript is required</strong><span>Enable JavaScript to view this report.</span></div></noscript>',
|
|
69
|
+
footer,
|
|
70
|
+
"</main>",
|
|
71
|
+
"<script>" + scriptText(OPENUI_BROWSER_SCRIPT) + "</script>",
|
|
72
|
+
"<script>" + scriptText(bootScript) + "</script>",
|
|
73
|
+
"</body>",
|
|
74
|
+
"</html>"
|
|
75
|
+
].join("");
|
|
76
|
+
}
|
|
77
|
+
function shellStyles() {
|
|
78
|
+
return [
|
|
79
|
+
"html{background:var(--openui-background,#fff);max-width:100%;overflow-x:clip;overscroll-behavior-x:none;scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;}",
|
|
80
|
+
"body{margin:0;max-width:100%;overflow-x:clip;overscroll-behavior-x:none;background:var(--openui-background,#fff);color:var(--openui-text-neutral-primary,#111);font-family:var(--openui-font-body,'Outfit',sans-serif);}",
|
|
81
|
+
".artifact-shell{box-sizing:border-box;max-width:100%;width:min(1200px,calc(100% - 40px));margin:0 auto;padding:40px 0 56px;--openui-font-body:'Outfit',Arial,sans-serif;--openui-font-label:'Outfit',Arial,sans-serif;--openui-font-heading:'Cormorant Garamond',Georgia,serif;--openui-text-body-xs:400 12px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-xs-heavy:600 12px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-sm:400 14px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-sm-heavy:600 14px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-default:400 16px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-default-heavy:600 16px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-lg:400 18px/1.5 'Outfit',Arial,sans-serif;--openui-text-body-lg-heavy:600 18px/1.5 'Outfit',Arial,sans-serif;--openui-text-label-xs:400 12px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-xs-heavy:600 12px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-sm:400 14px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-sm-heavy:600 14px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-default:400 16px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-default-heavy:600 16px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-lg:400 18px/1.25 'Outfit',Arial,sans-serif;--openui-text-label-lg-heavy:600 18px/1.25 'Outfit',Arial,sans-serif;--openui-text-heading-xs:600 17px/1.2 'Cormorant Garamond',Georgia,serif;--openui-text-heading-sm:600 21px/1.18 'Cormorant Garamond',Georgia,serif;--openui-text-heading-md:600 26px/1.14 'Cormorant Garamond',Georgia,serif;--openui-text-heading-lg:600 31px/1.1 'Cormorant Garamond',Georgia,serif;--openui-text-heading-xl:600 36px/1.08 'Cormorant Garamond',Georgia,serif;--openui-text-numbers-xs:400 12px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-xs-heavy:600 12px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-sm:400 14px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-sm-heavy:600 14px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-default:400 16px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-default-heavy:600 16px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-lg:400 18px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-lg-heavy:600 18px/1.5 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-heading-sm:600 18px/1.25 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-heading-md:600 24px/1.1 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-heading-lg:600 28px/1.1 var(--openui-font-numbers,'Outfit',Arial,sans-serif);--openui-text-numbers-heading-xl:600 32px/1.1 var(--openui-font-numbers,'Outfit',Arial,sans-serif);}",
|
|
82
|
+
".artifact-header{border-bottom:1px solid var(--openui-border-default,#e5e7eb);margin-bottom:32px;padding-bottom:24px;}",
|
|
83
|
+
".artifact-logo{display:block;max-width:240px;max-height:56px;object-fit:contain;margin-bottom:24px;}",
|
|
84
|
+
".artifact-brand{color:var(--openui-text-brand,#111);font:var(--openui-text-label-md,600 12px sans-serif);letter-spacing:.1em;text-transform:uppercase;margin-bottom:18px;}",
|
|
85
|
+
".artifact-title{color:var(--openui-text-brand,var(--openui-text-neutral-primary,#111));font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(36px,6vw,68px);font-weight:600;line-height:1.05;margin:0;}",
|
|
86
|
+
".artifact-loading{display:grid;gap:56px;min-height:720px;}",
|
|
87
|
+
".artifact-loading-summary{display:grid;gap:18px;}",
|
|
88
|
+
".artifact-loading-line,.artifact-loading-block{background:var(--openui-border-default,#e5e3dc);background:color-mix(in srgb,var(--openui-text-brand,#013220) 10%,var(--openui-background,#f5f0e8));border-radius:999px;overflow:hidden;position:relative;}",
|
|
89
|
+
".artifact-loading-line::after,.artifact-loading-block::after{animation:openui-skeleton-sweep 1.6s ease-in-out infinite;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--openui-foreground,#fff) 72%,transparent),transparent);content:'';inset:0;position:absolute;transform:translateX(-100%);}",
|
|
90
|
+
".artifact-loading-line{height:14px;max-width:760px;width:68%;}",
|
|
91
|
+
".artifact-loading-line-short{height:10px;width:44%;}",
|
|
92
|
+
".artifact-loading-metrics{display:grid;gap:16px;grid-template-columns:repeat(4,minmax(0,1fr));}",
|
|
93
|
+
".artifact-loading-card{background:var(--openui-foreground,#fff);border:1px solid var(--openui-border-default,#e5e3dc);border-radius:14px;box-sizing:border-box;display:grid;gap:18px;min-height:170px;padding:22px 24px;}",
|
|
94
|
+
".artifact-loading-card .artifact-loading-block:first-child{height:10px;width:48%;}",
|
|
95
|
+
".artifact-loading-card .artifact-loading-block:nth-child(2){height:34px;width:62%;}",
|
|
96
|
+
".artifact-loading-card .artifact-loading-block:last-child{align-self:end;height:10px;width:82%;}",
|
|
97
|
+
".artifact-loading-panel{background:var(--openui-foreground,#fff);border:1px solid var(--openui-border-default,#e5e3dc);border-radius:16px;display:grid;gap:28px;min-height:300px;padding:26px;}",
|
|
98
|
+
".artifact-loading-panel-heading{height:18px;width:min(320px,52%);}",
|
|
99
|
+
".artifact-loading-bars{align-items:end;display:flex;gap:18px;height:190px;padding-top:10px;}",
|
|
100
|
+
".artifact-loading-bar{border-radius:5px 5px 2px 2px;flex:1;}",
|
|
101
|
+
".artifact-loading-bar:nth-child(1){height:48%;}.artifact-loading-bar:nth-child(2){height:76%;}.artifact-loading-bar:nth-child(3){height:61%;}.artifact-loading-bar:nth-child(4){height:88%;}.artifact-loading-bar:nth-child(5){height:69%;}.artifact-loading-bar:nth-child(6){height:42%;}",
|
|
102
|
+
".artifact-load-error{background:var(--openui-foreground,#fff);border:1px solid var(--openui-border-accent,#9e8a5e);border-radius:14px;color:var(--openui-text-neutral-primary,#1a1a18);display:grid;font:400 15px/1.5 var(--openui-font-body,'Outfit',sans-serif);gap:6px;padding:22px 24px;}",
|
|
103
|
+
".artifact-load-error strong{color:var(--openui-text-brand,#013220);font-weight:600;}",
|
|
104
|
+
"@keyframes openui-skeleton-sweep{to{transform:translateX(100%)}}",
|
|
105
|
+
"@media(prefers-reduced-motion:reduce){.artifact-loading-line::after,.artifact-loading-block::after{animation:none}}",
|
|
106
|
+
"#openui-root{max-width:100%;min-width:0;}",
|
|
107
|
+
"#openui-root>div{gap:64px!important;}",
|
|
108
|
+
".assemblyline-stack{box-sizing:border-box;min-width:0;}",
|
|
109
|
+
".assemblyline-stack-row{width:100%;}",
|
|
110
|
+
".assemblyline-metric-card{align-self:stretch;box-sizing:border-box;display:grid;flex:1 1 0;gap:12px;grid-template-rows:auto auto 1fr;min-height:170px;min-width:0;padding:22px 24px;background:var(--openui-foreground,#fff);border:1px solid var(--openui-border-default,#e5e7eb);border-radius:14px;}",
|
|
111
|
+
".assemblyline-metric-label{color:var(--openui-text-brand,#013220);font:700 12px/1.25 var(--openui-font-label,'Outfit',sans-serif);letter-spacing:.07em;text-transform:uppercase;}",
|
|
112
|
+
".assemblyline-metric-value{color:var(--openui-text-brand,#013220);font:600 38px/1 var(--openui-font-numbers,var(--openui-font-body,'Outfit',sans-serif));font-variant-numeric:tabular-nums;letter-spacing:-.035em;}",
|
|
113
|
+
".assemblyline-metric-note{align-self:end;color:var(--openui-text-neutral-secondary,#444);font:400 14px/1.45 var(--openui-font-body,'Outfit',sans-serif);margin:0;}",
|
|
114
|
+
".openui-callout{gap:10px;padding:20px 22px;border:1px solid var(--openui-border-accent,#9e8a5e);border-radius:14px;background:color-mix(in srgb,var(--openui-foreground,#fff) 88%,var(--openui-background,#f5f0e8));}",
|
|
115
|
+
".openui-callout-warning{border-color:var(--openui-border-accent,#9e8a5e);}",
|
|
116
|
+
".openui-callout-success{border-color:var(--openui-text-success-primary,var(--openui-text-brand,#013220));}",
|
|
117
|
+
".openui-callout-title{color:var(--openui-text-brand,#013220)!important;font:700 16px/1.3 var(--openui-font-label,'Outfit',sans-serif);}",
|
|
118
|
+
".openui-callout-description{font:400 15px/1.58 var(--openui-font-body,'Outfit',sans-serif);}",
|
|
119
|
+
".openui-card-card,.openui-card-sunk{border-radius:16px;}",
|
|
120
|
+
".openui-table-container{border-radius:12px;overflow:auto;}",
|
|
121
|
+
".openui-table-head{background:var(--openui-text-brand,#013220);border-bottom-color:var(--openui-text-brand,#013220);}",
|
|
122
|
+
".openui-table-head .openui-table-head-label{color:var(--openui-foreground,#fff);font:700 13px/1.3 var(--openui-font-label,'Outfit',sans-serif);letter-spacing:.01em;}",
|
|
123
|
+
".openui-table-head .openui-table-head-icon{color:var(--openui-foreground,#fff);}",
|
|
124
|
+
".openui-table-cell{font:400 14px/1.45 var(--openui-font-body,'Outfit',sans-serif);}",
|
|
125
|
+
".openui-table-container,.openui-scrollable-table-wrapper,.openui-scrollable-table-scroll-container{box-sizing:border-box;max-width:100%;min-width:0;}",
|
|
126
|
+
".assemblyline-horizontal-bar-chart,.openui-bar-chart-container-inner,.openui-line-chart-container-inner,.openui-area-chart-container-inner,.openui-horizontal-bar-chart-container,.openui-horizontal-bar-chart-container-inner,.openui-horizontal-bar-chart-container-inner-wrapper,.openui-scatter-chart-container,.openui-scatter-chart-container-inner,.openui-scatter-chart-main-and-x-axis-container,.openui-radar-chart-container-wrapper,.openui-radar-chart-container,.openui-pie-chart-container-wrapper,.openui-pie-chart-container,.openui-radial-chart-container-wrapper,.openui-radial-chart-container,.openui-single-stacked-bar-chart-container{box-sizing:border-box;max-width:100%;min-width:0;}",
|
|
127
|
+
".openui-scrollable-table-control,.openui-chart-vertical-scroll-buttons-container{display:none!important;}",
|
|
128
|
+
".openui-scrollable-table-scroll-container,.openui-bar-chart-main-container,.openui-line-chart-main-container,.openui-area-chart-main-container,.openui-horizontal-bar-chart-main-container{box-sizing:border-box;max-width:100%;min-width:0;scrollbar-color:var(--openui-border-accent,#9e8a5e) transparent!important;scrollbar-width:thin!important;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;}",
|
|
129
|
+
".openui-scrollable-table-scroll-container::-webkit-scrollbar,.openui-bar-chart-main-container::-webkit-scrollbar,.openui-line-chart-main-container::-webkit-scrollbar,.openui-area-chart-main-container::-webkit-scrollbar,.openui-horizontal-bar-chart-main-container::-webkit-scrollbar{display:block!important;width:5px;height:5px;}",
|
|
130
|
+
".openui-scrollable-table-scroll-container::-webkit-scrollbar-track,.openui-bar-chart-main-container::-webkit-scrollbar-track,.openui-line-chart-main-container::-webkit-scrollbar-track,.openui-area-chart-main-container::-webkit-scrollbar-track,.openui-horizontal-bar-chart-main-container::-webkit-scrollbar-track{background:transparent;}",
|
|
131
|
+
".openui-scrollable-table-scroll-container::-webkit-scrollbar-thumb,.openui-bar-chart-main-container::-webkit-scrollbar-thumb,.openui-line-chart-main-container::-webkit-scrollbar-thumb,.openui-area-chart-main-container::-webkit-scrollbar-thumb,.openui-horizontal-bar-chart-main-container::-webkit-scrollbar-thumb{background:var(--openui-border-accent,#9e8a5e);border-radius:999px;}",
|
|
132
|
+
".assemblyline-horizontal-bar-chart{margin:0;}",
|
|
133
|
+
".assemblyline-horizontal-bar-chart .recharts-bar-rectangle line{display:none;}",
|
|
134
|
+
".assemblyline-horizontal-bar-chart .recharts-bar-rectangle path{transform:scaleY(1.45);transform-box:fill-box;transform-origin:center;}",
|
|
135
|
+
".assemblyline-chart-axis-label{color:var(--openui-text-neutral-secondary,#444);font:600 12px/1.3 var(--openui-font-label,'Outfit',sans-serif);letter-spacing:.02em;margin-top:8px;text-align:center;}",
|
|
136
|
+
".openui-header{gap:8px;}",
|
|
137
|
+
".openui-header-top-left{color:var(--openui-text-brand,#013220);font:600 25px/1.15 'Cormorant Garamond',Georgia,serif;letter-spacing:-.01em;}",
|
|
138
|
+
".openui-header-bottom{font:400 15px/1.5 'Outfit',Arial,sans-serif;}",
|
|
139
|
+
".assemblyline-cited-text{color:var(--openui-text-neutral-primary,#111);font:400 16px/1.55 'Outfit',Arial,sans-serif;margin:0;}",
|
|
140
|
+
".assemblyline-cited-text-small{color:var(--openui-text-neutral-secondary,#444);font-size:14px;line-height:1.5;}",
|
|
141
|
+
".assemblyline-source-links{display:inline-flex;gap:4px;margin-left:6px;white-space:nowrap;}",
|
|
142
|
+
".assemblyline-source-ref{color:var(--openui-text-brand,#013220);font:600 12px/1.25 'Outfit',Arial,sans-serif;text-decoration-color:var(--openui-border-accent,#9e8a5e);text-decoration-thickness:1px;text-underline-offset:3px;}",
|
|
143
|
+
".assemblyline-source-ref:hover{text-decoration-thickness:2px;}",
|
|
144
|
+
".assemblyline-source-ref:focus-visible{border-radius:3px;outline:2px solid var(--openui-border-accent,#9e8a5e);outline-offset:3px;}",
|
|
145
|
+
".assemblyline-source-ref-target{scroll-margin-top:24px;}",
|
|
146
|
+
"footer{border-top:1px solid var(--openui-border-default,#e5e7eb);color:var(--openui-text-neutral-tertiary,#666);font:var(--openui-text-body-sm,12px sans-serif);margin-top:40px;padding-top:18px;}",
|
|
147
|
+
"@media(max-width:800px){.artifact-loading-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.artifact-loading-card:nth-child(n+3){display:none}}",
|
|
148
|
+
"@media(max-width:640px){.artifact-shell{width:min(100% - 24px,1200px);padding-top:24px}.artifact-title{font-size:36px}#openui-root>div{gap:48px!important}.artifact-loading{gap:40px;min-height:620px}.artifact-loading-line{width:88%}.artifact-loading-line-short{width:64%}.artifact-loading-card{min-height:150px;padding:18px 16px}.artifact-loading-panel{min-height:260px;padding:20px}.artifact-loading-bars{gap:10px;height:160px}.assemblyline-stack-row{flex-wrap:wrap!important;justify-content:flex-start!important}.assemblyline-stack-row>:is(.assemblyline-metric-card,.openui-callout){flex:1 1 160px;min-width:min(100%,160px)}.openui-radar-chart-container-wrapper,.openui-pie-chart-container-wrapper,.openui-radial-chart-container-wrapper{flex-wrap:wrap}.assemblyline-metric-card{min-height:176px;padding:18px 16px}.assemblyline-metric-value{font-size:28px;letter-spacing:-.055em}.openui-callout{padding:18px}.openui-header-top-left{font-size:23px}}"
|
|
149
|
+
].join("");
|
|
150
|
+
}
|
|
151
|
+
function loadingSkeleton() {
|
|
152
|
+
const card = [
|
|
153
|
+
'<div class="artifact-loading-card">',
|
|
154
|
+
'<div class="artifact-loading-block"></div>',
|
|
155
|
+
'<div class="artifact-loading-block"></div>',
|
|
156
|
+
'<div class="artifact-loading-block"></div>',
|
|
157
|
+
"</div>"
|
|
158
|
+
].join("");
|
|
159
|
+
const bar = '<div class="artifact-loading-block artifact-loading-bar"></div>';
|
|
160
|
+
return [
|
|
161
|
+
'<div class="artifact-loading" aria-hidden="true">',
|
|
162
|
+
'<div class="artifact-loading-summary">',
|
|
163
|
+
'<div class="artifact-loading-line"></div>',
|
|
164
|
+
'<div class="artifact-loading-line artifact-loading-line-short"></div>',
|
|
165
|
+
"</div>",
|
|
166
|
+
'<div class="artifact-loading-metrics">',
|
|
167
|
+
card,
|
|
168
|
+
card,
|
|
169
|
+
card,
|
|
170
|
+
card,
|
|
171
|
+
"</div>",
|
|
172
|
+
'<div class="artifact-loading-panel">',
|
|
173
|
+
'<div class="artifact-loading-block artifact-loading-panel-heading"></div>',
|
|
174
|
+
'<div class="artifact-loading-bars">',
|
|
175
|
+
bar,
|
|
176
|
+
bar,
|
|
177
|
+
bar,
|
|
178
|
+
bar,
|
|
179
|
+
bar,
|
|
180
|
+
bar,
|
|
181
|
+
"</div>",
|
|
182
|
+
"</div>",
|
|
183
|
+
"</div>"
|
|
184
|
+
].join("");
|
|
185
|
+
}
|
|
186
|
+
function themeVariables(theme) {
|
|
187
|
+
return Object.entries(theme).flatMap(([name, value]) => {
|
|
188
|
+
if (typeof value !== "string" || !safeThemeValue(value))
|
|
189
|
+
return [];
|
|
190
|
+
const variable = name.replace(/([a-z0-9])([A-Z])/gu, "$1-$2").toLowerCase();
|
|
191
|
+
return [`--openui-${variable}:${value}`];
|
|
192
|
+
}).join(";");
|
|
193
|
+
}
|
|
194
|
+
function themeToken(theme, name) {
|
|
195
|
+
const value = theme[name];
|
|
196
|
+
return typeof value === "string" && safeThemeValue(value) ? value : undefined;
|
|
197
|
+
}
|
|
198
|
+
function safeThemeValue(value) {
|
|
199
|
+
return !/[;{}<>\x60]/u.test(value) && !/url\s*\(|@import/iu.test(value);
|
|
200
|
+
}
|
|
201
|
+
function jsonForScript(value) {
|
|
202
|
+
return JSON.stringify(value)
|
|
203
|
+
.replace(/&/gu, "\\u0026")
|
|
204
|
+
.replace(/</gu, "\\u003c")
|
|
205
|
+
.replace(/>/gu, "\\u003e")
|
|
206
|
+
.replace(/\u2028/gu, "\\u2028")
|
|
207
|
+
.replace(/\u2029/gu, "\\u2029");
|
|
208
|
+
}
|
|
209
|
+
function scriptText(value) {
|
|
210
|
+
return value.replace(/<\/script/giu, "<\\/script");
|
|
211
|
+
}
|
|
212
|
+
function styleText(value) {
|
|
213
|
+
return value.replace(/<\/style/giu, "<\\/style");
|
|
214
|
+
}
|
|
215
|
+
function attribute(value) {
|
|
216
|
+
return html(value);
|
|
217
|
+
}
|
|
218
|
+
function text(value) {
|
|
219
|
+
return html(String(value));
|
|
220
|
+
}
|
|
221
|
+
function html(value) {
|
|
222
|
+
return value
|
|
223
|
+
.replace(/&/gu, "&")
|
|
224
|
+
.replace(/</gu, "<")
|
|
225
|
+
.replace(/>/gu, ">")
|
|
226
|
+
.replace(/"/gu, """)
|
|
227
|
+
.replace(/'/gu, "'");
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-library.d.ts","sourceRoot":"","sources":["../src/report-library.ts"],"names":[],"mappings":"AAoSA,eAAO,MAAM,yBAAyB,yCAIpC,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { createLibrary, defineComponent } from "@openuidev/react-lang";
|
|
2
|
+
import { HorizontalBarChart as HorizontalBarChartView } from "@openuidev/react-ui";
|
|
3
|
+
import { openuiLibrary } from "@openuidev/react-ui/genui-lib";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { z } from "zod/v4";
|
|
6
|
+
import { ResponsiveStack } from "./responsive-stack.js";
|
|
7
|
+
const ReportSeriesSchema = z.object({
|
|
8
|
+
category: z.string(),
|
|
9
|
+
values: z.array(z.number())
|
|
10
|
+
});
|
|
11
|
+
const ReportHorizontalBarChartSchema = z.object({
|
|
12
|
+
labels: z.array(z.string()),
|
|
13
|
+
series: z.array(ReportSeriesSchema),
|
|
14
|
+
variant: z.enum(["grouped", "stacked"]).optional(),
|
|
15
|
+
xLabel: z.string().optional(),
|
|
16
|
+
yLabel: z.string().optional()
|
|
17
|
+
});
|
|
18
|
+
const ReportHorizontalBarChart = defineComponent({
|
|
19
|
+
name: "HorizontalBarChart",
|
|
20
|
+
props: ReportHorizontalBarChartSchema,
|
|
21
|
+
description: "Horizontal bars for ranked lists. Put units in the xLabel, such as EV / EBITDA (x), Revenue ($M), or Margin (%)",
|
|
22
|
+
component: ({ props }) => {
|
|
23
|
+
const figureRef = React.useRef(null);
|
|
24
|
+
const series = normalizeSeries(props.series);
|
|
25
|
+
const data = props.labels.map((category, index) => {
|
|
26
|
+
const row = { category };
|
|
27
|
+
for (const item of series)
|
|
28
|
+
row[item.category] = item.values[index] ?? 0;
|
|
29
|
+
return row;
|
|
30
|
+
});
|
|
31
|
+
const height = Math.min(680, Math.max(320, props.labels.length * 54 + 64));
|
|
32
|
+
const description = [props.yLabel, props.xLabel].filter(Boolean).join(" by ");
|
|
33
|
+
const axisUnit = inferAxisUnit(props.xLabel);
|
|
34
|
+
React.useEffect(() => {
|
|
35
|
+
if (!axisUnit || !figureRef.current)
|
|
36
|
+
return;
|
|
37
|
+
const updateTicks = () => {
|
|
38
|
+
const figure = figureRef.current;
|
|
39
|
+
const ticks = Array.from(figure.querySelectorAll(".openui-horizontal-bar-chart-x-axis-container text"));
|
|
40
|
+
for (const tick of ticks) {
|
|
41
|
+
const raw = tick.getAttribute("data-axis-value") ?? tick.textContent?.trim();
|
|
42
|
+
if (!raw)
|
|
43
|
+
continue;
|
|
44
|
+
tick.setAttribute("data-axis-value", raw);
|
|
45
|
+
const formatted = formatAxisTick(raw, axisUnit);
|
|
46
|
+
if (tick.textContent !== formatted)
|
|
47
|
+
tick.textContent = formatted;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
updateTicks();
|
|
51
|
+
const Observer = globalThis.MutationObserver;
|
|
52
|
+
if (!Observer)
|
|
53
|
+
return;
|
|
54
|
+
const observer = new Observer(updateTicks);
|
|
55
|
+
observer.observe(figureRef.current, { childList: true, subtree: true });
|
|
56
|
+
return () => observer.disconnect();
|
|
57
|
+
}, [axisUnit]);
|
|
58
|
+
if (!props.labels.length || !series.length)
|
|
59
|
+
return null;
|
|
60
|
+
return React.createElement("figure", {
|
|
61
|
+
ref: figureRef,
|
|
62
|
+
className: "assemblyline-horizontal-bar-chart",
|
|
63
|
+
"aria-label": description || "Horizontal bar chart"
|
|
64
|
+
}, React.createElement(HorizontalBarChartView, {
|
|
65
|
+
data,
|
|
66
|
+
categoryKey: "category",
|
|
67
|
+
legend: series.length > 1,
|
|
68
|
+
grid: true,
|
|
69
|
+
radius: 2,
|
|
70
|
+
isAnimationActive: false,
|
|
71
|
+
height,
|
|
72
|
+
...(props.variant ? { variant: props.variant } : {})
|
|
73
|
+
}), props.xLabel
|
|
74
|
+
? React.createElement("figcaption", { className: "assemblyline-chart-axis-label" }, props.xLabel)
|
|
75
|
+
: null);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
function inferAxisUnit(label) {
|
|
79
|
+
const match = label?.trim().match(/\(([^()]+)\)\s*$/u);
|
|
80
|
+
return match?.[1]?.trim() || null;
|
|
81
|
+
}
|
|
82
|
+
function formatAxisTick(raw, unit) {
|
|
83
|
+
if (raw.endsWith(unit) || raw.includes(`${unit} `))
|
|
84
|
+
return raw;
|
|
85
|
+
if (/^[%x]$/u.test(unit))
|
|
86
|
+
return `${raw}${unit}`;
|
|
87
|
+
const currencyScale = unit.match(/^([$€£¥])([A-Za-z]+)$/u);
|
|
88
|
+
if (currencyScale) {
|
|
89
|
+
const sign = raw.startsWith("-") ? "-" : "";
|
|
90
|
+
const magnitude = sign ? raw.slice(1) : raw;
|
|
91
|
+
return `${sign}${currencyScale[1]}${magnitude}${currencyScale[2]}`;
|
|
92
|
+
}
|
|
93
|
+
return `${raw} ${unit}`;
|
|
94
|
+
}
|
|
95
|
+
function normalizeSeries(value) {
|
|
96
|
+
if (!Array.isArray(value))
|
|
97
|
+
return [];
|
|
98
|
+
return value.flatMap((item) => {
|
|
99
|
+
if (!item || typeof item !== "object")
|
|
100
|
+
return [];
|
|
101
|
+
const candidate = item;
|
|
102
|
+
const props = candidate.type === "element" && candidate.props && typeof candidate.props === "object"
|
|
103
|
+
? candidate.props
|
|
104
|
+
: candidate;
|
|
105
|
+
if (typeof props.category !== "string" || !Array.isArray(props.values))
|
|
106
|
+
return [];
|
|
107
|
+
const values = props.values.filter((entry) => typeof entry === "number");
|
|
108
|
+
return [{ category: props.category, values }];
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const MetricCardSchema = z.object({
|
|
112
|
+
label: z.string(),
|
|
113
|
+
value: z.string(),
|
|
114
|
+
note: z.string().optional(),
|
|
115
|
+
sourceIds: z.array(z.string()).optional()
|
|
116
|
+
});
|
|
117
|
+
const MetricCard = defineComponent({
|
|
118
|
+
name: "MetricCard",
|
|
119
|
+
props: MetricCardSchema,
|
|
120
|
+
description: "Equal-height report KPI card with a prominent value, compact label, and optional supporting note",
|
|
121
|
+
component: ({ props }) => React.createElement("article", { className: "assemblyline-metric-card" }, React.createElement("div", { className: "assemblyline-metric-label" }, props.label), React.createElement("strong", { className: "assemblyline-metric-value" }, props.value), props.note || props.sourceIds?.length
|
|
122
|
+
? React.createElement("p", { className: "assemblyline-metric-note" }, props.note, renderSourceLinks(props.sourceIds))
|
|
123
|
+
: React.createElement("span", { className: "assemblyline-metric-note", "aria-hidden": true }))
|
|
124
|
+
});
|
|
125
|
+
const SourceRefSchema = z.object({
|
|
126
|
+
id: z.string(),
|
|
127
|
+
url: z.string().optional()
|
|
128
|
+
});
|
|
129
|
+
const SourceRef = defineComponent({
|
|
130
|
+
name: "SourceRef",
|
|
131
|
+
props: SourceRefSchema,
|
|
132
|
+
description: "Linked source marker. Omit url for an inline reference; include an HTTPS url only in the source register",
|
|
133
|
+
component: ({ props }) => {
|
|
134
|
+
const label = `[${props.id.trim()}]`;
|
|
135
|
+
const anchorId = sourceAnchorId(props.id);
|
|
136
|
+
if (!props.url) {
|
|
137
|
+
return React.createElement("a", {
|
|
138
|
+
className: "assemblyline-source-ref",
|
|
139
|
+
href: `#${anchorId}`,
|
|
140
|
+
"aria-label": `Go to source ${props.id.trim()}`
|
|
141
|
+
}, label);
|
|
142
|
+
}
|
|
143
|
+
const url = safeHttpsUrl(props.url);
|
|
144
|
+
if (!url) {
|
|
145
|
+
return React.createElement("span", { id: anchorId, className: "assemblyline-source-ref assemblyline-source-ref-target" }, label);
|
|
146
|
+
}
|
|
147
|
+
return React.createElement("a", {
|
|
148
|
+
id: anchorId,
|
|
149
|
+
className: "assemblyline-source-ref assemblyline-source-ref-target assemblyline-source-ref-external",
|
|
150
|
+
href: url,
|
|
151
|
+
target: "_blank",
|
|
152
|
+
rel: "noopener noreferrer",
|
|
153
|
+
"aria-label": `Open source ${props.id.trim()} in a new tab`
|
|
154
|
+
}, label);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const CitedTextSchema = z.object({
|
|
158
|
+
text: z.string(),
|
|
159
|
+
sourceIds: z.array(z.string()),
|
|
160
|
+
variant: z.enum(["body", "small"]).optional()
|
|
161
|
+
});
|
|
162
|
+
const CitedText = defineComponent({
|
|
163
|
+
name: "CitedText",
|
|
164
|
+
props: CitedTextSchema,
|
|
165
|
+
description: "Report text followed by source markers that link to the source register",
|
|
166
|
+
component: ({ props }) => React.createElement("p", {
|
|
167
|
+
className: `assemblyline-cited-text assemblyline-cited-text-${props.variant ?? "body"}`
|
|
168
|
+
}, props.text, renderSourceLinks(props.sourceIds))
|
|
169
|
+
});
|
|
170
|
+
function renderSourceLinks(sourceIds) {
|
|
171
|
+
if (!sourceIds?.length)
|
|
172
|
+
return null;
|
|
173
|
+
return React.createElement("span", { className: "assemblyline-source-links" }, sourceIds.map((id) => React.createElement("a", {
|
|
174
|
+
key: id,
|
|
175
|
+
className: "assemblyline-source-ref",
|
|
176
|
+
href: `#${sourceAnchorId(id)}`,
|
|
177
|
+
"aria-label": `Go to source ${id.trim()}`
|
|
178
|
+
}, `[${id.trim()}]`)));
|
|
179
|
+
}
|
|
180
|
+
function sourceAnchorId(id) {
|
|
181
|
+
const normalized = id.trim().replace(/[^a-zA-Z0-9_-]+/gu, "-").replace(/^-+|-+$/gu, "");
|
|
182
|
+
return `source-${normalized || "reference"}`;
|
|
183
|
+
}
|
|
184
|
+
function safeHttpsUrl(value) {
|
|
185
|
+
try {
|
|
186
|
+
const url = new URL(value);
|
|
187
|
+
return url.protocol === "https:" ? url.href : null;
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const components = Object.values(openuiLibrary.components).map((component) => (component.name === "Stack"
|
|
194
|
+
? ResponsiveStack
|
|
195
|
+
: component.name === "HorizontalBarChart"
|
|
196
|
+
? ReportHorizontalBarChart
|
|
197
|
+
: component));
|
|
198
|
+
const cardIndex = components.findIndex((component) => component.name === "Card");
|
|
199
|
+
components.splice(cardIndex + 1, 0, MetricCard, CitedText, SourceRef);
|
|
200
|
+
const componentGroups = openuiLibrary.componentGroups?.map((group) => {
|
|
201
|
+
const base = {
|
|
202
|
+
name: group.name,
|
|
203
|
+
components: group.name === "Content"
|
|
204
|
+
? [...group.components.slice(0, 1), "MetricCard", "CitedText", "SourceRef", ...group.components.slice(1)]
|
|
205
|
+
: [...group.components]
|
|
206
|
+
};
|
|
207
|
+
if (group.name === "Content") {
|
|
208
|
+
return {
|
|
209
|
+
...base,
|
|
210
|
+
notes: [
|
|
211
|
+
...(group.notes ?? []),
|
|
212
|
+
'- Report KPI: MetricCard("Label", "13.6x", "Supporting context", ["1"]) — place peers in equal-width row Stacks.',
|
|
213
|
+
'- Citation: SourceRef("1") links to the source register; SourceRef("1", "https://primary-source.example") creates the register target and external source link.'
|
|
214
|
+
]
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
return group.notes ? { ...base, notes: [...group.notes] } : base;
|
|
218
|
+
});
|
|
219
|
+
export const assemblyLineOpenUiLibrary = createLibrary({
|
|
220
|
+
root: openuiLibrary.root,
|
|
221
|
+
components,
|
|
222
|
+
...(componentGroups ? { componentGroups } : {})
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=report-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-library.js","sourceRoot":"","sources":["../src/report-library.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
/** The standard OpenUI Stack with stable classes for renderer-owned responsive layout. */
|
|
3
|
+
export declare const ResponsiveStack: import("@openuidev/react-lang").DefinedComponent<z.ZodObject<{
|
|
4
|
+
children: z.ZodArray<z.ZodAny>;
|
|
5
|
+
direction: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
row: "row";
|
|
7
|
+
column: "column";
|
|
8
|
+
}>>;
|
|
9
|
+
gap: z.ZodOptional<z.ZodEnum<{
|
|
10
|
+
none: "none";
|
|
11
|
+
xs: "xs";
|
|
12
|
+
s: "s";
|
|
13
|
+
m: "m";
|
|
14
|
+
l: "l";
|
|
15
|
+
xl: "xl";
|
|
16
|
+
"2xl": "2xl";
|
|
17
|
+
}>>;
|
|
18
|
+
align: z.ZodOptional<z.ZodEnum<{
|
|
19
|
+
center: "center";
|
|
20
|
+
stretch: "stretch";
|
|
21
|
+
baseline: "baseline";
|
|
22
|
+
start: "start";
|
|
23
|
+
end: "end";
|
|
24
|
+
}>>;
|
|
25
|
+
justify: z.ZodOptional<z.ZodEnum<{
|
|
26
|
+
center: "center";
|
|
27
|
+
start: "start";
|
|
28
|
+
end: "end";
|
|
29
|
+
between: "between";
|
|
30
|
+
around: "around";
|
|
31
|
+
evenly: "evenly";
|
|
32
|
+
}>>;
|
|
33
|
+
wrap: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
}, z.core.$strip>>;
|
|
35
|
+
//# sourceMappingURL=responsive-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-stack.d.ts","sourceRoot":"","sources":["../src/responsive-stack.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAsC3B,0FAA0F;AAC1F,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0B1B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { defineComponent } from "@openuidev/react-lang";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { z } from "zod/v4";
|
|
4
|
+
const GAP = {
|
|
5
|
+
none: "0",
|
|
6
|
+
xs: "var(--openui-space-xs)",
|
|
7
|
+
s: "var(--openui-space-s)",
|
|
8
|
+
m: "var(--openui-space-m)",
|
|
9
|
+
l: "var(--openui-space-l)",
|
|
10
|
+
xl: "var(--openui-space-xl)",
|
|
11
|
+
"2xl": "var(--openui-space-2xl)"
|
|
12
|
+
};
|
|
13
|
+
const ALIGN = {
|
|
14
|
+
start: "flex-start",
|
|
15
|
+
center: "center",
|
|
16
|
+
end: "flex-end",
|
|
17
|
+
stretch: "stretch",
|
|
18
|
+
baseline: "baseline"
|
|
19
|
+
};
|
|
20
|
+
const JUSTIFY = {
|
|
21
|
+
start: "flex-start",
|
|
22
|
+
center: "center",
|
|
23
|
+
end: "flex-end",
|
|
24
|
+
between: "space-between",
|
|
25
|
+
around: "space-around",
|
|
26
|
+
evenly: "space-evenly"
|
|
27
|
+
};
|
|
28
|
+
const ResponsiveStackSchema = z.object({
|
|
29
|
+
children: z.array(z.any()),
|
|
30
|
+
direction: z.enum(["row", "column"]).optional(),
|
|
31
|
+
gap: z.enum(["none", "xs", "s", "m", "l", "xl", "2xl"]).optional(),
|
|
32
|
+
align: z.enum(["start", "center", "end", "stretch", "baseline"]).optional(),
|
|
33
|
+
justify: z.enum(["start", "center", "end", "between", "around", "evenly"]).optional(),
|
|
34
|
+
wrap: z.boolean().optional()
|
|
35
|
+
});
|
|
36
|
+
/** The standard OpenUI Stack with stable classes for renderer-owned responsive layout. */
|
|
37
|
+
export const ResponsiveStack = defineComponent({
|
|
38
|
+
name: "Stack",
|
|
39
|
+
props: ResponsiveStackSchema,
|
|
40
|
+
description: 'Responsive flex container. direction: "row"|"column" (default "column"). Row stacks wrap on narrow screens. gap: "none"|"xs"|"s"|"m"|"l"|"xl"|"2xl" (default "m"). align: "start"|"center"|"end"|"stretch"|"baseline". justify: "start"|"center"|"end"|"between"|"around"|"evenly".',
|
|
41
|
+
component: ({ props, renderNode }) => {
|
|
42
|
+
const direction = props.direction ?? "column";
|
|
43
|
+
const gap = props.gap ?? "m";
|
|
44
|
+
const justify = props.wrap && props.justify === "between" ? "start" : props.justify;
|
|
45
|
+
return React.createElement("div", {
|
|
46
|
+
className: `assemblyline-stack assemblyline-stack-${direction}`,
|
|
47
|
+
style: {
|
|
48
|
+
display: "flex",
|
|
49
|
+
flexDirection: direction,
|
|
50
|
+
gap: GAP[gap],
|
|
51
|
+
alignItems: props.align ? ALIGN[props.align] : undefined,
|
|
52
|
+
justifyContent: justify ? JUSTIFY[justify] : undefined,
|
|
53
|
+
flexWrap: props.wrap ? "wrap" : undefined
|
|
54
|
+
}
|
|
55
|
+
}, renderNode(props.children));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=responsive-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsive-stack.js","sourceRoot":"","sources":["../src/responsive-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-pack.d.ts","sourceRoot":"","sources":["../src/standard-pack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,eAAO,MAAM,sBAAsB,mBAAmE,CAAC;AAEvG,eAAO,MAAM,2BAA2B,EAAE,mBAKxC,CAAC"}
|