@wizzlethorpe/vaults 0.4.0 → 0.5.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/build.js +229 -43
- package/dist/build.js.map +1 -1
- package/dist/favicon.js +8 -31
- package/dist/favicon.js.map +1 -1
- package/dist/render/bases.js +64 -5
- package/dist/render/bases.js.map +1 -1
- package/dist/render/callouts.js +4 -1
- package/dist/render/callouts.js.map +1 -1
- package/dist/render/cover.js +41 -0
- package/dist/render/cover.js.map +1 -0
- package/dist/render/layout.js +190 -31
- package/dist/render/layout.js.map +1 -1
- package/dist/render/pipeline.js +11 -5
- package/dist/render/pipeline.js.map +1 -1
- package/dist/render/styles.js +277 -41
- package/dist/render/styles.js.map +1 -1
- package/dist/settings.js +15 -0
- package/dist/settings.js.map +1 -1
- package/package.json +1 -1
package/dist/render/layout.js
CHANGED
|
@@ -27,6 +27,7 @@ export function renderLayout(input) {
|
|
|
27
27
|
<link rel="icon" href="/favicon.ico">
|
|
28
28
|
<link rel="stylesheet" href="/styles.css">
|
|
29
29
|
<link rel="stylesheet" href="/user.css">
|
|
30
|
+
${renderSocialMeta(input)}
|
|
30
31
|
</head>
|
|
31
32
|
<body${input.centerImages ? ` class="center-images"` : ""}${input.defaultImageWidth ? ` style="--default-img-width: ${attr(input.defaultImageWidth)}"` : ""}>
|
|
32
33
|
<div class="app-grid">
|
|
@@ -41,10 +42,10 @@ export function renderLayout(input) {
|
|
|
41
42
|
</aside>
|
|
42
43
|
<main>
|
|
43
44
|
<article class="markdown-preview-view markdown-rendered">
|
|
44
|
-
${breadcrumbs}
|
|
45
|
+
${renderPageHeader(breadcrumbs, input.frontmatterYaml)}
|
|
45
46
|
${input.inlineTitle ? `<h1>${esc(input.title)}</h1>` : ""}
|
|
46
|
-
${renderMeta(input.mtime, input.birthtime)}
|
|
47
47
|
${input.bodyHtml}
|
|
48
|
+
${renderMeta(input.mtime, input.birthtime)}
|
|
48
49
|
</article>
|
|
49
50
|
</main>
|
|
50
51
|
<aside class="rightbar">
|
|
@@ -62,6 +63,7 @@ ${SEARCH_SCRIPT}
|
|
|
62
63
|
${LIGHTBOX_SCRIPT}
|
|
63
64
|
${AUTH_SCRIPT}
|
|
64
65
|
${BASES_SCRIPT}
|
|
66
|
+
${FRONTMATTER_SCRIPT}
|
|
65
67
|
</body>
|
|
66
68
|
</html>`;
|
|
67
69
|
}
|
|
@@ -74,6 +76,69 @@ function renderBacklinks(backlinks) {
|
|
|
74
76
|
}).join("");
|
|
75
77
|
return `<section class="backlinks"><h4>Backlinks</h4><ul>${items}</ul></section>`;
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Top-of-article strip: breadcrumbs on the left, frontmatter affordance on
|
|
81
|
+
* the right. Updated/created dates live at the bottom of the page now —
|
|
82
|
+
* they're handy when you want them but don't deserve top-of-page real
|
|
83
|
+
* estate (especially on mobile). The strip collapses entirely when neither
|
|
84
|
+
* side has content (404 page).
|
|
85
|
+
*/
|
|
86
|
+
function renderPageHeader(breadcrumbsHtml, frontmatterYaml) {
|
|
87
|
+
const frontmatter = renderFrontmatterAffordance(frontmatterYaml);
|
|
88
|
+
if (!breadcrumbsHtml && !frontmatter)
|
|
89
|
+
return "";
|
|
90
|
+
const rightGroup = frontmatter
|
|
91
|
+
? `<div class="page-header-right">${frontmatter}</div>`
|
|
92
|
+
: "";
|
|
93
|
+
return `<div class="page-header">${breadcrumbsHtml}${rightGroup}</div>`;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Small "view frontmatter" button + a hidden <dialog> containing the raw
|
|
97
|
+
* YAML in a <pre><code>. Useful for grabbing UUIDs, copying overrides, or
|
|
98
|
+
* sharing a page's metadata without leaving the wiki. The dialog is inert
|
|
99
|
+
* until the toggle button (or any element with `data-frontmatter-open`) is
|
|
100
|
+
* clicked — see FRONTMATTER_SCRIPT for wiring.
|
|
101
|
+
*
|
|
102
|
+
* The button label is hidden via CSS on narrow viewports so the affordance
|
|
103
|
+
* stays out of the way on mobile.
|
|
104
|
+
*/
|
|
105
|
+
function renderFrontmatterAffordance(yaml) {
|
|
106
|
+
if (!yaml)
|
|
107
|
+
return "";
|
|
108
|
+
return `<button type="button" class="frontmatter-toggle" data-frontmatter-open
|
|
109
|
+
title="View page frontmatter" aria-label="View page frontmatter"
|
|
110
|
+
aria-haspopup="dialog">
|
|
111
|
+
<span class="frontmatter-toggle-glyph">{}</span>
|
|
112
|
+
<span class="frontmatter-toggle-label">frontmatter</span>
|
|
113
|
+
</button>
|
|
114
|
+
<dialog class="frontmatter-dialog">
|
|
115
|
+
<div class="frontmatter-header">
|
|
116
|
+
<span class="frontmatter-title">frontmatter</span>
|
|
117
|
+
<button type="button" class="frontmatter-copy" data-frontmatter-copy>
|
|
118
|
+
<span data-frontmatter-copy-label>Copy</span>
|
|
119
|
+
</button>
|
|
120
|
+
<button type="button" class="frontmatter-close" data-frontmatter-close
|
|
121
|
+
aria-label="Close">×</button>
|
|
122
|
+
</div>
|
|
123
|
+
<pre><code class="frontmatter-yaml">${esc(yaml)}</code></pre>
|
|
124
|
+
</dialog>`;
|
|
125
|
+
}
|
|
126
|
+
function renderSocialMeta(input) {
|
|
127
|
+
const tags = [];
|
|
128
|
+
const fullTitle = `${input.title} | ${input.vaultName}`;
|
|
129
|
+
tags.push(`<meta property="og:title" content="${attr(fullTitle)}">`);
|
|
130
|
+
tags.push(`<meta property="og:type" content="article">`);
|
|
131
|
+
tags.push(`<meta property="og:site_name" content="${attr(input.vaultName)}">`);
|
|
132
|
+
if (input.coverImage) {
|
|
133
|
+
tags.push(`<meta property="og:image" content="${attr(input.coverImage)}">`);
|
|
134
|
+
tags.push(`<meta name="twitter:card" content="summary_large_image">`);
|
|
135
|
+
tags.push(`<meta name="twitter:image" content="${attr(input.coverImage)}">`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
tags.push(`<meta name="twitter:card" content="summary">`);
|
|
139
|
+
}
|
|
140
|
+
return tags.join("\n");
|
|
141
|
+
}
|
|
77
142
|
function renderMeta(mtime, birthtime) {
|
|
78
143
|
if (!mtime && !birthtime)
|
|
79
144
|
return "";
|
|
@@ -140,7 +205,7 @@ function renderSitemap(pages, currentPath) {
|
|
|
140
205
|
// <details> wrapper is the disclosure widget on mobile; CSS forces it
|
|
141
206
|
// visible on desktop. EXPLORER_INIT_SCRIPT opens it after load on
|
|
142
207
|
// wide viewports so the [open] state matches what the user sees.
|
|
143
|
-
return `<nav><details class="explorer"><summary>Explorer</summary><ul class="sitemap-list">${renderNode(root, "", currentPath)}</ul></details></nav>`;
|
|
208
|
+
return `<nav><details class="explorer"><summary class="toc-summary">Explorer</summary><ul class="sitemap-list">${renderNode(root, "", currentPath)}</ul></details></nav>`;
|
|
144
209
|
}
|
|
145
210
|
function renderNode(node, parentPath, currentPath) {
|
|
146
211
|
let html = "";
|
|
@@ -186,7 +251,7 @@ function attr(s) {
|
|
|
186
251
|
const EXPLORER_INIT_SCRIPT = `<script>
|
|
187
252
|
(function () {
|
|
188
253
|
if (!window.matchMedia('(min-width: 1101px)').matches) return;
|
|
189
|
-
const explorer = document.querySelector('.sidebar > details.explorer');
|
|
254
|
+
const explorer = document.querySelector('.sidebar > nav > details.explorer');
|
|
190
255
|
if (explorer) explorer.open = true;
|
|
191
256
|
})();
|
|
192
257
|
</script>`;
|
|
@@ -305,11 +370,15 @@ const AUTH_SCRIPT = `<script>
|
|
|
305
370
|
const role = readCookie('vault_role_display');
|
|
306
371
|
const next = encodeURIComponent(location.pathname + location.search + location.hash);
|
|
307
372
|
if (role) {
|
|
373
|
+
box.classList.remove('auth-signed-out');
|
|
374
|
+
box.classList.add('auth-signed-in');
|
|
308
375
|
box.innerHTML =
|
|
309
376
|
'<div class="auth-status">Signed in as <strong>' + esc(role) + '</strong></div>' +
|
|
310
377
|
'<a class="auth-action" href="/logout?next=' + next + '">Sign out</a>';
|
|
311
378
|
} else {
|
|
312
|
-
box.
|
|
379
|
+
box.classList.remove('auth-signed-in');
|
|
380
|
+
box.classList.add('auth-signed-out');
|
|
381
|
+
box.innerHTML = '<a class="auth-action auth-action-primary" href="/login.html?next=' + next + '">Sign in</a>';
|
|
313
382
|
}
|
|
314
383
|
function readCookie(name) {
|
|
315
384
|
for (const part of document.cookie.split(/;\\s*/)) {
|
|
@@ -432,46 +501,87 @@ const SEARCH_SCRIPT = `<script>
|
|
|
432
501
|
</script>`;
|
|
433
502
|
const BASES_SCRIPT = `<script>
|
|
434
503
|
(function () {
|
|
435
|
-
//
|
|
436
|
-
//
|
|
437
|
-
//
|
|
438
|
-
|
|
504
|
+
// Multi-view tabs: clicking a tab swaps which panel is visible. ARIA
|
|
505
|
+
// attributes update so screen readers track state; the active class
|
|
506
|
+
// styles the current tab. Each .bases-tabbed acts as its own tab group.
|
|
507
|
+
for (const tabbed of document.querySelectorAll('.bases-tabbed')) {
|
|
508
|
+
const tabs = [...tabbed.querySelectorAll('.bases-tab')];
|
|
509
|
+
const panels = [...tabbed.querySelectorAll('.bases-tab-panel')];
|
|
510
|
+
const activate = (idx) => {
|
|
511
|
+
for (let i = 0; i < tabs.length; i++) {
|
|
512
|
+
const isActive = i === idx;
|
|
513
|
+
tabs[i].classList.toggle('bases-tab-active', isActive);
|
|
514
|
+
tabs[i].setAttribute('aria-selected', isActive ? 'true' : 'false');
|
|
515
|
+
tabs[i].setAttribute('tabindex', isActive ? '0' : '-1');
|
|
516
|
+
if (isActive) panels[i].removeAttribute('hidden');
|
|
517
|
+
else panels[i].setAttribute('hidden', '');
|
|
518
|
+
}
|
|
519
|
+
};
|
|
520
|
+
tabs.forEach((tab, i) => {
|
|
521
|
+
tab.addEventListener('click', () => activate(i));
|
|
522
|
+
tab.addEventListener('keydown', (e) => {
|
|
523
|
+
if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {
|
|
524
|
+
e.preventDefault();
|
|
525
|
+
const dir = e.key === 'ArrowRight' ? 1 : -1;
|
|
526
|
+
const next = (i + dir + tabs.length) % tabs.length;
|
|
527
|
+
activate(next);
|
|
528
|
+
tabs[next].focus();
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Wire each .bases-block on the page. Three view shapes share the same
|
|
535
|
+
// .bases-filter input contract; the script picks the right item
|
|
536
|
+
// selector per block. Sort is table-only (cards/list have no header
|
|
537
|
+
// columns to click). The data-raw attribute on table cells is the
|
|
538
|
+
// canonical sort key so we don't re-derive types from text.
|
|
539
|
+
const VIEWS = [
|
|
540
|
+
{ containerSel: 'tbody', itemSel: 'tr', noun: 'row' },
|
|
541
|
+
{ containerSel: '.bases-cards', itemSel: '.bases-card', noun: 'card' },
|
|
542
|
+
{ containerSel: '.bases-list', itemSel: 'li', noun: 'item' },
|
|
543
|
+
];
|
|
544
|
+
|
|
439
545
|
for (const block of document.querySelectorAll('.bases-block')) {
|
|
440
|
-
const
|
|
441
|
-
if (!
|
|
442
|
-
const
|
|
546
|
+
const view = VIEWS.find((v) => block.querySelector(v.containerSel));
|
|
547
|
+
if (!view) continue;
|
|
548
|
+
const container = block.querySelector(view.containerSel);
|
|
549
|
+
const allItems = [...container.querySelectorAll(':scope > ' + view.itemSel)];
|
|
443
550
|
const filterInput = block.querySelector('.bases-filter');
|
|
444
551
|
const counter = block.querySelector('.bases-count');
|
|
445
552
|
|
|
553
|
+
const applyFilter = () => {
|
|
554
|
+
const q = filterInput ? filterInput.value.trim().toLowerCase() : '';
|
|
555
|
+
let visible = 0;
|
|
556
|
+
for (const item of allItems) {
|
|
557
|
+
const match = !q || (item.textContent || '').toLowerCase().includes(q);
|
|
558
|
+
if (match) { item.removeAttribute('hidden'); visible++; }
|
|
559
|
+
else item.setAttribute('hidden', '');
|
|
560
|
+
}
|
|
561
|
+
if (counter) {
|
|
562
|
+
const total = counter.dataset.total;
|
|
563
|
+
counter.textContent = q
|
|
564
|
+
? visible + ' of ' + total + ' ' + view.noun + (total === '1' ? '' : 's')
|
|
565
|
+
: total + ' ' + view.noun + (total === '1' ? '' : 's');
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
if (filterInput) filterInput.addEventListener('input', applyFilter);
|
|
569
|
+
|
|
570
|
+
// Sort is table-only. Other views use whatever order the build emitted.
|
|
571
|
+
if (view.containerSel !== 'tbody') continue;
|
|
446
572
|
let sortCol = -1;
|
|
447
573
|
let sortDir = 1; // 1 asc, -1 desc
|
|
448
574
|
|
|
449
575
|
const applySort = () => {
|
|
450
576
|
if (sortCol < 0) return;
|
|
451
|
-
const sorted = [...
|
|
577
|
+
const sorted = [...allItems].sort((a, b) => {
|
|
452
578
|
const av = a.children[sortCol] ? a.children[sortCol].dataset.raw || a.children[sortCol].textContent : '';
|
|
453
579
|
const bv = b.children[sortCol] ? b.children[sortCol].dataset.raw || b.children[sortCol].textContent : '';
|
|
454
580
|
const an = parseFloat(av), bn = parseFloat(bv);
|
|
455
581
|
if (!isNaN(an) && !isNaN(bn)) return (an - bn) * sortDir;
|
|
456
582
|
return av.localeCompare(bv, undefined, { numeric: true, sensitivity: 'base' }) * sortDir;
|
|
457
583
|
});
|
|
458
|
-
sorted.forEach((tr) =>
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
const applyFilter = () => {
|
|
462
|
-
const q = filterInput ? filterInput.value.trim().toLowerCase() : '';
|
|
463
|
-
let visible = 0;
|
|
464
|
-
for (const tr of allRows) {
|
|
465
|
-
const match = !q || tr.textContent.toLowerCase().includes(q);
|
|
466
|
-
if (match) { tr.removeAttribute('hidden'); visible++; }
|
|
467
|
-
else tr.setAttribute('hidden', '');
|
|
468
|
-
}
|
|
469
|
-
if (counter) {
|
|
470
|
-
const total = counter.dataset.total;
|
|
471
|
-
counter.textContent = q
|
|
472
|
-
? visible + ' of ' + total + ' rows'
|
|
473
|
-
: total + ' ' + (total === '1' ? 'row' : 'rows');
|
|
474
|
-
}
|
|
584
|
+
sorted.forEach((tr) => container.appendChild(tr));
|
|
475
585
|
};
|
|
476
586
|
|
|
477
587
|
block.querySelectorAll('thead th').forEach((th, i) => {
|
|
@@ -484,8 +594,57 @@ const BASES_SCRIPT = `<script>
|
|
|
484
594
|
applySort();
|
|
485
595
|
});
|
|
486
596
|
});
|
|
597
|
+
}
|
|
598
|
+
})();
|
|
599
|
+
</script>`;
|
|
600
|
+
// Frontmatter dialog: opens on click of the toggle button, copies the raw
|
|
601
|
+
// YAML to clipboard on Copy, closes on X / ESC / backdrop click. Native
|
|
602
|
+
// <dialog> handles ESC; we add the backdrop click manually so the user can
|
|
603
|
+
// dismiss by clicking outside the panel as well.
|
|
604
|
+
const FRONTMATTER_SCRIPT = `<script>
|
|
605
|
+
(function() {
|
|
606
|
+
const toggle = document.querySelector('[data-frontmatter-open]');
|
|
607
|
+
const dialog = document.querySelector('.frontmatter-dialog');
|
|
608
|
+
if (!toggle || !dialog) return;
|
|
487
609
|
|
|
488
|
-
|
|
610
|
+
toggle.addEventListener('click', () => {
|
|
611
|
+
if (typeof dialog.showModal === 'function') dialog.showModal();
|
|
612
|
+
else dialog.setAttribute('open', '');
|
|
613
|
+
});
|
|
614
|
+
|
|
615
|
+
dialog.addEventListener('click', (e) => {
|
|
616
|
+
// Backdrop click: native <dialog> reports the dialog itself as the
|
|
617
|
+
// event target when you click the backdrop (vs. any descendant element
|
|
618
|
+
// when clicking inside the panel).
|
|
619
|
+
if (e.target === dialog) dialog.close();
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
const closeBtn = dialog.querySelector('[data-frontmatter-close]');
|
|
623
|
+
if (closeBtn) closeBtn.addEventListener('click', () => dialog.close());
|
|
624
|
+
|
|
625
|
+
const copyBtn = dialog.querySelector('[data-frontmatter-copy]');
|
|
626
|
+
const copyLabel = dialog.querySelector('[data-frontmatter-copy-label]');
|
|
627
|
+
const yamlEl = dialog.querySelector('.frontmatter-yaml');
|
|
628
|
+
if (copyBtn && yamlEl) {
|
|
629
|
+
copyBtn.addEventListener('click', async () => {
|
|
630
|
+
const text = yamlEl.textContent || '';
|
|
631
|
+
try {
|
|
632
|
+
await navigator.clipboard.writeText(text);
|
|
633
|
+
if (copyLabel) {
|
|
634
|
+
const orig = copyLabel.textContent;
|
|
635
|
+
copyLabel.textContent = 'Copied!';
|
|
636
|
+
setTimeout(() => { copyLabel.textContent = orig; }, 1200);
|
|
637
|
+
}
|
|
638
|
+
} catch {
|
|
639
|
+
// Clipboard API blocked (insecure context, etc.); fall back to
|
|
640
|
+
// selecting the text so the user can ⌘/Ctrl+C manually.
|
|
641
|
+
const range = document.createRange();
|
|
642
|
+
range.selectNodeContents(yamlEl);
|
|
643
|
+
const sel = window.getSelection();
|
|
644
|
+
sel.removeAllRanges();
|
|
645
|
+
sel.addRange(range);
|
|
646
|
+
}
|
|
647
|
+
});
|
|
489
648
|
}
|
|
490
649
|
})();
|
|
491
650
|
</script>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/render/layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/render/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/render/pipeline.js
CHANGED
|
@@ -14,21 +14,27 @@ import { basesPlugin } from "./bases.js";
|
|
|
14
14
|
const sanitizeSchema = {
|
|
15
15
|
...defaultSchema,
|
|
16
16
|
clobberPrefix: "",
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
|
|
17
|
+
// Bases emit interactive HTML beyond what the default schema allows:
|
|
18
|
+
// <input> (filter), <button> (tab buttons + dialog actions). Add them
|
|
19
|
+
// and the attributes they need to function.
|
|
20
|
+
tagNames: [...(defaultSchema.tagNames ?? []), "input", "button"],
|
|
20
21
|
attributes: {
|
|
21
22
|
...defaultSchema.attributes,
|
|
22
|
-
|
|
23
|
+
// role + aria-selected/haspopup/label ride on tabs, dialogs, etc.
|
|
24
|
+
// `hidden` is essential — Bases tab panels and card-filter rows toggle
|
|
25
|
+
// it from JS to show/hide elements. Without it on the allowlist the
|
|
26
|
+
// initial render shows everything because the sanitizer strips it.
|
|
27
|
+
"*": [...(defaultSchema.attributes?.["*"] ?? []), "className", "role", "ariaSelected", "ariaLabel", "ariaHaspopup", "tabindex", "hidden"],
|
|
23
28
|
img: ["src", "alt", "width", "height", "loading"],
|
|
24
29
|
a: ["href", "title", "className", "id"],
|
|
25
|
-
div: ["className", "data*"],
|
|
30
|
+
div: ["className", "data*", "role"],
|
|
26
31
|
span: ["className", "data*"],
|
|
27
32
|
table: ["className"],
|
|
28
33
|
th: ["className", "data*", "tabindex"],
|
|
29
34
|
td: ["className", "data*"],
|
|
30
35
|
tr: ["className", "data*"],
|
|
31
36
|
input: ["type", "placeholder", "className", "ariaLabel"],
|
|
37
|
+
button: ["type", "className", "data*", "role", "ariaSelected", "ariaLabel", "ariaHaspopup", "tabindex", "title"],
|
|
32
38
|
},
|
|
33
39
|
// The default schema forces <input> to type=checkbox and disabled=true
|
|
34
40
|
// to safely render GFM task lists. We don't render task lists here, and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/render/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,cAAc,EAAE,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,cAAc,GAAG;IACrB,GAAG,aAAa;IAChB,aAAa,EAAE,EAAE;IACjB,sEAAsE;IACtE,
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/render/pipeline.ts"],"names":[],"mappings":"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"}
|