@civitai/blocks-react 0.12.3 → 0.13.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.
@@ -0,0 +1,344 @@
1
+ /**
2
+ * In-harness resource-picker overlay for the LIVE host.
3
+ *
4
+ * On the real platform, `OPEN_CHECKPOINT_PICKER` / `OPEN_RESOURCE_PICKER` open
5
+ * civitai's OWN model-picker modal. `dev:live` has no civitai chrome, so the
6
+ * live host opens THIS — a small, self-contained DOM overlay (a searchable grid
7
+ * of model cards backed by {@link fetchCatalog}). The dev clicks a card → the
8
+ * host replies with a PROTOCOL-IDENTICAL `BlockCheckpointInfo` /
9
+ * `BlockResourceInfo`. Dismiss → no selection. Protocol fidelity, not chrome
10
+ * fidelity: the block code is byte-identical to production.
11
+ *
12
+ * Why a hand-rolled DOM overlay and NOT a React root: the live host is a
13
+ * non-React `install()` (it patches `window.parent.postMessage`), and
14
+ * `@civitai/blocks-react` has NO runtime dependency on `react-dom` (it's a
15
+ * devDependency only; the package ships hooks for blocks that bring their own
16
+ * React). Mounting a React root here would force a `react-dom` runtime dep onto
17
+ * every consumer. A ~self-contained DOM overlay keeps the package dependency
18
+ * surface unchanged and tears down deterministically.
19
+ *
20
+ * MONEY-SAFETY: a pick is DISCOVERY ONLY — the catalog browse and the resulting
21
+ * id are HINTS. The server re-validates + prices every id at estimate/submit.
22
+ * Nothing the dev clicks here is trusted or spends Buzz.
23
+ *
24
+ * The overlay exposes a small TEST SEAM ({@link PickerOverlayHandle}) so tests
25
+ * (and the live host) can drive selection/dismissal programmatically without
26
+ * synthesizing DOM clicks: `selectFirst()`, `selectByVersionId()`, `dismiss()`,
27
+ * and `onReady` (fired once the first catalog page has loaded).
28
+ */
29
+ import { cardToCheckpoint, cardToResource, fetchCatalog, filterCardsByFamily, } from './catalog.js';
30
+ const Z_INDEX = 2_147_483_000; // above the dev harness log (9999) and most chrome.
31
+ /**
32
+ * Open the in-harness picker overlay. Mounts a modal into the document, loads
33
+ * the catalog (filtered to `type` + family hint), and resolves via `onResolve`
34
+ * on the dev's pick or dismissal. Returns a {@link PickerOverlayHandle} for
35
+ * programmatic control (tests + host teardown). Idempotent resolve: only the
36
+ * first of pick/dismiss/close/teardown wins.
37
+ */
38
+ export function openPickerOverlay(opts) {
39
+ const doc = opts.document ?? globalThis.document;
40
+ let resolved = false;
41
+ let cards = [];
42
+ // --- DOM scaffold (created even without a document so the handle is total). ---
43
+ let root = null;
44
+ let grid = null;
45
+ let statusEl = null;
46
+ let searchEl = null;
47
+ const teardown = () => {
48
+ if (root && root.parentNode)
49
+ root.parentNode.removeChild(root);
50
+ root = null;
51
+ grid = null;
52
+ statusEl = null;
53
+ searchEl = null;
54
+ };
55
+ const resolve = (selection) => {
56
+ if (resolved)
57
+ return;
58
+ resolved = true;
59
+ teardown();
60
+ opts.onResolve(selection);
61
+ };
62
+ const selectCard = (card) => {
63
+ if (opts.type === 'Checkpoint') {
64
+ resolve({ kind: 'Checkpoint', selected: cardToCheckpoint(card) });
65
+ }
66
+ else {
67
+ resolve({ kind: 'LORA', selected: cardToResource(card, opts.type) });
68
+ }
69
+ };
70
+ const handle = {
71
+ get cards() {
72
+ return cards;
73
+ },
74
+ get resolved() {
75
+ return resolved;
76
+ },
77
+ selectFirst() {
78
+ const first = cards[0];
79
+ if (first)
80
+ selectCard(first);
81
+ },
82
+ selectByVersionId(versionId) {
83
+ const found = cards.find((c) => c.versionId === versionId);
84
+ if (found)
85
+ selectCard(found);
86
+ },
87
+ dismiss() {
88
+ resolve(null);
89
+ },
90
+ close() {
91
+ resolve(null);
92
+ },
93
+ };
94
+ // No document (pure-node smoke test): still load the catalog so onReady fires
95
+ // and the handle is drivable; just skip the DOM.
96
+ const renderCards = () => {
97
+ if (!grid || !doc)
98
+ return;
99
+ grid.innerHTML = '';
100
+ if (cards.length === 0)
101
+ return;
102
+ for (const card of cards) {
103
+ const cell = doc.createElement('button');
104
+ cell.type = 'button';
105
+ cell.setAttribute('data-picker-card', String(card.versionId));
106
+ cell.setAttribute('aria-label', `${card.modelName} (${card.baseModel || 'unknown base'})`);
107
+ Object.assign(cell.style, CARD_STYLE);
108
+ if (opts.currentVersionId != null && card.versionId === opts.currentVersionId) {
109
+ cell.style.outline = '2px solid #5ec8a0';
110
+ }
111
+ const thumb = doc.createElement('div');
112
+ Object.assign(thumb.style, THUMB_STYLE);
113
+ if (card.thumbnailUrl)
114
+ thumb.style.backgroundImage = `url("${card.thumbnailUrl}")`;
115
+ cell.appendChild(thumb);
116
+ const name = doc.createElement('div');
117
+ Object.assign(name.style, NAME_STYLE);
118
+ name.textContent = card.modelName;
119
+ cell.appendChild(name);
120
+ const meta = doc.createElement('div');
121
+ Object.assign(meta.style, META_STYLE);
122
+ meta.textContent = [card.baseModel, card.versionName].filter(Boolean).join(' · ');
123
+ cell.appendChild(meta);
124
+ cell.addEventListener('click', () => selectCard(card));
125
+ grid.appendChild(cell);
126
+ }
127
+ };
128
+ const setStatus = (text) => {
129
+ if (statusEl)
130
+ statusEl.textContent = text;
131
+ };
132
+ const applyResult = (res) => {
133
+ if (res.kind === 'ok') {
134
+ cards = filterCardsByFamily(res.page.cards, opts.baseModelGroup);
135
+ setStatus(cards.length > 0
136
+ ? `${cards.length} ${opts.type === 'LORA' ? 'LoRAs' : 'checkpoints'}`
137
+ : 'No matches');
138
+ }
139
+ else if (res.kind === 'empty') {
140
+ cards = [];
141
+ setStatus('No results');
142
+ }
143
+ else {
144
+ cards = [];
145
+ setStatus(`Catalog error: ${res.message}`);
146
+ }
147
+ renderCards();
148
+ };
149
+ let reqId = 0;
150
+ const load = (query, firstLoad) => {
151
+ const id = ++reqId;
152
+ setStatus('Loading…');
153
+ void fetchCatalog({ types: opts.type, query }, {
154
+ fetch: opts.fetchImpl,
155
+ baseUrl: opts.baseUrl,
156
+ token: opts.token ?? undefined,
157
+ anonSfwOnly: opts.anonSfwOnly,
158
+ }).then((res) => {
159
+ if (id !== reqId || resolved)
160
+ return;
161
+ applyResult(res);
162
+ if (firstLoad)
163
+ opts.onReady?.(handle);
164
+ });
165
+ };
166
+ // --- Build the DOM (when a document exists). ---
167
+ if (doc) {
168
+ root = doc.createElement('div');
169
+ root.setAttribute('data-live-picker-overlay', opts.type);
170
+ Object.assign(root.style, BACKDROP_STYLE);
171
+ // Backdrop click = dismiss.
172
+ root.addEventListener('click', (e) => {
173
+ if (e.target === root)
174
+ resolve(null);
175
+ });
176
+ const modal = doc.createElement('div');
177
+ Object.assign(modal.style, MODAL_STYLE);
178
+ modal.addEventListener('click', (e) => e.stopPropagation());
179
+ // Header: title + close.
180
+ const header = doc.createElement('div');
181
+ Object.assign(header.style, HEADER_STYLE);
182
+ const title = doc.createElement('div');
183
+ Object.assign(title.style, TITLE_STYLE);
184
+ title.textContent =
185
+ opts.type === 'LORA' ? 'Pick a LoRA (dev:live)' : 'Pick a checkpoint (dev:live)';
186
+ const closeBtn = doc.createElement('button');
187
+ closeBtn.type = 'button';
188
+ closeBtn.setAttribute('aria-label', 'Close picker');
189
+ closeBtn.textContent = '✕';
190
+ Object.assign(closeBtn.style, CLOSE_STYLE);
191
+ closeBtn.addEventListener('click', () => resolve(null));
192
+ header.appendChild(title);
193
+ header.appendChild(closeBtn);
194
+ // Sub-line: discovery-only money-safety note + family hint.
195
+ const sub = doc.createElement('div');
196
+ Object.assign(sub.style, SUB_STYLE);
197
+ const familyNote = opts.baseModelGroup ? ` · family≈${opts.baseModelGroup}` : '';
198
+ sub.textContent = `Discovery only — re-priced & re-validated at submit${familyNote}`;
199
+ // Search.
200
+ searchEl = doc.createElement('input');
201
+ searchEl.type = 'search';
202
+ searchEl.placeholder =
203
+ opts.type === 'LORA' ? 'Search LoRAs…' : 'Search checkpoints…';
204
+ searchEl.setAttribute('aria-label', 'Search the catalog');
205
+ Object.assign(searchEl.style, SEARCH_STYLE);
206
+ let debounce;
207
+ searchEl.addEventListener('input', () => {
208
+ if (debounce)
209
+ clearTimeout(debounce);
210
+ const q = searchEl?.value ?? '';
211
+ debounce = setTimeout(() => load(q, false), 300);
212
+ });
213
+ // Status line.
214
+ statusEl = doc.createElement('div');
215
+ Object.assign(statusEl.style, STATUS_STYLE);
216
+ // Grid.
217
+ grid = doc.createElement('div');
218
+ Object.assign(grid.style, GRID_STYLE);
219
+ modal.appendChild(header);
220
+ modal.appendChild(sub);
221
+ modal.appendChild(searchEl);
222
+ modal.appendChild(statusEl);
223
+ modal.appendChild(grid);
224
+ root.appendChild(modal);
225
+ // Escape = dismiss.
226
+ root.addEventListener('keydown', (e) => {
227
+ if (e.key === 'Escape')
228
+ resolve(null);
229
+ });
230
+ (doc.body ?? doc.documentElement).appendChild(root);
231
+ }
232
+ // Kick off the initial popular load (fires onReady on completion).
233
+ load('', true);
234
+ return handle;
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Styles — minimal, dark, tasteful dev chrome. Inline so the package ships no
238
+ // CSS file and the overlay needs no stylesheet injection.
239
+ // ---------------------------------------------------------------------------
240
+ const BACKDROP_STYLE = {
241
+ position: 'fixed',
242
+ inset: '0',
243
+ zIndex: String(Z_INDEX),
244
+ display: 'flex',
245
+ alignItems: 'center',
246
+ justifyContent: 'center',
247
+ background: 'rgba(8,10,13,0.72)',
248
+ backdropFilter: 'blur(2px)',
249
+ };
250
+ const MODAL_STYLE = {
251
+ width: 'min(880px, 94vw)',
252
+ maxHeight: '86vh',
253
+ display: 'flex',
254
+ flexDirection: 'column',
255
+ background: '#15181d',
256
+ color: '#e6e9ee',
257
+ border: '1px solid rgba(255,255,255,0.08)',
258
+ borderRadius: '10px',
259
+ boxShadow: '0 12px 48px rgba(0,0,0,0.5)',
260
+ fontFamily: 'ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, sans-serif',
261
+ padding: '14px 16px 16px',
262
+ };
263
+ const HEADER_STYLE = {
264
+ display: 'flex',
265
+ alignItems: 'center',
266
+ justifyContent: 'space-between',
267
+ };
268
+ const TITLE_STYLE = {
269
+ fontSize: '15px',
270
+ fontWeight: '600',
271
+ };
272
+ const CLOSE_STYLE = {
273
+ background: 'transparent',
274
+ border: 'none',
275
+ color: '#9aa0aa',
276
+ fontSize: '16px',
277
+ cursor: 'pointer',
278
+ lineHeight: '1',
279
+ padding: '4px 6px',
280
+ };
281
+ const SUB_STYLE = {
282
+ marginTop: '2px',
283
+ fontSize: '11px',
284
+ color: '#7c828c',
285
+ };
286
+ const SEARCH_STYLE = {
287
+ marginTop: '10px',
288
+ width: '100%',
289
+ boxSizing: 'border-box',
290
+ padding: '8px 10px',
291
+ background: '#0e1116',
292
+ border: '1px solid rgba(255,255,255,0.10)',
293
+ borderRadius: '6px',
294
+ color: '#e6e9ee',
295
+ fontSize: '13px',
296
+ };
297
+ const STATUS_STYLE = {
298
+ marginTop: '8px',
299
+ fontSize: '11px',
300
+ color: '#9aa0aa',
301
+ minHeight: '14px',
302
+ };
303
+ const GRID_STYLE = {
304
+ marginTop: '8px',
305
+ overflow: 'auto',
306
+ display: 'grid',
307
+ gridTemplateColumns: 'repeat(auto-fill, minmax(150px, 1fr))',
308
+ gap: '10px',
309
+ paddingRight: '4px',
310
+ };
311
+ const CARD_STYLE = {
312
+ display: 'flex',
313
+ flexDirection: 'column',
314
+ textAlign: 'left',
315
+ background: '#0e1116',
316
+ border: '1px solid rgba(255,255,255,0.08)',
317
+ borderRadius: '8px',
318
+ padding: '0',
319
+ cursor: 'pointer',
320
+ color: '#e6e9ee',
321
+ overflow: 'hidden',
322
+ };
323
+ const THUMB_STYLE = {
324
+ width: '100%',
325
+ aspectRatio: '1 / 1',
326
+ background: '#1c2128 center/cover no-repeat',
327
+ };
328
+ const NAME_STYLE = {
329
+ padding: '6px 8px 0',
330
+ fontSize: '12px',
331
+ fontWeight: '600',
332
+ whiteSpace: 'nowrap',
333
+ overflow: 'hidden',
334
+ textOverflow: 'ellipsis',
335
+ };
336
+ const META_STYLE = {
337
+ padding: '2px 8px 8px',
338
+ fontSize: '10px',
339
+ color: '#8b919b',
340
+ whiteSpace: 'nowrap',
341
+ overflow: 'hidden',
342
+ textOverflow: 'ellipsis',
343
+ };
344
+ //# sourceMappingURL=pickerOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickerOverlay.js","sourceRoot":"","sources":["../../src/internal/pickerOverlay.ts"],"names":[],"mappings":"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"}
package/dist/testing.d.ts CHANGED
@@ -18,6 +18,8 @@ import { type MockHostOptions } from './internal/mockHost.js';
18
18
  export { __resetTransport as resetTransport };
19
19
  export { createMockHost, readMockHostUrlOptions, type MockHost, type MockHostOptions, type MockHostFailMode, type MockHostScenarioPatch, type MockGenerationScenario, type MockBuzzScenario, type MockBuzzHandle, type MockStorageScenario, type CostSpec, type ImageSpec, type CannedPick, } from './internal/mockHost.js';
20
20
  export { createLiveHost, decodeBlockTokenPayload, type LiveHostOptions, } from './internal/liveHost.js';
21
+ export { buildCatalogUrl, fetchCatalog, modelToCard, responseToPage, edgeThumb, cardToCheckpoint, cardToResource, filterCardsByFamily, CATALOG_API_BASE, CATALOG_API_BASE_BLOCKS, DEFAULT_LIMIT, type CatalogQuery, type CatalogCard, type CatalogPage, type CatalogResult, type CatalogModelType, } from './internal/catalog.js';
22
+ export { openPickerOverlay, type PickerOverlayHandle, type PickerSelection, type OpenPickerOptions, } from './internal/pickerOverlay.js';
21
23
  /**
22
24
  * Builds a `MessageEvent` that mimics a parent-frame postMessage so tests can
23
25
  * exercise `IframeTransport.handleMessage` without a real cross-frame setup.
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,2CA0Dd;AAED,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,gBAAU,CAAC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAE7E;AAOD;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,eAAsB,EACtB,OAAc,EACd,GAAG,OAAO,EACX,EAAE,YAAY,2CAkEd;AAED,+FAA+F;AAC/F,eAAO,MAAM,gBAAgB,gBAAU,CAAC"}
package/dist/testing.js CHANGED
@@ -19,6 +19,8 @@ import { createMockHost, readMockHostUrlOptions, } from './internal/mockHost.js'
19
19
  export { __resetTransport as resetTransport };
20
20
  export { createMockHost, readMockHostUrlOptions, } from './internal/mockHost.js';
21
21
  export { createLiveHost, decodeBlockTokenPayload, } from './internal/liveHost.js';
22
+ export { buildCatalogUrl, fetchCatalog, modelToCard, responseToPage, edgeThumb, cardToCheckpoint, cardToResource, filterCardsByFamily, CATALOG_API_BASE, CATALOG_API_BASE_BLOCKS, DEFAULT_LIMIT, } from './internal/catalog.js';
23
+ export { openPickerOverlay, } from './internal/pickerOverlay.js';
22
24
  /**
23
25
  * Builds a `MessageEvent` that mimics a parent-frame postMessage so tests can
24
26
  * exercise `IframeTransport.handleMessage` without a real cross-frame setup.
@@ -77,7 +79,7 @@ export function Harness({ children, applyUrlToggles = true, showLog = true, ...o
77
79
  // pointerEvents:none on the wrapper so the badge's bounding box can't
78
80
  // steal clicks from content beneath it; re-enabled on the interactive
79
81
  // bits (summary toggles the log; pre is scrollable/selectable).
80
- _jsxs("details", { style: harnessLogStyle, children: [_jsxs("summary", { style: { cursor: 'pointer', pointerEvents: 'auto' }, children: ["DEV HARNESS \u00B7 viewer=", anon ? 'anon' : 'dev-viewer', " \u00B7 consent=", consent, " \u00B7 theme=", theme, " \u00B7 outbound:", outbound.length] }), _jsx("pre", { style: { margin: 0, maxHeight: 200, overflow: 'auto', pointerEvents: 'auto' }, children: outbound.length === 0
82
+ _jsxs("details", { style: harnessLogStyle, children: [_jsxs("summary", { style: harnessSummaryStyle, children: [_jsx("span", { style: { color: '#5ec8a0' }, children: "$" }), ' ', _jsx("span", { style: { color: '#9aa0aa' }, children: "DEV HARNESS" }), ' ', _jsx("span", { style: { color: '#5b626d' }, children: "\u00B7" }), " viewer=", _jsx("span", { style: { color: '#7fd9ff' }, children: anon ? 'anon' : 'dev-viewer' }), ' ', _jsx("span", { style: { color: '#5b626d' }, children: "\u00B7" }), " consent=", _jsx("span", { style: { color: '#7fd9ff' }, children: consent }), ' ', _jsx("span", { style: { color: '#5b626d' }, children: "\u00B7" }), " theme=", _jsx("span", { style: { color: '#7fd9ff' }, children: theme }), ' ', _jsx("span", { style: { color: '#5b626d' }, children: "\u00B7" }), " outbound:", _jsx("span", { style: { color: '#e2c08d' }, children: outbound.length })] }), _jsx("pre", { style: harnessPreStyle, children: outbound.length === 0
81
83
  ? '// no outbound messages yet'
82
84
  : outbound
83
85
  .map((m, i) => `${i + 1}. ${m.type} ${JSON.stringify(m.payload ?? {})}`)
@@ -85,6 +87,10 @@ export function Harness({ children, applyUrlToggles = true, showLog = true, ...o
85
87
  }
86
88
  /** Alias of {@link Harness} — same component, clearer name when used as a context provider. */
87
89
  export const MockHostProvider = Harness;
90
+ // Minimal console / terminal aesthetic: dark terminal slab, monospace, a
91
+ // subtle accent top border, dim chrome text with brighter accents for the
92
+ // live readout values. Compact + unobtrusive — shared chrome rendered by
93
+ // every block app's `dev:harness`, so kept neutral, not loud.
88
94
  const harnessLogStyle = {
89
95
  position: 'fixed',
90
96
  bottom: 8,
@@ -92,11 +98,32 @@ const harnessLogStyle = {
92
98
  zIndex: 9999,
93
99
  pointerEvents: 'none',
94
100
  maxWidth: 520,
95
- background: 'rgba(17,17,17,0.92)',
96
- color: '#7fc',
101
+ background: 'rgba(13,15,18,0.94)',
102
+ color: '#c8ccd2',
97
103
  fontSize: 11,
98
- fontFamily: 'ui-monospace, SFMono-Regular, monospace',
104
+ lineHeight: 1.5,
105
+ letterSpacing: '0.01em',
106
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',
99
107
  padding: '6px 10px',
100
108
  borderRadius: 6,
109
+ border: '1px solid rgba(255,255,255,0.06)',
110
+ borderTop: '1px solid rgba(94,200,160,0.35)',
111
+ boxShadow: '0 2px 10px rgba(0,0,0,0.35)',
112
+ };
113
+ const harnessSummaryStyle = {
114
+ cursor: 'pointer',
115
+ pointerEvents: 'auto',
116
+ color: '#c8ccd2',
117
+ listStyle: 'none',
118
+ userSelect: 'none',
119
+ };
120
+ const harnessPreStyle = {
121
+ margin: '6px 0 0',
122
+ paddingTop: 6,
123
+ borderTop: '1px solid rgba(255,255,255,0.06)',
124
+ maxHeight: 200,
125
+ overflow: 'auto',
126
+ color: '#9aa0aa',
127
+ pointerEvents: 'auto',
101
128
  };
102
129
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@civitai/blocks-react",
3
- "version": "0.12.3",
3
+ "version": "0.13.0",
4
4
  "description": "React hooks and iframe transport for Civitai App Blocks. Pairs with @civitai/app-sdk/blocks.",
5
5
  "license": "MIT",
6
6
  "type": "module",