@nowline/preview-shell 0.4.2 → 0.5.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/dist/styles.js CHANGED
@@ -3,14 +3,20 @@
3
3
  // without forking the package. Sensible defaults baked in so the
4
4
  // viewport works out of the box on a blank page.
5
5
  //
6
- // VS Code consumers paste `VSCODE_THEME_BRIDGE_CSS` (below) into their
7
- // webview to map `--nl-preview-*` to the matching `--vscode-*` tokens
8
- // — that keeps the viewport in lock-step with the user's workbench
9
- // theme without having to keep two sets of variables in sync.
6
+ // Chrome (toolbar, menus, minimap) uses `--nl-chrome-*` tokens driven
7
+ // exclusively by the `data-nl-mode="light|dark"` attribute on the root
8
+ // element — these intentionally do NOT inherit VS Code workbench colors
9
+ // so the toolbar stays readable regardless of the active editor theme.
10
+ //
11
+ // VS Code consumers paste `VSCODE_THEME_BRIDGE_CSS` into their webview
12
+ // to map viewport/canvas `--nl-preview-*` tokens to `--vscode-*`
13
+ // variables. This bridge no longer touches chrome tokens.
10
14
  /**
11
- * Bridge CSS for VS Code webview consumers. Maps every `--nl-preview-*`
12
- * token to the matching `--vscode-*` variable so the viewport renders
13
- * in the active workbench colour theme automatically.
15
+ * Bridge CSS for VS Code webview consumers. Maps viewport and
16
+ * diagnostic `--nl-preview-*` tokens to `--vscode-*` variables.
17
+ * Does NOT map chrome (toolbar/menu) tokens — those are driven by
18
+ * `data-nl-mode` so the toolbar palette is independent of the
19
+ * workbench color theme.
14
20
  *
15
21
  * Inject as a `<style>` block after the preview-shell stylesheet.
16
22
  */
@@ -22,9 +28,6 @@ export const VSCODE_THEME_BRIDGE_CSS = `
22
28
  --nl-preview-font-size: var(--vscode-font-size, 13px);
23
29
  --nl-preview-widget-bg: var(--vscode-editorWidget-background, rgba(40,40,40,0.9));
24
30
  --nl-preview-widget-border: var(--vscode-editorWidget-border, rgba(255,255,255,0.1));
25
- --nl-preview-toolbar-hover: var(--vscode-toolbar-hoverBackground, rgba(255,255,255,0.08));
26
- --nl-preview-toolbar-active: var(--vscode-toolbar-activeBackground, rgba(255,255,255,0.12));
27
- --nl-preview-list-hover: var(--vscode-list-hoverBackground, rgba(255,255,255,0.04));
28
31
  --nl-preview-description: var(--vscode-descriptionForeground, #999);
29
32
  --nl-preview-error: var(--vscode-editorError-foreground, #f48771);
30
33
  --nl-preview-warning: var(--vscode-editorWarning-foreground, #cca700);
@@ -36,9 +39,8 @@ export const VSCODE_THEME_BRIDGE_CSS = `
36
39
  `;
37
40
  /**
38
41
  * Default stylesheet for the viewport. Provides reasonable defaults
39
- * for every `--nl-preview-*` token so the viewport works on a blank
40
- * page; consumers override by re-declaring the variables on a
41
- * higher-specificity selector.
42
+ * for every `--nl-preview-*` token and both dark/light `--nl-chrome-*`
43
+ * palettes so the viewport works on a blank page without any bridge CSS.
42
44
  */
43
45
  export const PREVIEW_SHELL_CSS = `
44
46
  :root {
@@ -49,9 +51,6 @@ export const PREVIEW_SHELL_CSS = `
49
51
  --nl-preview-font-size: 13px;
50
52
  --nl-preview-widget-bg: rgba(40,40,40,0.9);
51
53
  --nl-preview-widget-border: rgba(255,255,255,0.1);
52
- --nl-preview-toolbar-hover: rgba(255,255,255,0.08);
53
- --nl-preview-toolbar-active: rgba(255,255,255,0.12);
54
- --nl-preview-list-hover: rgba(255,255,255,0.04);
55
54
  --nl-preview-description: #999;
56
55
  --nl-preview-error: #f48771;
57
56
  --nl-preview-warning: #cca700;
@@ -68,66 +67,233 @@ export const PREVIEW_SHELL_CSS = `
68
67
  font-family: var(--nl-preview-font-family);
69
68
  font-size: var(--nl-preview-font-size);
70
69
  overflow: hidden;
70
+ /* Shared positioning gutter for all floating elements */
71
+ --nl-preview-gutter: 8px;
72
+ /* Chrome palette — dark default */
73
+ --nl-chrome-bg: rgba(30, 30, 30, 0.93);
74
+ --nl-chrome-border: rgba(255, 255, 255, 0.11);
75
+ --nl-chrome-fg: #d4d4d4;
76
+ --nl-chrome-hover: rgba(255, 255, 255, 0.08);
77
+ --nl-chrome-active: rgba(255, 255, 255, 0.13);
78
+ --nl-chrome-muted: #888;
79
+ --nl-chrome-chip-bg: rgba(255, 255, 255, 0.07);
80
+ --nl-chrome-shadow: rgba(0, 0, 0, 0.32);
81
+ }
82
+ /* Chrome palette — light mode override (driven by data-nl-mode, never by workbench) */
83
+ .nl-preview-root[data-nl-mode="light"] {
84
+ --nl-chrome-bg: rgba(248, 248, 248, 0.96);
85
+ --nl-chrome-border: rgba(0, 0, 0, 0.13);
86
+ --nl-chrome-fg: #3c3c3c;
87
+ --nl-chrome-hover: rgba(0, 0, 0, 0.06);
88
+ --nl-chrome-active: rgba(0, 0, 0, 0.10);
89
+ --nl-chrome-muted: #717171;
90
+ --nl-chrome-chip-bg: rgba(0, 0, 0, 0.06);
91
+ --nl-chrome-shadow: rgba(0, 0, 0, 0.14);
71
92
  }
72
93
  .nl-preview-root .viewport {
73
94
  position: absolute; inset: 0;
74
95
  overflow: auto;
96
+ display: flex;
75
97
  }
76
98
  .nl-preview-root .canvas {
99
+ /* flex-shrink:0 + margin:auto: centers the diagram when it fits,
100
+ allows overflow scroll when it's larger than the viewport */
101
+ flex-shrink: 0;
102
+ margin: auto;
77
103
  transform-origin: 0 0;
78
104
  will-change: transform;
79
105
  }
80
106
  .nl-preview-root .canvas svg { display: block; max-width: none; height: auto; }
81
107
  .nl-preview-root .canvas.dimmed { opacity: 0.25; pointer-events: none; }
82
108
 
83
- /* === Toolbar (top-right) === */
109
+ /* === Toolbar (floating, repositionable) === */
84
110
  .nl-preview-root .chrome {
85
- position: absolute; top: 8px; right: 8px;
111
+ position: absolute;
112
+ top: var(--nl-preview-gutter);
113
+ right: var(--nl-preview-gutter);
86
114
  display: flex; gap: 4px;
115
+ /* Keep the toolbar at its natural width so a narrowing viewport
116
+ shifts it left (handled in JS) instead of squishing the row. */
117
+ width: max-content;
87
118
  transition: opacity 200ms ease;
88
119
  z-index: 10;
89
120
  }
90
- .nl-preview-root .chrome.faded { opacity: 0.25; }
91
- .nl-preview-root .chrome:hover { opacity: 1; }
121
+ .nl-preview-root .chrome.faded { opacity: 0.2; pointer-events: none; }
122
+ .nl-preview-root .chrome:hover { opacity: 1; pointer-events: auto; }
92
123
  .nl-preview-root .toolbar {
93
124
  display: flex; align-items: center; gap: 2px;
125
+ flex-wrap: nowrap;
126
+ white-space: nowrap;
94
127
  padding: 2px;
95
- background: var(--nl-preview-widget-bg);
96
- border: 1px solid var(--nl-preview-widget-border);
128
+ background: var(--nl-chrome-bg);
129
+ border: 1px solid var(--nl-chrome-border);
97
130
  border-radius: 6px;
98
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
131
+ box-shadow: 0 2px 8px var(--nl-chrome-shadow);
132
+ color: var(--nl-chrome-fg);
133
+ user-select: none;
134
+ }
135
+
136
+ /* Collapsed puck: hide everything but the drag grip + restore arrow,
137
+ and dim it so it stays out of the way until hovered. */
138
+ .nl-preview-root .restore-btn { display: none; }
139
+ .nl-preview-root .chrome.collapsed .toolbar > :not(.toolbar-handle):not(.restore-btn) {
140
+ display: none;
99
141
  }
142
+ .nl-preview-root .chrome.collapsed .restore-btn { display: inline-flex; }
143
+ .nl-preview-root .chrome.collapsed .toolbar { opacity: 0.55; }
144
+ .nl-preview-root .chrome.collapsed:hover .toolbar { opacity: 1; }
100
145
  .nl-preview-root .toolbar .sep {
101
- width: 1px; height: 20px;
102
- background: var(--nl-preview-widget-border);
103
- margin: 0 4px;
146
+ width: 1px; height: 18px;
147
+ background: var(--nl-chrome-border);
148
+ margin: 0 3px;
149
+ flex-shrink: 0;
104
150
  }
151
+ .nl-preview-root .toolbar-handle {
152
+ display: flex; align-items: center; justify-content: center;
153
+ padding: 4px 5px;
154
+ cursor: grab;
155
+ color: var(--nl-chrome-muted);
156
+ font-size: 13px;
157
+ line-height: 1;
158
+ opacity: 0.7;
159
+ flex-shrink: 0;
160
+ touch-action: none;
161
+ }
162
+ .nl-preview-root .toolbar-handle:hover { opacity: 1; }
163
+ .nl-preview-root .chrome.dragging .toolbar-handle { cursor: grabbing; }
105
164
  .nl-preview-root .btn {
106
165
  appearance: none;
107
166
  background: transparent;
108
167
  color: inherit;
109
168
  border: 0;
110
- padding: 4px 8px;
169
+ padding: 3px 7px;
111
170
  border-radius: 4px;
112
171
  font-family: inherit;
113
172
  font-size: inherit;
114
173
  cursor: pointer;
115
174
  line-height: 1;
116
- min-width: 28px;
175
+ min-width: 20px;
176
+ flex-shrink: 0;
177
+ /* Suppress the sticky focus ring left behind after a mouse click;
178
+ keyboard focus is restored via :focus-visible below. */
179
+ outline: none;
180
+ }
181
+ .nl-preview-root .btn:hover { background: var(--nl-chrome-hover); }
182
+ .nl-preview-root .btn:active { background: var(--nl-chrome-active); }
183
+ .nl-preview-root .btn:focus-visible {
184
+ outline: 1px solid var(--nl-preview-focus);
185
+ outline-offset: -1px;
186
+ }
187
+ .nl-preview-root .btn.zoom-label {
188
+ min-width: 44px;
189
+ font-variant-numeric: tabular-nums;
117
190
  }
118
- .nl-preview-root .btn:hover { background: var(--nl-preview-toolbar-hover); }
119
- .nl-preview-root .btn:active { background: var(--nl-preview-toolbar-active); }
120
- .nl-preview-root .btn.zoom-label { min-width: 48px; font-variant-numeric: tabular-nums; }
121
- .nl-preview-root .btn.glyph { font-size: 16px; line-height: 1; padding: 4px 6px; }
191
+ .nl-preview-root .btn.glyph { font-size: 15px; line-height: 1; padding: 3px 5px; }
122
192
  .nl-preview-root .dropdown { position: relative; }
193
+
194
+ /* === More-menu panel === */
195
+ .nl-preview-root .more-menu {
196
+ position: absolute; top: calc(100% + 4px); right: 0;
197
+ padding: 5px;
198
+ min-width: 210px;
199
+ background: var(--nl-chrome-bg);
200
+ border: 1px solid var(--nl-chrome-border);
201
+ border-radius: 6px;
202
+ box-shadow: 0 4px 14px var(--nl-chrome-shadow);
203
+ z-index: 20;
204
+ color: var(--nl-chrome-fg);
205
+ }
206
+ /* Opens right-aligned by default; flipped to left-aligned in JS when the
207
+ toolbar sits near the left edge and the menu would clip the gutter. */
208
+ .nl-preview-root .more-menu.flip { right: auto; left: 0; }
209
+ .nl-preview-root .more-row {
210
+ display: flex; align-items: center; justify-content: space-between;
211
+ padding: 2px 4px;
212
+ gap: 8px;
213
+ }
214
+ .nl-preview-root .more-row.action-row {
215
+ gap: 6px;
216
+ justify-content: stretch;
217
+ padding-top: 6px;
218
+ padding-bottom: 2px;
219
+ }
220
+ /* Copy / Export each take half the row and center their label+icon. */
221
+ .nl-preview-root .action-row .btn {
222
+ flex: 1 1 0;
223
+ display: inline-flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ gap: 5px;
227
+ }
228
+ .nl-preview-root .action-ico { display: inline-flex; line-height: 0; }
229
+ .nl-preview-root .action-ico svg { display: block; }
230
+ .nl-preview-root .more-label {
231
+ font-size: 0.88em;
232
+ color: var(--nl-chrome-muted);
233
+ white-space: nowrap;
234
+ flex-shrink: 0;
235
+ }
236
+ .nl-preview-root .more-divider {
237
+ height: 1px;
238
+ margin: 4px 0;
239
+ background: var(--nl-chrome-border);
240
+ }
241
+
242
+ /* === Sub-menus inside more-menu === */
243
+ .nl-preview-root .more-sub-toggle {
244
+ font-size: 0.88em;
245
+ padding: 3px 6px;
246
+ }
247
+ .nl-preview-root .more-sub-menu {
248
+ position: absolute; top: calc(100% + 2px); left: 0;
249
+ list-style: none; padding: 4px;
250
+ /* Size to the widest option (plus the checkmark gutter) rather than
251
+ a fixed min-width, so there's no dead whitespace to the right. */
252
+ width: max-content; min-width: 0; max-width: 280px;
253
+ background: var(--nl-chrome-bg);
254
+ border: 1px solid var(--nl-chrome-border);
255
+ border-radius: 6px;
256
+ box-shadow: 0 4px 12px var(--nl-chrome-shadow);
257
+ z-index: 25;
258
+ color: var(--nl-chrome-fg);
259
+ }
260
+ /* Flyout flipped to open toward the left (set in JS when the default
261
+ right-ward opening would overflow the viewport gutter). */
262
+ .nl-preview-root .more-sub-menu.flip { left: auto; right: 0; }
263
+ .nl-preview-root .more-sub-menu li { padding: 0; }
264
+ .nl-preview-root .more-sub-menu .btn {
265
+ display: block; width: 100%; text-align: left;
266
+ /* Generous left gutter keeps the checkmark off the label text. */
267
+ padding: 5px 12px 5px 26px;
268
+ position: relative;
269
+ font-size: 0.88em;
270
+ }
271
+ .nl-preview-root .more-sub-menu .btn[data-active="true"]::before {
272
+ content: '\\2713';
273
+ position: absolute;
274
+ left: 9px;
275
+ }
276
+
277
+ /* === Code-style chip for real theme/format tokens === */
278
+ .nl-preview-root .code-chip {
279
+ font-family: var(--nl-preview-mono);
280
+ font-size: 0.9em;
281
+ background: var(--nl-chrome-chip-bg);
282
+ border-radius: 3px;
283
+ padding: 1px 4px;
284
+ font-style: normal;
285
+ }
286
+
287
+ /* === Diagnostic overlay menu (for old .menu usage in diagnostics) === */
123
288
  .nl-preview-root .menu {
124
289
  position: absolute; top: 100%; right: 0; margin-top: 4px;
125
290
  list-style: none; padding: 4px; min-width: 140px;
126
- background: var(--nl-preview-widget-bg);
127
- border: 1px solid var(--nl-preview-widget-border);
291
+ background: var(--nl-chrome-bg);
292
+ border: 1px solid var(--nl-chrome-border);
128
293
  border-radius: 6px;
129
- box-shadow: 0 4px 12px rgba(0,0,0,0.3);
294
+ box-shadow: 0 4px 12px var(--nl-chrome-shadow);
130
295
  z-index: 20;
296
+ color: var(--nl-chrome-fg);
131
297
  }
132
298
  .nl-preview-root .menu li { padding: 0; }
133
299
  .nl-preview-root .menu .btn {
@@ -139,35 +305,30 @@ export const PREVIEW_SHELL_CSS = `
139
305
  font-size: 0.85em;
140
306
  text-transform: uppercase;
141
307
  letter-spacing: 0.05em;
142
- color: var(--nl-preview-description);
308
+ color: var(--nl-chrome-muted);
143
309
  }
144
310
  .nl-preview-root .menu li.menu-divider {
145
311
  height: 1px;
146
312
  margin: 4px 6px;
147
- background: var(--nl-preview-widget-border);
148
- }
149
- .nl-preview-root .menu .btn.view-opt {
150
- padding-left: 22px;
151
- position: relative;
152
- }
153
- .nl-preview-root .menu .btn.view-opt[data-active="true"]::before {
154
- content: '\\2713';
155
- position: absolute;
156
- left: 8px;
313
+ background: var(--nl-chrome-border);
157
314
  }
158
315
 
159
- /* === Minimap === */
316
+ /* === Minimap (subordinate floating widget) === */
160
317
  .nl-preview-root .minimap {
161
- position: absolute; bottom: 12px; right: 12px;
162
- width: 160px; max-height: 120px;
163
- background: var(--nl-preview-widget-bg);
164
- border: 1px solid var(--nl-preview-widget-border);
165
- border-radius: 4px;
318
+ position: absolute;
319
+ bottom: var(--nl-preview-gutter);
320
+ right: var(--nl-preview-gutter);
321
+ width: 120px; max-height: 90px;
322
+ background: var(--nl-chrome-bg);
323
+ border: 1px solid var(--nl-chrome-border);
324
+ border-radius: 5px;
166
325
  overflow: hidden;
167
- box-shadow: 0 2px 8px rgba(0,0,0,0.2);
326
+ box-shadow: 0 2px 6px var(--nl-chrome-shadow);
168
327
  z-index: 8;
328
+ transition: opacity 200ms ease;
169
329
  }
170
330
  .nl-preview-root .minimap.hidden { display: none; }
331
+ .nl-preview-root .minimap.faded { opacity: 0.2; pointer-events: none; }
171
332
  .nl-preview-root .minimap-canvas {
172
333
  display: block;
173
334
  cursor: pointer;
@@ -186,13 +347,73 @@ export const PREVIEW_SHELL_CSS = `
186
347
  pointer-events: none;
187
348
  box-sizing: border-box;
188
349
  }
189
- .nl-preview-root .minimap-close {
190
- position: absolute; top: 2px; right: 2px;
191
- width: 18px; height: 18px; padding: 0;
192
- border-radius: 4px;
193
- line-height: 1;
194
- font-size: 12px;
195
- z-index: 1;
350
+
351
+ /* === Calendar picker === */
352
+ .nl-preview-root .now-picker {
353
+ position: absolute; top: calc(100% + 2px); left: 0;
354
+ padding: 8px;
355
+ min-width: 200px;
356
+ background: var(--nl-chrome-bg);
357
+ border: 1px solid var(--nl-chrome-border);
358
+ border-radius: 6px;
359
+ box-shadow: 0 4px 14px var(--nl-chrome-shadow);
360
+ z-index: 26;
361
+ color: var(--nl-chrome-fg);
362
+ }
363
+ /* Calendar flips to open toward the left when opening rightward would
364
+ push it past the viewport's right gutter (see placeFlyout). */
365
+ .nl-preview-root .now-picker.flip { left: auto; right: 0; }
366
+ .nl-preview-root .cal-nav {
367
+ display: flex; align-items: center; justify-content: space-between;
368
+ margin-bottom: 6px;
369
+ }
370
+ .nl-preview-root .cal-heading {
371
+ font-size: 0.85em;
372
+ font-weight: 600;
373
+ }
374
+ .nl-preview-root .cal-nav-btn {
375
+ padding: 2px 6px;
376
+ min-width: unset;
377
+ font-size: 14px;
378
+ }
379
+ .nl-preview-root .cal-grid {
380
+ display: grid; grid-template-columns: repeat(7, 1fr);
381
+ gap: 1px;
382
+ margin-bottom: 6px;
383
+ }
384
+ .nl-preview-root .cal-dow {
385
+ text-align: center;
386
+ font-size: 0.75em;
387
+ color: var(--nl-chrome-muted);
388
+ padding: 2px 0;
389
+ }
390
+ .nl-preview-root .cal-empty {
391
+ /* placeholder for days before the 1st of the month */
392
+ }
393
+ .nl-preview-root .cal-day {
394
+ padding: 3px 2px;
395
+ min-width: unset;
396
+ font-size: 0.8em;
397
+ text-align: center;
398
+ border-radius: 3px;
399
+ }
400
+ .nl-preview-root .cal-day.is-today { font-weight: 700; }
401
+ .nl-preview-root .cal-day.is-selected {
402
+ background: var(--nl-chrome-hover);
403
+ outline: 1px solid var(--nl-chrome-border);
404
+ }
405
+ .nl-preview-root .cal-footer {
406
+ display: flex; gap: 4px;
407
+ border-top: 1px solid var(--nl-chrome-border);
408
+ padding-top: 6px;
409
+ margin-top: 2px;
410
+ }
411
+ .nl-preview-root .cal-footer-btn {
412
+ flex: 1;
413
+ text-align: center;
414
+ font-size: 0.82em;
415
+ padding: 4px 6px;
416
+ min-width: unset;
196
417
  }
197
418
 
198
419
  /* === Diagnostics overlay === */
@@ -241,7 +462,7 @@ export const PREVIEW_SHELL_CSS = `
241
462
  border-bottom: 1px solid var(--nl-preview-widget-border);
242
463
  }
243
464
  .nl-preview-root .diag-table tr:hover {
244
- background: var(--nl-preview-list-hover);
465
+ background: rgba(255,255,255,0.04);
245
466
  }
246
467
  .nl-preview-root .diag-table td {
247
468
  padding: 6px 8px;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qEAAqE;AACrE,iEAAiE;AACjE,iDAAiD;AACjD,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,mEAAmE;AACnE,8DAA8D;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;CAmBtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwPhC,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qEAAqE;AACrE,iEAAiE;AACjE,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,wEAAwE;AACxE,uEAAuE;AACvE,EAAE;AACF,uEAAuE;AACvE,iEAAiE;AACjE,0DAA0D;AAE1D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;CAgBtC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmdhC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nowline/preview-shell",
3
- "version": "0.4.2",
3
+ "version": "0.5.1",
4
4
  "description": "Framework-agnostic preview viewport for Nowline SVGs: zoom, pan, fit, minimap, diagnostic table. Consumed by the VS Code extension's webview and any browser-side Nowline preview surface.",
5
5
  "license": "Apache-2.0",
6
6
  "engines": {
@@ -40,7 +40,7 @@
40
40
  "minimap"
41
41
  ],
42
42
  "dependencies": {
43
- "@nowline/browser": "0.4.2"
43
+ "@nowline/browser": "0.5.1"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^25.9.1",