@bitmagic/cli 0.1.41 → 0.1.43

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 CHANGED
@@ -115,6 +115,8 @@ my-game/
115
115
  build/
116
116
  index.html # bitmagic build's output bundle
117
117
  manifest.json # engineVersion, fingerprint, bytes, sha256, builtAt
118
+ publish/
119
+ source.zip # the source archive each publish uploads (see Publishing)
118
120
  verify/
119
121
  result.json # bitmagic verify's verdict — ok, failures, warnings, fingerprint, at, renderer, settle, snapshot
120
122
  screenshot.png # the publish thumbnail when there is no cover art (not written by --fast runs)
@@ -355,13 +357,33 @@ before `--force` has anything to work with.
355
357
  stick — and note that writing them into `game.json` yourself would change the fingerprint and
356
358
  invalidate the verify you just checked.
357
359
 
360
+ ### The source archive
361
+
362
+ Every publish also uploads a **source archive** — `.bitmagic/publish/source.zip` — alongside the
363
+ bundle. It carries your game's source (`src/work/`, `index.html`, the configs, `bitmagic.json`,
364
+ `GAME-DESIGN.md`, `mechanics-plan.md`) plus a manifest of file hashes. The vendored `engine/` tree
365
+ is hashed but not included: it is platform code, identical for everyone on your engine version, and
366
+ shipping ~14MB of it on every publish would serve nobody.
367
+
368
+ **The archive is uploaded to a publicly readable URL.** The address contains a random component, so
369
+ it cannot be guessed from your game's id or its play URL, but anyone given the link can download it.
370
+ Files that look like credentials — `.env*`, `*.pem`, `*.key`, `id_rsa*`, `.npmrc`,
371
+ `.git-credentials`, `*service-account*.json`, `.claude/settings.local.json` — are **never** put in
372
+ the archive, and publish prints a line naming any it left out. That list will never be exhaustive:
373
+ if your project directory holds a secret in some other shape, move it out before publishing.
374
+
375
+ Bitmagic uses the archive to sanity-check publishes: that the source matches the fingerprint the
376
+ verify gate checked, and that the engine you built against has not been modified. Findings are
377
+ advisory and printed as `warning:` lines — they never block a publish. The one thing that *is*
378
+ refused is a bundle that is not a Bitmagic engine build at all (exit 1).
379
+
358
380
  ### Exit codes
359
381
 
360
382
  `bitmagic publish` uses these to let a script or agent branch without parsing the message:
361
383
 
362
384
  | Code | Meaning |
363
385
  |---|---|
364
- | 1 | Build failed |
386
+ | 1 | Build failed, or the uploaded bundle was not a Bitmagic engine build (check `vite.publish.config.js`). Not retryable — republishing the same bytes gets the same refusal. |
365
387
  | 2 | Not logged in |
366
388
  | 3 | Verify missing, stale, or failed |
367
389
  | 5 | Not the game's owner, or the account/game is banned |
@@ -40,12 +40,13 @@ import { coverImagePath } from './cover.js';
40
40
  import { resolveEnvironment, resolveAuth0ClientId } from '../config/environments.js';
41
41
  import { readDefaultEnvironment } from '../config/credentials.js';
42
42
  import { getAccessToken } from '../auth/session.js';
43
- import { computeFingerprint } from '../publish/fingerprint.js';
43
+ import { buildSourceIndex } from '../publish/fingerprint.js';
44
+ import { buildSourceArchive } from '../publish/source-zip.js';
44
45
  import { readVerifyRecord } from '../verify/result.js';
45
46
  import { readFaviconOverride } from '../publish/favicon.js';
46
47
  import { checkVerifyGate, injectMetaBlock } from '../publish/meta-block.js';
47
48
  import { runBuild as runBuildImpl, readBuildManifest as readBuildManifestImpl, buildBundlePaths, } from '../publish/bundle.js';
48
- import { beginPublish, completePublish, putBundle, requestThumbnailUploadUrl, putThumbnail, } from '../publish/client.js';
49
+ import { beginPublish, completePublish, putBundle, putSourceArchive, requestThumbnailUploadUrl, putThumbnail, } from '../publish/client.js';
49
50
  /** Where `bitmagic verify` writes its record and screenshot — see `commands/verify.ts`. */
50
51
  function verifyArtifactDir(root) {
51
52
  return path.join(root, '.bitmagic', 'verify');
@@ -153,7 +154,10 @@ export async function runPublish(args, deps = defaultDeps()) {
153
154
  ...(args.description !== undefined ? { description: args.description } : {}),
154
155
  };
155
156
  const context = loadProjectContext(deps.startDir);
156
- const fingerprint = computeFingerprint(context.root);
157
+ // One walk, two consumers: the staleness gate below and the source archive further down. Walking
158
+ // twice would let an edit land between them and would give the exclusion rules two call sites.
159
+ const sourceIndex = buildSourceIndex(context.root);
160
+ const fingerprint = sourceIndex.fingerprint;
157
161
  const gate = checkVerifyGate(readVerifyRecord(verifyArtifactDir(context.root)), fingerprint, force);
158
162
  if (!gate.ok)
159
163
  throw new CliError(gate.message, 3);
@@ -173,6 +177,28 @@ export async function runPublish(args, deps = defaultDeps()) {
173
177
  // routes through the Output seam that `--json` redirects to stderr.
174
178
  const thumbnail = await uploadThumbnail(context, environment, token, apiDeps, log);
175
179
  const thumbnailUrl = thumbnail.url;
180
+ // The source archive is built BEFORE begin, because its hash is what begin binds into the meta
181
+ // block — see BeginPublishRequest.sourceSha256. Best-effort throughout: this is a notification
182
+ // and audit artifact, and a game that builds and verifies must still ship when zipping fails.
183
+ let archive = null;
184
+ try {
185
+ archive = await buildSourceArchive({
186
+ root: context.root,
187
+ index: sourceIndex,
188
+ gameId: context.metadata.gameId,
189
+ engineVersion: context.metadata.engineVersion,
190
+ genre: context.metadata.genre,
191
+ });
192
+ if (archive.secretsOmitted.length > 0) {
193
+ // Named, not silently dropped. A creator who keeps a credential in the project should learn
194
+ // that the archive skipped it — both so they trust the archive's contents and so they know
195
+ // the file was there to begin with.
196
+ log(`Source archive: left out ${archive.secretsOmitted.length} credential-shaped file(s): ${archive.secretsOmitted.join(', ')}`);
197
+ }
198
+ }
199
+ catch (error) {
200
+ log(`Source archive could not be built (${error instanceof Error ? error.message : String(error)}) — publishing without it.`);
201
+ }
176
202
  // No bundleBytes/sha256 sent here — see BeginPublishRequest's doc comment in publish/client.ts.
177
203
  // The only honest number for those fields is the size/hash of the bundle AFTER the meta block
178
204
  // below is injected, and that block (and the publishVersion inside it) isn't known until THIS
@@ -184,6 +210,7 @@ export async function runPublish(args, deps = defaultDeps()) {
184
210
  engineVersion: context.metadata.engineVersion,
185
211
  thumbnailUrl,
186
212
  faviconSourceUrl: readFaviconOverride(context.root),
213
+ ...(archive ? { sourceSha256: archive.sha256 } : {}),
187
214
  }, apiDeps);
188
215
  const { htmlPath } = buildBundlePaths(context.root);
189
216
  let builtHtml;
@@ -213,6 +240,19 @@ export async function runPublish(args, deps = defaultDeps()) {
213
240
  // signed PUT whose headers don't match what was signed. Omitting it does not produce a stale
214
241
  // cache — it produces a 403 on upload. `cli-uploads.ts` established the same pattern.
215
242
  await putBundle(begun.signedUrl, publishedHtml, begun.cacheControl, apiDeps);
243
+ // The archive rides the same signed-PUT pattern as the bundle. Uploaded AFTER the bundle so a
244
+ // failure here cannot cost a publish that was otherwise complete, and swallowed for the same
245
+ // reason the build was: `complete` reports "no archive to audit" as a warning, not a refusal.
246
+ let sourceUploaded = false;
247
+ if (archive && begun.sourceSignedUrl && begun.sourceCacheControl) {
248
+ try {
249
+ await putSourceArchive(begun.sourceSignedUrl, fs.readFileSync(archive.filePath), begun.sourceCacheControl, apiDeps);
250
+ sourceUploaded = true;
251
+ }
252
+ catch (error) {
253
+ log(`Source archive upload failed (${error instanceof Error ? error.message : String(error)}) — the game still publishes.`);
254
+ }
255
+ }
216
256
  // `visibility`, `name`, `description`, and `thumbnailUrl` are all re-sent, not implied.
217
257
  // `complete` re-authorizes against its OWN body — `begin` writes nothing, so nothing it
218
258
  // validated is bound — and an absent visibility defaults to private. Omitting them here would
@@ -234,6 +274,12 @@ export async function runPublish(args, deps = defaultDeps()) {
234
274
  // are declarative (logged, never verified) and why engineVersion here is not a second gate.
235
275
  engineVersion: context.metadata.engineVersion,
236
276
  fingerprint,
277
+ // Only claimed when the archive actually landed — declaring a key the server would then fail
278
+ // to read turns a best-effort artifact into a warning about our own plumbing.
279
+ ...(sourceUploaded && archive && begun.sourceKey
280
+ ? { sourceKey: begun.sourceKey, sourceSha256: archive.sha256 }
281
+ : {}),
282
+ fingerprintAlgo: sourceIndex.algo,
237
283
  }, apiDeps);
238
284
  // Nudge, never a gate — and printed BEFORE the publish result so it does not read as a
239
285
  // failure of the publish that just succeeded.
@@ -244,6 +290,10 @@ export async function runPublish(args, deps = defaultDeps()) {
244
290
  if (done.visibility === 'private') {
245
291
  log('Not listed. Publish with --visibility public when you are ready.');
246
292
  }
293
+ // Advisory only — the publish already succeeded, and none of these change the exit code. Printed
294
+ // in the same ` warning:` shape the smoke check uses below so one prose convention covers both.
295
+ for (const warning of done.sourceChecks?.warnings ?? [])
296
+ log(` warning: ${warning}`);
247
297
  output.result({
248
298
  ok: true,
249
299
  url: done.url,
@@ -251,6 +301,7 @@ export async function runPublish(args, deps = defaultDeps()) {
251
301
  publishVersion: done.publishVersion,
252
302
  gameId: context.metadata.gameId,
253
303
  thumbnailSource: thumbnail.source,
304
+ ...(done.sourceChecks ? { sourceChecks: done.sourceChecks } : {}),
254
305
  });
255
306
  // Everything below runs AFTER the game is live. `complete` has written the bytes and the row,
256
307
  // so nothing here can un-publish anything — this stage only decides what we tell the creator.
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,13 @@
10
10
  * Same template-literal rules as its host: **no backticks**, and a backslash in a regex has to be
11
11
  * doubled to survive the literal.
12
12
  */
13
- /** Styles for `#asset-overlay`, appended to the shell's stylesheet. */
14
- export declare const ASSET_DETAIL_CSS = "\n /* Modelled on #hq-overlay, deliberately: the dev view has one modal idiom and this is it. */\n #asset-overlay { display: none; position: fixed; inset: 0; background: rgba(8,8,12,.78);\n align-items: center; justify-content: center; z-index: 11; }\n #asset-overlay.show { display: flex; }\n #asset-dialog { display: flex; width: min(1100px, 94vw); height: min(760px, 88vh);\n background: #17171d; border: 1px solid #34343f; border-radius: 8px;\n overflow: hidden; }\n /* The viewer takes the room. Everything else is a caption. */\n #asset-view { flex: 1; min-width: 0; position: relative; background: #1e293b; }\n #asset-view iframe { display: block; width: 100%; height: 100%; border: 0; }\n #asset-view img { display: block; width: 100%; height: 100%; object-fit: contain;\n background: #101014; }\n #asset-view audio { position: absolute; left: 50%; top: 50%; width: min(420px, 80%);\n transform: translate(-50%, -50%); }\n #asset-note { position: absolute; inset: auto 0 0 0; padding: 10px 12px; background: #101014e6;\n color: #e0938e; font-size: 12px; }\n #asset-note.hidden, #asset-view > .hidden { display: none; }\n #asset-meta { width: 268px; flex: none; padding: 14px; overflow-y: auto;\n border-left: 1px solid #26262e; }\n #asset-meta h2 { margin: 0 0 2px; font-size: 15px; word-break: break-word; }\n #asset-meta .sub { color: #6a6a7a; font-size: 11px; margin-bottom: 12px; }\n #asset-facts { display: grid; grid-template-columns: auto 1fr; gap: 4px 10px; font-size: 12px; }\n #asset-facts dt { color: #6a6a7a; }\n #asset-facts dd { margin: 0; color: #d9d9e2; word-break: break-word; }\n #asset-facts dd.mono { font-family: ui-monospace, monospace; font-size: 11px; }\n #asset-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }\n #asset-close { margin-left: auto; }\n";
13
+ /**
14
+ * Styles for `#asset-overlay`, appended to the shell's stylesheet.
15
+ *
16
+ * The surface, the pills and the modal backdrop come from `design.ts` (`.bm-overlay`,
17
+ * `.bm-dialog`, `.bm-pill`); only what is specific to this dialog's layout lives here.
18
+ */
19
+ export declare const ASSET_DETAIL_CSS = "\n /* Above #hq-overlay, which sits at 10 \u2014 a preview opened from a row must cover it. */\n #asset-overlay { z-index: 11; }\n #asset-dialog { display: flex; width: min(1100px, 94vw); height: min(760px, 88vh);\n overflow: hidden; }\n /* The viewer takes the room. Everything else is a caption. The near-black ground is the\n brand's: a creation is the only thing on this surface that carries colour. */\n #asset-view { flex: 1; min-width: 0; position: relative; background: var(--bm-bg); }\n #asset-view iframe { display: block; width: 100%; height: 100%; border: 0; }\n #asset-view img { display: block; width: 100%; height: 100%; object-fit: contain;\n background: var(--bm-bg); }\n #asset-view audio { position: absolute; left: 50%; top: 50%; width: min(420px, 80%);\n transform: translate(-50%, -50%); }\n /* A note here is always a failure or a wait that has gone on too long \u2014 the negative accent. */\n #asset-note { position: absolute; inset: auto 0 0 0; padding: 10px 12px;\n background: var(--bm-scrim); color: var(--bm-pink-hover); font-size: 12px; }\n #asset-note.hidden, #asset-view > .hidden { display: none; }\n /* Wide enough for the three action pills to sit on one row: uppercase tracked labels are\n wider than the sentence-case ones this panel used to have. */\n #asset-meta { width: 360px; flex: none; padding: 16px; overflow-y: auto;\n border-left: 1px solid var(--bm-border-muted); }\n #asset-meta h2 { margin: 0 0 4px; word-break: break-word; }\n #asset-meta .sub { color: var(--bm-text-dim); font-size: 12px; margin-bottom: 16px; }\n #asset-facts { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; font-size: 12px; }\n #asset-facts dt { color: var(--bm-text-dim); }\n #asset-facts dd { margin: 0; color: var(--bm-text); word-break: break-word; }\n #asset-facts dd.mono { font-family: var(--bm-font-mono); }\n #asset-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }\n #asset-close { margin-left: auto; }\n";
15
20
  /**
16
21
  * The overlay itself.
17
22
  *
@@ -19,4 +24,4 @@ export declare const ASSET_DETAIL_CSS = "\n /* Modelled on #hq-overlay, deliber
19
24
  * controls because its player sits in a 46px row, and here there is a whole dialog. A creator
20
25
  * checking a sound effect wants the scrubber.
21
26
  */
22
- export declare const ASSET_DETAIL_HTML = "\n <div id=\"asset-overlay\">\n <div id=\"asset-dialog\">\n <div id=\"asset-view\">\n <iframe id=\"asset-frame\" class=\"hidden\" title=\"Asset preview\"></iframe>\n <img id=\"asset-image\" class=\"hidden\" alt=\"\">\n <audio id=\"asset-audio\" class=\"hidden\" controls preload=\"none\"></audio>\n <div id=\"asset-note\" class=\"hidden\"></div>\n </div>\n <aside id=\"asset-meta\">\n <h2 id=\"asset-name\"></h2>\n <div class=\"sub\" id=\"asset-sub\"></div>\n <dl id=\"asset-facts\"></dl>\n <div id=\"asset-actions\">\n <button id=\"asset-reset\" type=\"button\" title=\"Back to the angle the thumbnail uses\">Reset view</button>\n <button id=\"asset-copy\" type=\"button\" title=\"Copy this asset's id\">Copy id</button>\n <button id=\"asset-close\" type=\"button\">Close</button>\n </div>\n </aside>\n </div>\n </div>\n";
27
+ export declare const ASSET_DETAIL_HTML = "\n <div id=\"asset-overlay\" class=\"bm-overlay\">\n <div id=\"asset-dialog\" class=\"bm-dialog\">\n <div id=\"asset-view\">\n <iframe id=\"asset-frame\" class=\"hidden\" title=\"Asset preview\"></iframe>\n <img id=\"asset-image\" class=\"hidden\" alt=\"\">\n <audio id=\"asset-audio\" class=\"hidden\" controls preload=\"none\"></audio>\n <div id=\"asset-note\" class=\"hidden\"></div>\n </div>\n <aside id=\"asset-meta\">\n <h2 id=\"asset-name\"></h2>\n <div class=\"sub\" id=\"asset-sub\"></div>\n <dl id=\"asset-facts\"></dl>\n <div id=\"asset-actions\">\n <button id=\"asset-reset\" class=\"bm-pill\" type=\"button\" title=\"Back to the angle the thumbnail uses\">Reset view</button>\n <button id=\"asset-copy\" class=\"bm-pill\" type=\"button\" title=\"Copy this asset's id\">Copy id</button>\n <button id=\"asset-close\" class=\"bm-pill bm-pill--ghost\" type=\"button\">Close</button>\n </div>\n </aside>\n </div>\n </div>\n";
@@ -10,34 +10,40 @@
10
10
  * Same template-literal rules as its host: **no backticks**, and a backslash in a regex has to be
11
11
  * doubled to survive the literal.
12
12
  */
13
- /** Styles for `#asset-overlay`, appended to the shell's stylesheet. */
13
+ /**
14
+ * Styles for `#asset-overlay`, appended to the shell's stylesheet.
15
+ *
16
+ * The surface, the pills and the modal backdrop come from `design.ts` (`.bm-overlay`,
17
+ * `.bm-dialog`, `.bm-pill`); only what is specific to this dialog's layout lives here.
18
+ */
14
19
  export const ASSET_DETAIL_CSS = `
15
- /* Modelled on #hq-overlay, deliberately: the dev view has one modal idiom and this is it. */
16
- #asset-overlay { display: none; position: fixed; inset: 0; background: rgba(8,8,12,.78);
17
- align-items: center; justify-content: center; z-index: 11; }
18
- #asset-overlay.show { display: flex; }
20
+ /* Above #hq-overlay, which sits at 10 a preview opened from a row must cover it. */
21
+ #asset-overlay { z-index: 11; }
19
22
  #asset-dialog { display: flex; width: min(1100px, 94vw); height: min(760px, 88vh);
20
- background: #17171d; border: 1px solid #34343f; border-radius: 8px;
21
23
  overflow: hidden; }
22
- /* The viewer takes the room. Everything else is a caption. */
23
- #asset-view { flex: 1; min-width: 0; position: relative; background: #1e293b; }
24
+ /* The viewer takes the room. Everything else is a caption. The near-black ground is the
25
+ brand's: a creation is the only thing on this surface that carries colour. */
26
+ #asset-view { flex: 1; min-width: 0; position: relative; background: var(--bm-bg); }
24
27
  #asset-view iframe { display: block; width: 100%; height: 100%; border: 0; }
25
28
  #asset-view img { display: block; width: 100%; height: 100%; object-fit: contain;
26
- background: #101014; }
29
+ background: var(--bm-bg); }
27
30
  #asset-view audio { position: absolute; left: 50%; top: 50%; width: min(420px, 80%);
28
31
  transform: translate(-50%, -50%); }
29
- #asset-note { position: absolute; inset: auto 0 0 0; padding: 10px 12px; background: #101014e6;
30
- color: #e0938e; font-size: 12px; }
32
+ /* A note here is always a failure or a wait that has gone on too long — the negative accent. */
33
+ #asset-note { position: absolute; inset: auto 0 0 0; padding: 10px 12px;
34
+ background: var(--bm-scrim); color: var(--bm-pink-hover); font-size: 12px; }
31
35
  #asset-note.hidden, #asset-view > .hidden { display: none; }
32
- #asset-meta { width: 268px; flex: none; padding: 14px; overflow-y: auto;
33
- border-left: 1px solid #26262e; }
34
- #asset-meta h2 { margin: 0 0 2px; font-size: 15px; word-break: break-word; }
35
- #asset-meta .sub { color: #6a6a7a; font-size: 11px; margin-bottom: 12px; }
36
- #asset-facts { display: grid; grid-template-columns: auto 1fr; gap: 4px 10px; font-size: 12px; }
37
- #asset-facts dt { color: #6a6a7a; }
38
- #asset-facts dd { margin: 0; color: #d9d9e2; word-break: break-word; }
39
- #asset-facts dd.mono { font-family: ui-monospace, monospace; font-size: 11px; }
40
- #asset-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
36
+ /* Wide enough for the three action pills to sit on one row: uppercase tracked labels are
37
+ wider than the sentence-case ones this panel used to have. */
38
+ #asset-meta { width: 360px; flex: none; padding: 16px; overflow-y: auto;
39
+ border-left: 1px solid var(--bm-border-muted); }
40
+ #asset-meta h2 { margin: 0 0 4px; word-break: break-word; }
41
+ #asset-meta .sub { color: var(--bm-text-dim); font-size: 12px; margin-bottom: 16px; }
42
+ #asset-facts { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; font-size: 12px; }
43
+ #asset-facts dt { color: var(--bm-text-dim); }
44
+ #asset-facts dd { margin: 0; color: var(--bm-text); word-break: break-word; }
45
+ #asset-facts dd.mono { font-family: var(--bm-font-mono); }
46
+ #asset-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
41
47
  #asset-close { margin-left: auto; }
42
48
  `;
43
49
  /**
@@ -48,8 +54,8 @@ export const ASSET_DETAIL_CSS = `
48
54
  * checking a sound effect wants the scrubber.
49
55
  */
50
56
  export const ASSET_DETAIL_HTML = `
51
- <div id="asset-overlay">
52
- <div id="asset-dialog">
57
+ <div id="asset-overlay" class="bm-overlay">
58
+ <div id="asset-dialog" class="bm-dialog">
53
59
  <div id="asset-view">
54
60
  <iframe id="asset-frame" class="hidden" title="Asset preview"></iframe>
55
61
  <img id="asset-image" class="hidden" alt="">
@@ -61,9 +67,9 @@ export const ASSET_DETAIL_HTML = `
61
67
  <div class="sub" id="asset-sub"></div>
62
68
  <dl id="asset-facts"></dl>
63
69
  <div id="asset-actions">
64
- <button id="asset-reset" type="button" title="Back to the angle the thumbnail uses">Reset view</button>
65
- <button id="asset-copy" type="button" title="Copy this asset's id">Copy id</button>
66
- <button id="asset-close" type="button">Close</button>
70
+ <button id="asset-reset" class="bm-pill" type="button" title="Back to the angle the thumbnail uses">Reset view</button>
71
+ <button id="asset-copy" class="bm-pill" type="button" title="Copy this asset's id">Copy id</button>
72
+ <button id="asset-close" class="bm-pill bm-pill--ghost" type="button">Close</button>
67
73
  </div>
68
74
  </aside>
69
75
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"asset-detail-panel.js","sourceRoot":"","sources":["../../src/editor/asset-detail-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBhC,CAAC"}
1
+ {"version":3,"file":"asset-detail-panel.js","sourceRoot":"","sources":["../../src/editor/asset-detail-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B/B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBhC,CAAC"}
@@ -18,6 +18,7 @@
18
18
  */
19
19
  import { CDN_IMPORTS } from '../scaffold/project-files.js';
20
20
  import { importMapEntries } from '../scaffold/aliases.js';
21
+ import { BITMAGIC_FONT_LINK, BITMAGIC_TOKENS_CSS } from './design.js';
21
22
  /** Attribute- and script-safe: these land inside a `<script type="importmap">` block. */
22
23
  function importMapFor(gamePort) {
23
24
  const origin = `http://localhost:${gamePort}`;
@@ -31,17 +32,25 @@ export function renderAssetPreviewPage(options) {
31
32
  <head>
32
33
  <meta charset="utf-8">
33
34
  <title>Asset preview</title>
35
+ ${BITMAGIC_FONT_LINK}
34
36
  <style>
35
- html, body { margin: 0; height: 100%; background: #1e293b; overflow: hidden;
36
- font: 12px/1.5 system-ui, -apple-system, sans-serif; color: #c8c8d4; }
37
+ ${BITMAGIC_TOKENS_CSS}
38
+ /* The ground before the canvas exists, and the type over it once it does. Brand near-black, so
39
+ a viewer that is still loading looks like part of the dialog around it rather than a blank
40
+ window. The RENDER surface stays the slate asset-viewer.ts clears to — that is the colour the
41
+ engine bakes the thumbnails on, and a tile and its preview must not disagree. */
42
+ html, body { margin: 0; height: 100%; background: var(--bm-bg); overflow: hidden;
43
+ font: 400 12px/1.5 var(--bm-font); color: var(--bm-text-muted); }
37
44
  #stage { position: absolute; inset: 0; }
38
45
  #stage canvas { display: block; width: 100%; height: 100%; }
39
46
  /* Sits over the canvas rather than beside it: the dialog gives this iframe every pixel, and a
40
47
  status line that reserved space would shrink the thing being looked at. */
41
- #status { position: absolute; left: 0; right: 0; top: 0; padding: 10px 12px;
42
- background: linear-gradient(#1e293bcc, #1e293b00); pointer-events: none; }
43
- #status.failed { color: #e0938e; }
44
- #hint { position: absolute; left: 12px; bottom: 10px; color: #7d8595; pointer-events: none; }
48
+ #status { position: absolute; left: 0; right: 0; top: 0; padding: 12px;
49
+ background: linear-gradient(var(--bm-scrim), transparent);
50
+ pointer-events: none; }
51
+ #status.failed { color: var(--bm-pink-hover); }
52
+ #hint { position: absolute; left: 12px; bottom: 12px; color: var(--bm-text-dim);
53
+ pointer-events: none; }
45
54
  #hint.hidden, #status.hidden { display: none; }
46
55
  </style>
47
56
  </head>
@@ -1 +1 @@
1
- {"version":3,"file":"asset-preview-page.js","sourceRoot":"","sources":["../../src/editor/asset-preview-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,yFAAyF;AACzF,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,MAAM,GAAG,oBAAoB,QAAQ,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CACzF,CAAC;IACF,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;EAyBP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"asset-preview-page.js","sourceRoot":"","sources":["../../src/editor/asset-preview-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQtE,yFAAyF;AACzF,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,MAAM,GAAG,oBAAoB,QAAQ,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CACzF,CAAC;IACF,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO;;;;;EAKP,kBAAkB;;EAElB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BnB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CR,CAAC;AACF,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The Bitmagic design system, for the pages `bitmagic dev` serves.
3
+ *
4
+ * The dev view is a Bitmagic product surface — for a pro-lane creator it is the only one they ever
5
+ * look at — so it follows `creator/DESIGN.md` the way the Creator and the in-engine editor do.
6
+ * It cannot import the Creator's `BitmagicDesign.css`: this package ships on npm on its own, and
7
+ * both pages are strings assembled in TypeScript rather than bundled documents. So it re-declares
8
+ * the same tokens, exactly as `game/src/editor/editor-styles.ts` does for the engine's editor
9
+ * dialogs — three copies of the palette, one source of truth in DESIGN.md.
10
+ *
11
+ * **No backticks in anything exported here.** These constants are interpolated into the pages'
12
+ * template literals, and a backtick would end the literal somewhere else entirely (there is a test
13
+ * for it: `__tests__/shell-page.test.ts`).
14
+ */
15
+ /** Hex tokens for TS-side use — the same set `game/src/editor/editor-styles.ts` exposes. */
16
+ export declare const BM: {
17
+ readonly bg: "#0b0b0b";
18
+ readonly surface: "#181818";
19
+ readonly surfaceAlt: "#1f1f1f";
20
+ readonly surfaceCard: "#252525";
21
+ readonly textPrimary: "#ffffff";
22
+ readonly textMuted: "#b3b3b3";
23
+ readonly textDim: "#7c7c7c";
24
+ readonly textOnAccent: "#000000";
25
+ readonly border: "#4d4d4d";
26
+ readonly borderMuted: "#2a2a2a";
27
+ readonly aqua: "#A0DAB9";
28
+ readonly aquaHover: "#B8E4CA";
29
+ readonly aquaPressed: "#7DC29C";
30
+ readonly pink: "#E0218A";
31
+ readonly pinkHover: "#F04AA4";
32
+ readonly pinkPressed: "#B3176D";
33
+ readonly pumpkin: "#FF8200";
34
+ readonly canary: "#F9E547";
35
+ readonly shadowDialog: "0 8px 24px rgba(0, 0, 0, 0.5)";
36
+ readonly shadowCard: "0 8px 8px rgba(0, 0, 0, 0.3)";
37
+ readonly glowAqua: "0 0 24px rgba(160, 218, 185, 0.45)";
38
+ readonly glowPink: "0 0 24px rgba(224, 33, 138, 0.4)";
39
+ readonly insetBorderDim: "inset 0 0 0 1px #7c7c7c";
40
+ readonly insetBorderFocus: "inset 0 0 0 1px #ffffff, 0 0 0 2px rgba(160, 218, 185, 0.45)";
41
+ readonly font: "\"Red Hat Display\", \"Helvetica Neue\", Helvetica, Arial, system-ui, sans-serif";
42
+ readonly fontMono: "ui-monospace, SFMono-Regular, Menlo, monospace";
43
+ };
44
+ /**
45
+ * Red Hat Display, from the same Google Fonts URL `creator/index.html` uses.
46
+ *
47
+ * A dev machine with no network gets the fallback stack and a page that is otherwise identical —
48
+ * every rule below sizes and weights type rather than depending on the family's metrics.
49
+ */
50
+ export declare const BITMAGIC_FONT_LINK = "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@300;400;500;700&display=swap\">";
51
+ /** The palette as custom properties, so page-specific rules can `var(--bm-*)` them. */
52
+ export declare const BITMAGIC_TOKENS_CSS: string;
53
+ /**
54
+ * The component primitives both served pages use: pill buttons, inputs, badges, modal surfaces.
55
+ *
56
+ * Label voice is UPPERCASE Bold with tracking and content voice is sentence-case Regular, per the
57
+ * brand type guideline — which is why every button here is uppercase and nothing else is.
58
+ */
59
+ export declare const BITMAGIC_CONTROLS_CSS: string;