@sharpee/devkit 1.0.4 → 1.0.6
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/package.json +2 -2
- package/standalone/build-browser.d.ts +6 -4
- package/standalone/build-browser.d.ts.map +1 -1
- package/standalone/build-browser.js +96 -67
- package/standalone/build-browser.js.map +1 -1
- package/standalone/init-browser.d.ts +7 -5
- package/standalone/init-browser.d.ts.map +1 -1
- package/standalone/init-browser.js +81 -76
- package/standalone/init-browser.js.map +1 -1
- package/standalone/init.d.ts +11 -0
- package/standalone/init.d.ts.map +1 -1
- package/standalone/init.js +1 -0
- package/standalone/init.js.map +1 -1
- package/templates/browser/base.css +489 -0
- package/templates/browser/browser-entry.ts.template +79 -0
- package/templates/browser/decorations.css +152 -0
- package/templates/browser/index.html +119 -0
- package/templates/browser/styles.css +1988 -0
- package/templates/browser/themes/system-6/fonts/ChicagoFLF.woff2 +0 -0
- package/templates/browser/themes/system-6/fonts/FindersKeepers.woff2 +0 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* decorations.css — platform prose decoration vocabulary.
|
|
3
|
+
*
|
|
4
|
+
* Per ADR-174, every in-prose decoration on the wire is an
|
|
5
|
+
* IDecoration { className, content }. Platform-vocabulary names are
|
|
6
|
+
* resolved at parse time to `sharpee-{name}`; author names pass
|
|
7
|
+
* through verbatim. This file ships the default style for every
|
|
8
|
+
* platform name. Stories override by re-declaring `.sharpee-*` rules
|
|
9
|
+
* in their own theme CSS, or by attaching their own author classes
|
|
10
|
+
* (which the platform never styles).
|
|
11
|
+
*
|
|
12
|
+
* Loaded after base.css and before styles.css (theme), so theme rules
|
|
13
|
+
* can adjust decoration colors as desired.
|
|
14
|
+
*
|
|
15
|
+
* Closed enumeration matches
|
|
16
|
+
* `packages/engine/src/prose-pipeline/decorations/platform-vocabulary.ts`.
|
|
17
|
+
*
|
|
18
|
+
* @see ADR-174 §Closed platform vocabulary
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/* ----- Switches ----- */
|
|
22
|
+
|
|
23
|
+
.sharpee-em {
|
|
24
|
+
font-style: italic;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sharpee-strong {
|
|
28
|
+
font-weight: bold;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sharpee-u {
|
|
32
|
+
text-decoration: underline;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sharpee-st {
|
|
36
|
+
text-decoration: line-through;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.sharpee-code {
|
|
40
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sharpee-super {
|
|
44
|
+
vertical-align: super;
|
|
45
|
+
font-size: 0.83em;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.sharpee-sub {
|
|
49
|
+
vertical-align: sub;
|
|
50
|
+
font-size: 0.83em;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* ----- IF-semantic classes ----- */
|
|
54
|
+
/* Subtle defaults — themes should override colors to match. */
|
|
55
|
+
|
|
56
|
+
.sharpee-item {
|
|
57
|
+
font-style: italic;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sharpee-npc {
|
|
61
|
+
font-style: italic;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.sharpee-room {
|
|
65
|
+
font-weight: bold;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.sharpee-direction {
|
|
69
|
+
text-transform: lowercase;
|
|
70
|
+
font-variant: small-caps;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.sharpee-command {
|
|
74
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.sharpee-quote {
|
|
78
|
+
font-style: italic;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* ----- Color palette (foreground) ----- */
|
|
82
|
+
|
|
83
|
+
.sharpee-color-red { color: #c0392b; }
|
|
84
|
+
.sharpee-color-blue { color: #2980b9; }
|
|
85
|
+
.sharpee-color-green { color: #27ae60; }
|
|
86
|
+
.sharpee-color-yellow { color: #b58900; }
|
|
87
|
+
.sharpee-color-magenta { color: #9b59b6; }
|
|
88
|
+
.sharpee-color-cyan { color: #16a2a8; }
|
|
89
|
+
.sharpee-color-white { color: #fefefe; }
|
|
90
|
+
.sharpee-color-grey { color: #7f8c8d; }
|
|
91
|
+
.sharpee-color-black { color: #111111; }
|
|
92
|
+
|
|
93
|
+
/* ----- Color palette (background) ----- */
|
|
94
|
+
|
|
95
|
+
/* Background colors paired with text color that meets WCAG AA (4.5:1).
|
|
96
|
+
Lighter hues use #111 text; darker hues use #fff. */
|
|
97
|
+
.sharpee-bgcolor-red { background-color: #c0392b; color: #fff; }
|
|
98
|
+
.sharpee-bgcolor-blue { background-color: #1f5f8b; color: #fff; }
|
|
99
|
+
.sharpee-bgcolor-green { background-color: #1a7c44; color: #fff; }
|
|
100
|
+
.sharpee-bgcolor-yellow { background-color: #b58900; color: #111; }
|
|
101
|
+
.sharpee-bgcolor-magenta { background-color: #9b59b6; color: #fff; }
|
|
102
|
+
.sharpee-bgcolor-cyan { background-color: #0e6b6f; color: #fff; }
|
|
103
|
+
.sharpee-bgcolor-white { background-color: #fefefe; color: #111; }
|
|
104
|
+
.sharpee-bgcolor-grey { background-color: #5a6166; color: #fff; }
|
|
105
|
+
.sharpee-bgcolor-black { background-color: #111111; color: #fff; }
|
|
106
|
+
|
|
107
|
+
/* ----- Sizes ----- */
|
|
108
|
+
|
|
109
|
+
.sharpee-size-small { font-size: 0.85em; }
|
|
110
|
+
.sharpee-size-large { font-size: 1.15em; }
|
|
111
|
+
|
|
112
|
+
/* ----- Fonts ----- */
|
|
113
|
+
|
|
114
|
+
.sharpee-font-mono {
|
|
115
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* ----- Layout macros (ADR-183) ----- */
|
|
119
|
+
/* All block-level; the void br/p render as empty spans. Presentation lives
|
|
120
|
+
here so authors override en masse by re-declaring these classes. */
|
|
121
|
+
|
|
122
|
+
/* An empty block between inline runs collapses to a single line break. */
|
|
123
|
+
.sharpee-br {
|
|
124
|
+
display: block;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* An empty block with height gives a blank-line (paragraph) gap. */
|
|
128
|
+
.sharpee-p {
|
|
129
|
+
display: block;
|
|
130
|
+
height: 1em;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.sharpee-center {
|
|
134
|
+
display: block;
|
|
135
|
+
text-align: center;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.sharpee-right {
|
|
139
|
+
display: block;
|
|
140
|
+
text-align: right;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.sharpee-indent {
|
|
144
|
+
display: block;
|
|
145
|
+
margin-left: 2em;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* `[center=N:…]` and `[indent=N:…]` carry N as `data-value`. The platform
|
|
149
|
+
default applies the unparameterized behavior (center / one indent level) so
|
|
150
|
+
markup degrades gracefully; honoring an arbitrary value (width %, indent
|
|
151
|
+
level) is left to author CSS or a client pass — the value is present on the
|
|
152
|
+
element either way. */
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="dos-classic">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Sharpee</title>
|
|
7
|
+
<link rel="stylesheet" href="base.css">
|
|
8
|
+
<link rel="stylesheet" href="decorations.css">
|
|
9
|
+
<link rel="stylesheet" href="styles.css">
|
|
10
|
+
<!-- Author override: edit browser/{{STORY_ID}}.css. Loaded last so it wins the cascade. -->
|
|
11
|
+
<link rel="stylesheet" href="{{STORY_ID}}.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div class="sharpee-window">
|
|
15
|
+
<div class="sharpee-window-title-bar">
|
|
16
|
+
<span id="menu-title" class="sharpee-window-title">Sharpee</span>
|
|
17
|
+
<div class="sharpee-window-title-bar-controls" aria-hidden="true"></div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<menu role="menubar" id="menu-bar" class="sharpee-menu-bar">
|
|
21
|
+
<li role="none" class="sharpee-menu-bar-item">
|
|
22
|
+
<button role="menuitem" id="file-menu-btn" class="sharpee-menu-bar-trigger" aria-haspopup="menu" aria-expanded="false">File</button>
|
|
23
|
+
<ul role="menu" id="file-menu" class="sharpee-menu-dropdown">
|
|
24
|
+
<li role="menuitem" id="menu-save" class="sharpee-menu-option">Save Game...</li>
|
|
25
|
+
<li role="menuitem" id="menu-restore" class="sharpee-menu-option">Restore Game...</li>
|
|
26
|
+
<li role="separator" class="sharpee-menu-separator"></li>
|
|
27
|
+
<li role="menuitem" id="menu-restart" class="sharpee-menu-option">Restart</li>
|
|
28
|
+
<li role="menuitem" id="menu-quit" class="sharpee-menu-option">Quit</li>
|
|
29
|
+
</ul>
|
|
30
|
+
</li>
|
|
31
|
+
<li role="none" class="sharpee-menu-bar-item">
|
|
32
|
+
<button role="menuitem" id="settings-menu-btn" class="sharpee-menu-bar-trigger" aria-haspopup="menu" aria-expanded="false">Settings</button>
|
|
33
|
+
<ul role="menu" id="settings-menu" class="sharpee-menu-dropdown">
|
|
34
|
+
<li role="menuitem" class="sharpee-menu-option" aria-haspopup="menu">
|
|
35
|
+
<span>Theme</span>
|
|
36
|
+
<span class="sharpee-menu-submenu-indicator" aria-hidden="true">▸</span>
|
|
37
|
+
<ul role="menu" id="theme-menu" class="sharpee-menu-dropdown">
|
|
38
|
+
<li role="menuitemradio" class="sharpee-menu-option" data-theme="dos-classic">DOS Classic</li>
|
|
39
|
+
<li role="menuitemradio" class="sharpee-menu-option" data-theme="modern-dark">Modern Dark</li>
|
|
40
|
+
<li role="menuitemradio" class="sharpee-menu-option" data-theme="retro-terminal">Retro Terminal</li>
|
|
41
|
+
<li role="menuitemradio" class="sharpee-menu-option" data-theme="paper">Paper</li>
|
|
42
|
+
<li role="menuitemradio" class="sharpee-menu-option" data-theme="system-6">System 6</li>
|
|
43
|
+
</ul>
|
|
44
|
+
</li>
|
|
45
|
+
</ul>
|
|
46
|
+
</li>
|
|
47
|
+
<li role="none" class="sharpee-menu-bar-item">
|
|
48
|
+
<button role="menuitem" id="help-menu-btn" class="sharpee-menu-bar-trigger" aria-haspopup="menu" aria-expanded="false">Help</button>
|
|
49
|
+
<ul role="menu" id="help-menu" class="sharpee-menu-dropdown">
|
|
50
|
+
<li role="menuitem" id="menu-help" class="sharpee-menu-option">Commands...</li>
|
|
51
|
+
<li role="separator" class="sharpee-menu-separator"></li>
|
|
52
|
+
<li role="menuitem" id="menu-about" class="sharpee-menu-option">About...</li>
|
|
53
|
+
</ul>
|
|
54
|
+
</li>
|
|
55
|
+
</menu>
|
|
56
|
+
|
|
57
|
+
<div id="status-line" class="sharpee-status-bar">
|
|
58
|
+
<span id="location-name"></span>
|
|
59
|
+
<span id="score-turns">Score: 0 | Turns: 0</span>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div id="main-window" class="sharpee-prose-pane">
|
|
63
|
+
<div id="text-content"></div>
|
|
64
|
+
<div class="sharpee-prose-overlay" aria-hidden="true"></div>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div id="input-area" class="sharpee-input-bar">
|
|
68
|
+
<span class="sharpee-input-prompt">></span>
|
|
69
|
+
<input id="command-input" class="sharpee-input-field" type="text"
|
|
70
|
+
autocomplete="off" autocapitalize="none"
|
|
71
|
+
spellcheck="false" autofocus>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<dialog id="save-dialog" class="sharpee-dialog">
|
|
76
|
+
<h2 class="sharpee-dialog-title">SAVE GAME</h2>
|
|
77
|
+
<div class="sharpee-dialog-body">
|
|
78
|
+
<div class="save-input-row">
|
|
79
|
+
<label for="save-name-input">Save name:</label>
|
|
80
|
+
<input type="text" id="save-name-input" class="sharpee-input-field" maxlength="30"
|
|
81
|
+
autocomplete="off" spellcheck="false">
|
|
82
|
+
</div>
|
|
83
|
+
<div class="saves-list-label">Existing saves (click to overwrite):</div>
|
|
84
|
+
<div id="save-slots-list" class="saves-list"></div>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="sharpee-dialog-buttons">
|
|
87
|
+
<button id="save-confirm-btn" class="sharpee-dialog-button">Save</button>
|
|
88
|
+
<button id="save-cancel-btn" class="sharpee-dialog-button">Cancel</button>
|
|
89
|
+
</div>
|
|
90
|
+
</dialog>
|
|
91
|
+
|
|
92
|
+
<dialog id="restore-dialog" class="sharpee-dialog">
|
|
93
|
+
<h2 class="sharpee-dialog-title">RESTORE GAME</h2>
|
|
94
|
+
<div class="sharpee-dialog-body">
|
|
95
|
+
<div class="saves-list-label">Select a saved game:</div>
|
|
96
|
+
<div id="restore-slots-list" class="saves-list"></div>
|
|
97
|
+
<div id="no-saves-message" class="no-saves-message" hidden>No saved games found.</div>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="sharpee-dialog-buttons">
|
|
100
|
+
<button id="restore-confirm-btn" class="sharpee-dialog-button" disabled>Restore</button>
|
|
101
|
+
<button id="restore-cancel-btn" class="sharpee-dialog-button">Cancel</button>
|
|
102
|
+
</div>
|
|
103
|
+
</dialog>
|
|
104
|
+
|
|
105
|
+
<dialog id="startup-dialog" class="sharpee-dialog">
|
|
106
|
+
<h2 class="sharpee-dialog-title">CONTINUE GAME?</h2>
|
|
107
|
+
<div class="sharpee-dialog-body">
|
|
108
|
+
<p id="startup-save-info" class="startup-info"></p>
|
|
109
|
+
<p class="startup-question">Continue where you left off?</p>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="sharpee-dialog-buttons">
|
|
112
|
+
<button id="startup-continue-btn" class="sharpee-dialog-button">Continue</button>
|
|
113
|
+
<button id="startup-new-btn" class="sharpee-dialog-button">New Game</button>
|
|
114
|
+
</div>
|
|
115
|
+
</dialog>
|
|
116
|
+
|
|
117
|
+
<script src="game.js"></script>
|
|
118
|
+
</body>
|
|
119
|
+
</html>
|