@markdstage/markdstage 0.1.1
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/README.md +90 -0
- package/bin/markdstage.mjs +12 -0
- package/package.json +45 -0
- package/shared/README.md +1014 -0
- package/shared/THIRD-PARTY-NOTICES.md +19 -0
- package/shared/deck-state.mjs +105 -0
- package/shared/docs/custom-theme-authoring.md +208 -0
- package/shared/markdown-deck.mjs +220 -0
- package/shared/markdstage-guide.mjs +276 -0
- package/shared/presenter-window.mjs +17 -0
- package/shared/renderer/architecture-document.mjs +596 -0
- package/shared/renderer/architecture-edit.mjs +298 -0
- package/shared/renderer/architecture-editor.mjs +449 -0
- package/shared/renderer/architecture.mjs +4033 -0
- package/shared/renderer/import-path.mjs +11 -0
- package/shared/renderer/index.html +106 -0
- package/shared/renderer/renderer.js +2082 -0
- package/shared/renderer/slides.css +614 -0
- package/shared/renderer/speaker-notes.mjs +106 -0
- package/shared/renderer/theme.mjs +205 -0
- package/shared/runtime/browser.mjs +539 -0
- package/shared/runtime/custom-theme.mjs +135 -0
- package/shared/runtime/deck-session.mjs +188 -0
- package/shared/runtime/errors.mjs +17 -0
- package/shared/runtime/output-paths.mjs +159 -0
- package/shared/runtime/output.mjs +385 -0
- package/shared/runtime/presentation-server.mjs +505 -0
- package/shared/runtime/static-files.mjs +70 -0
- package/shared/schema/README.md +228 -0
- package/shared/schema/architecture-v1.schema.json +664 -0
- package/shared/schema/examples/web-app.architecture.json +119 -0
- package/shared/schema/theme-metadata-v1.schema.json +75 -0
- package/shared/schema/theme-v1.json +84 -0
- package/shared/scripts/architecture-assets.mjs +226 -0
- package/shared/scripts/asset-paths.mjs +92 -0
- package/shared/scripts/atomic-markdown-replace.mjs +46 -0
- package/shared/scripts/markdown-blocks.mjs +182 -0
- package/shared/scripts/markdown-files.mjs +63 -0
- package/shared/scripts/markdown-save-coordinator.mjs +18 -0
- package/shared/scripts/markdown-watcher.mjs +80 -0
- package/shared/scripts/theme-paths.mjs +108 -0
- package/shared/scripts/vendor-assets.mjs +132 -0
- package/shared/scripts/workspace-root.mjs +32 -0
- package/shared/vendor/highlight.LICENSE +29 -0
- package/shared/vendor/highlight.min.js +1244 -0
- package/shared/vendor/marked.min.js +6 -0
- package/shared/vendor/mermaid.min.js.part-0001 +268 -0
- package/shared/vendor/mermaid.min.js.part-0002 +304 -0
- package/shared/vendor/mermaid.min.js.part-0003 +324 -0
- package/shared/vendor/mermaid.min.js.part-0004 +374 -0
- package/shared/vendor/mermaid.min.js.part-0005 +564 -0
- package/shared/vendor/mermaid.min.js.part-0006 +1308 -0
- package/shared/vendor/mermaid.min.js.part-0007 +269 -0
- package/shared/vendor/purify.min.js +3 -0
- package/shared/vendor/vendor-assets.lock.json +60 -0
- package/src/cli.mjs +347 -0
- package/src/commands/capture.mjs +23 -0
- package/src/commands/export.mjs +18 -0
- package/src/commands/guide.mjs +23 -0
- package/src/commands/inspect.mjs +35 -0
- package/src/commands/present.mjs +91 -0
- package/src/commands/skill.mjs +114 -0
- package/src/commands/validate.mjs +79 -0
- package/src/deck.mjs +63 -0
- package/src/exit.mjs +58 -0
- package/src/runtime.mjs +77 -0
- package/src/skills.mjs +155 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function splitImportPath(path) {
|
|
2
|
+
const value = String(path || "");
|
|
3
|
+
const separator = Math.max(value.lastIndexOf("/"), value.lastIndexOf("\\"));
|
|
4
|
+
if (separator < 0) {
|
|
5
|
+
return { filename: value, parentPath: "" };
|
|
6
|
+
}
|
|
7
|
+
return {
|
|
8
|
+
filename: value.slice(separator + 1),
|
|
9
|
+
parentPath: value.slice(0, separator),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<!--
|
|
5
|
+
THESIS: Markdown moves directly into a live presentation; the interface refuses generic slide-software chrome.
|
|
6
|
+
OWN-WORLD: Midnight Ink surfaces, Spotlight Amber action states, crisp Paper text, and a single illuminated # mark.
|
|
7
|
+
STORY: Open Markdown, see it staged instantly, then present or export without changing source formats.
|
|
8
|
+
FIRST VIEWPORT: A left-aligned promise faces an oversized # inside an angled spotlight; the Markdown picker is the only primary action.
|
|
9
|
+
FORM: A focused backstage control surface that recedes once the deck begins.
|
|
10
|
+
-->
|
|
11
|
+
<meta charset="utf-8">
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
13
|
+
<meta name="theme-color" content="#0B1020">
|
|
14
|
+
<title>MarkdStage</title>
|
|
15
|
+
<link rel="stylesheet" href="./renderer/slides.css">
|
|
16
|
+
</head>
|
|
17
|
+
<body class="mermaid-loading" tabindex="-1">
|
|
18
|
+
<div id="stage"></div>
|
|
19
|
+
|
|
20
|
+
<!-- In-canvas navigation controls (persist across slide re-renders). -->
|
|
21
|
+
<nav id="nav" class="nav" hidden aria-label="Slide controls">
|
|
22
|
+
<button id="navPrev" class="nav-btn" type="button" title="Previous (←)" aria-label="Previous slide">◀</button>
|
|
23
|
+
<span id="navCounter" class="nav-counter" aria-live="polite"></span>
|
|
24
|
+
<button id="navNext" class="nav-btn" type="button" title="Next (→)" aria-label="Next slide">▶</button>
|
|
25
|
+
<button id="navEdit" class="nav-btn" type="button" title="Shape editing mode" aria-label="Shape editing mode">✎</button>
|
|
26
|
+
<button id="navPresent" class="nav-btn" type="button" title="Open in external window (F11 for full screen)" aria-label="Open in external window">⛶</button>
|
|
27
|
+
<button id="navPresenterView" class="nav-btn" type="button" title="Presenter view" aria-label="Presenter view">👤</button>
|
|
28
|
+
<button id="navFixedPreview" class="nav-btn nav-fixed-preview" type="button" title="Preview PDF layout at 16:9" aria-label="Preview PDF layout at 16:9" aria-pressed="false">16:9</button>
|
|
29
|
+
<button id="navExport" class="nav-btn" type="button" title="Save as PDF" aria-label="Save as PDF">🖶</button>
|
|
30
|
+
<button id="navImport" class="nav-btn" type="button" title="Load Markdown (I)" aria-label="Load Markdown">📁</button>
|
|
31
|
+
<button id="navSourceMode" class="nav-btn" type="button" title="Automatically refresh when Markdown is saved" aria-label="Automatically refresh when Markdown is saved" hidden>↻</button>
|
|
32
|
+
<button id="navList" class="nav-btn" type="button" title="Slide list (O)" aria-label="Slide list">☰</button>
|
|
33
|
+
<span id="presentStatus" class="sr-only" aria-live="polite"></span>
|
|
34
|
+
<span id="exportStatus" class="sr-only" aria-live="polite"></span>
|
|
35
|
+
<span id="sourceStatus" class="sr-only" aria-live="polite"></span>
|
|
36
|
+
</nav>
|
|
37
|
+
<div id="layoutWarning" class="layout-warning" role="status" aria-live="polite" hidden></div>
|
|
38
|
+
|
|
39
|
+
<section id="presenterView" class="presenter-view" hidden aria-label="Presenter view">
|
|
40
|
+
<header class="presenter-view-head">
|
|
41
|
+
<h1>Presenter view</h1>
|
|
42
|
+
<button id="presenterReturnButton" class="presenter-button" type="button">Return to slide view</button>
|
|
43
|
+
</header>
|
|
44
|
+
<div class="presenter-previews">
|
|
45
|
+
<section class="presenter-preview presenter-preview-current" aria-labelledby="presenterCurrentLabel">
|
|
46
|
+
<h2 id="presenterCurrentLabel">Current slide</h2>
|
|
47
|
+
<iframe id="presenterCurrent" class="presenter-frame" title="Current slide"></iframe>
|
|
48
|
+
</section>
|
|
49
|
+
<div class="presenter-sidebar">
|
|
50
|
+
<section class="presenter-preview" aria-labelledby="presenterNextLabel">
|
|
51
|
+
<h2 id="presenterNextLabel">Next slide</h2>
|
|
52
|
+
<iframe id="presenterNext" class="presenter-frame" title="Next slide"></iframe>
|
|
53
|
+
<p id="presenterNextEmpty" class="presenter-next-empty" hidden>There is no next slide</p>
|
|
54
|
+
</section>
|
|
55
|
+
<section class="presenter-notes" aria-labelledby="presenterNotesLabel">
|
|
56
|
+
<h2 id="presenterNotesLabel">Speaker notes</h2>
|
|
57
|
+
<div id="presenterNotes" class="presenter-notes-body" tabindex="0" aria-live="polite"></div>
|
|
58
|
+
<p id="presenterNotesEmpty" class="presenter-notes-empty">No speaker notes</p>
|
|
59
|
+
</section>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
<footer class="presenter-controls" aria-label="Presenter view controls">
|
|
63
|
+
<button id="presenterPrevButton" class="presenter-button" type="button">Previous</button>
|
|
64
|
+
<span id="presenterCounter" class="presenter-counter" aria-live="polite"></span>
|
|
65
|
+
<button id="presenterNextButton" class="presenter-button" type="button">Next</button>
|
|
66
|
+
<button id="presenterListButton" class="presenter-button" type="button">Slide list</button>
|
|
67
|
+
<button id="presenterToggleButton" class="presenter-button presenter-toggle" type="button">Start presentation</button>
|
|
68
|
+
</footer>
|
|
69
|
+
</section>
|
|
70
|
+
|
|
71
|
+
<!-- Slide-list overview overlay, toggled from the control bar / keyboard. -->
|
|
72
|
+
<div id="overview" class="overview" hidden>
|
|
73
|
+
<div class="overview-panel" role="dialog" aria-modal="true" aria-label="Slide list">
|
|
74
|
+
<div class="overview-head">
|
|
75
|
+
<span>Slide list</span>
|
|
76
|
+
<button id="overviewClose" class="nav-btn" type="button" title="Close (Esc)" aria-label="Close">✕</button>
|
|
77
|
+
</div>
|
|
78
|
+
<ol id="overviewList" class="overview-list"></ol>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<!-- Markdown import overlay: pick a *.md from the workspace and show it. -->
|
|
83
|
+
<div id="importPicker" class="overview" hidden>
|
|
84
|
+
<div class="overview-panel" role="dialog" aria-modal="true" aria-label="Load Markdown">
|
|
85
|
+
<div class="overview-head">
|
|
86
|
+
<span>Load Markdown</span>
|
|
87
|
+
<button id="importClose" class="nav-btn" type="button" title="Close (Esc)" aria-label="Close">✕</button>
|
|
88
|
+
</div>
|
|
89
|
+
<fieldset class="import-mode">
|
|
90
|
+
<legend>Refresh display on save</legend>
|
|
91
|
+
<label><input id="importModeSnapshot" type="radio" name="importMode" value="snapshot" checked> Keep loaded snapshot</label>
|
|
92
|
+
<label><input type="radio" name="importMode" value="live"> Refresh automatically on save</label>
|
|
93
|
+
</fieldset>
|
|
94
|
+
<input id="importFilter" class="import-filter" type="search" placeholder="Filter by file name" aria-label="Filter by file name" autocomplete="off">
|
|
95
|
+
<p id="importMessage" class="import-message" role="status" aria-live="polite"></p>
|
|
96
|
+
<ol id="importList" class="overview-list"></ol>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<script src="./vendor/marked.min.js"></script>
|
|
101
|
+
<script src="./vendor/purify.min.js"></script>
|
|
102
|
+
<script src="./vendor/highlight.min.js"></script>
|
|
103
|
+
<script src="./vendor/mermaid.min.js"></script>
|
|
104
|
+
<script type="module" src="./renderer/renderer.js"></script>
|
|
105
|
+
</body>
|
|
106
|
+
</html>
|