@bendyline/docblocks-react 2.2.1 → 2.2.2

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.
@@ -7,7 +7,39 @@ type ThemePreference = 'auto' | 'light' | 'dark';
7
7
  declare const ACCENT_COLORS: readonly ["brown", "green", "blue", "purple", "maroon", "orange", "gray"];
8
8
  type AccentColor = (typeof ACCENT_COLORS)[number];
9
9
 
10
- type WriteCanvasPreferences = Required<WriteCanvasSettings>;
10
+ /**
11
+ * Stable ids for the Write-canvas font schemes offered in Settings. This list
12
+ * mirrors `DOCBLOCKS_WRITE_CANVAS_FONT_SCHEMES` in `@bendyline/docblocks/vscode`
13
+ * (the wire/persisted contract) and the `docblocks.writeCanvasFontScheme` enum
14
+ * in the VS Code `package.json`; a guard test keeps the three in sync.
15
+ */
16
+ type WriteCanvasFontScheme = 'theme' | 'serif-sans' | 'sans-sans' | 'serif-serif' | 'pt-serif' | 'hanken' | 'playfair-pt-serif' | 'hanken-lora' | 'dm-serif-dm-sans' | 'inter';
17
+ type WriteCanvasFontSchemeGroup = 'theme' | 'system' | 'curated';
18
+ interface WriteCanvasFontSchemeOption {
19
+ id: WriteCanvasFontScheme;
20
+ label: string;
21
+ group: WriteCanvasFontSchemeGroup;
22
+ /** CSS font-family for headings. Omitted for `'theme'` (inherit). */
23
+ headerFont?: string;
24
+ /** CSS font-family for body text. Omitted for `'theme'` (inherit). */
25
+ bodyFont?: string;
26
+ }
27
+ /**
28
+ * Curated Write-canvas font schemes, in picker order. A named scheme is an
29
+ * explicit user preference and overrides the active theme in Write mode through
30
+ * the DocBlocks host stylesheet. `'theme'` sets no fonts, i.e. inherits the
31
+ * active theme / host as before.
32
+ */
33
+ declare const WRITE_CANVAS_FONT_SCHEMES: readonly WriteCanvasFontSchemeOption[];
34
+ declare const DEFAULT_WRITE_CANVAS_FONT_SCHEME: WriteCanvasFontScheme;
35
+ /** Resolve a scheme id to the header/body CSS font-family strings (empty for `'theme'`). */
36
+ declare function resolveWriteCanvasFonts(scheme: WriteCanvasFontScheme): Pick<WriteCanvasSettings, 'headerFont' | 'bodyFont'>;
37
+ /** Persisted Write-canvas preferences. Stores the font scheme id, not resolved fonts. */
38
+ interface WriteCanvasPreferences {
39
+ textSize: number;
40
+ lineSpacing: number;
41
+ fontScheme: WriteCanvasFontScheme;
42
+ }
11
43
 
12
44
  interface SettingsDialogProps {
13
45
  title?: string;
@@ -33,4 +65,4 @@ interface WriteCanvasSettingsControlsProps {
33
65
  }
34
66
  declare function WriteCanvasSettingsControls({ value, onChange }: WriteCanvasSettingsControlsProps): react_jsx_runtime.JSX.Element;
35
67
 
36
- export { type AccentColor, AccentColorSettings, type AccentColorSettingsProps, SettingsDialog, type SettingsDialogProps, type ThemePreference, ThemeSettings, type ThemeSettingsProps, type WriteCanvasPreferences, WriteCanvasSettingsControls, type WriteCanvasSettingsControlsProps };
68
+ export { type AccentColor, AccentColorSettings, type AccentColorSettingsProps, DEFAULT_WRITE_CANVAS_FONT_SCHEME, SettingsDialog, type SettingsDialogProps, type ThemePreference, ThemeSettings, type ThemeSettingsProps, WRITE_CANVAS_FONT_SCHEMES, type WriteCanvasFontScheme, type WriteCanvasFontSchemeGroup, type WriteCanvasFontSchemeOption, type WriteCanvasPreferences, WriteCanvasSettingsControls, type WriteCanvasSettingsControlsProps, resolveWriteCanvasFonts };
@@ -1,13 +1,19 @@
1
1
  import {
2
2
  AccentColorSettings,
3
+ DEFAULT_WRITE_CANVAS_FONT_SCHEME,
3
4
  SettingsDialog,
4
5
  ThemeSettings,
5
- WriteCanvasSettingsControls
6
- } from "../chunk-3QSZY74C.js";
6
+ WRITE_CANVAS_FONT_SCHEMES,
7
+ WriteCanvasSettingsControls,
8
+ resolveWriteCanvasFonts
9
+ } from "../chunk-VRRL6VTD.js";
7
10
  import "../chunk-LG6HAWCK.js";
8
11
  export {
9
12
  AccentColorSettings,
13
+ DEFAULT_WRITE_CANVAS_FONT_SCHEME,
10
14
  SettingsDialog,
11
15
  ThemeSettings,
12
- WriteCanvasSettingsControls
16
+ WRITE_CANVAS_FONT_SCHEMES,
17
+ WriteCanvasSettingsControls,
18
+ resolveWriteCanvasFonts
13
19
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks-react",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "React components for DocBlocks — file explorer, workspace picker, and editor shell",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -30,7 +30,8 @@
30
30
  ],
31
31
  "files": [
32
32
  "dist",
33
- "src/styles"
33
+ "src/styles",
34
+ "THIRD_PARTY_NOTICES.txt"
34
35
  ],
35
36
  "exports": {
36
37
  ".": {
@@ -65,13 +66,13 @@
65
66
  "react-dom": "^18.0.0 || ^19.0.0"
66
67
  },
67
68
  "dependencies": {
68
- "@bendyline/docblocks": "2.2.1",
69
- "@bendyline/squisq": "2.3.3",
70
- "@bendyline/squisq-editor-react": "2.3.4",
71
- "@bendyline/squisq-formats": "2.3.3",
72
- "@bendyline/squisq-react": "2.3.3",
73
- "@bendyline/squisq-video": "2.2.3",
74
- "@bendyline/squisq-video-react": "2.2.3"
69
+ "@bendyline/docblocks": "2.2.2",
70
+ "@bendyline/squisq": "2.4.1",
71
+ "@bendyline/squisq-editor-react": "2.4.1",
72
+ "@bendyline/squisq-formats": "2.3.5",
73
+ "@bendyline/squisq-react": "2.4.1",
74
+ "@bendyline/squisq-video": "2.2.5",
75
+ "@bendyline/squisq-video-react": "2.2.5"
75
76
  },
76
77
  "devDependencies": {
77
78
  "@happy-dom/global-registrator": "20.9.0",
@@ -198,6 +198,136 @@
198
198
  gap: 2px;
199
199
  }
200
200
 
201
+ .db-pinned-documents {
202
+ display: flex;
203
+ flex-direction: column;
204
+ flex: 0 1 auto;
205
+ min-height: 0;
206
+ max-height: 38%;
207
+ overflow: hidden;
208
+ border-bottom: 1px solid var(--db-border-strong);
209
+ background: var(--db-bg-subtle);
210
+ }
211
+
212
+ .db-pinned-documents-title {
213
+ display: flex;
214
+ align-items: center;
215
+ gap: 6px;
216
+ margin: 0;
217
+ padding: 8px 10px 5px;
218
+ }
219
+
220
+ .db-pinned-documents-title i {
221
+ font-size: 10px;
222
+ }
223
+
224
+ .db-pinned-document-list {
225
+ min-height: 0;
226
+ overflow-y: auto;
227
+ padding: 0 0 4px;
228
+ scrollbar-color: var(--db-accent) var(--db-bg-subtle);
229
+ scrollbar-width: thin;
230
+ }
231
+
232
+ .db-pinned-document-row {
233
+ position: relative;
234
+ display: flex;
235
+ align-items: stretch;
236
+ }
237
+
238
+ .db-pinned-document {
239
+ display: flex;
240
+ align-items: center;
241
+ flex: 1;
242
+ gap: 7px;
243
+ min-width: 0;
244
+ padding: 6px 4px 6px 10px;
245
+ border: 0;
246
+ background: transparent;
247
+ color: var(--db-text);
248
+ font: inherit;
249
+ text-align: left;
250
+ cursor: pointer;
251
+ }
252
+
253
+ .db-pinned-document-row:hover,
254
+ .db-pinned-document-row:has(:focus-visible) {
255
+ background: var(--db-bg-hover);
256
+ }
257
+
258
+ .db-pinned-document:focus-visible {
259
+ outline: 2px solid var(--db-focus);
260
+ outline-offset: -2px;
261
+ }
262
+
263
+ .db-pinned-document-row--selected,
264
+ .db-pinned-document-row--selected:hover,
265
+ .db-pinned-document-row--selected:has(:focus-visible) {
266
+ --db-focus: #ffffff;
267
+ background: var(--db-bg-selected);
268
+ color: var(--db-text-on-selected);
269
+ }
270
+
271
+ .db-pinned-document-more {
272
+ display: flex;
273
+ align-items: center;
274
+ justify-content: center;
275
+ flex: 0 0 30px;
276
+ min-width: 30px;
277
+ border: 0;
278
+ background: transparent;
279
+ color: inherit;
280
+ cursor: pointer;
281
+ opacity: 0.72;
282
+ }
283
+
284
+ .db-pinned-document-more:hover,
285
+ .db-pinned-document-more--active {
286
+ opacity: 1;
287
+ }
288
+
289
+ .db-pinned-document-more:focus-visible {
290
+ outline: 2px solid var(--db-focus);
291
+ outline-offset: -2px;
292
+ }
293
+
294
+ .db-pinned-document-heading {
295
+ min-width: 0;
296
+ display: flex;
297
+ flex: 1;
298
+ align-items: baseline;
299
+ gap: 6px;
300
+ }
301
+
302
+ .db-pinned-document-name {
303
+ flex: 1;
304
+ min-width: 0;
305
+ overflow: hidden;
306
+ text-overflow: ellipsis;
307
+ white-space: nowrap;
308
+ }
309
+
310
+ .db-pinned-document-missing {
311
+ flex: 0 0 auto;
312
+ color: var(--db-danger);
313
+ font-size: 11px;
314
+ }
315
+
316
+ .db-pinned-document-row--selected .db-pinned-document-missing {
317
+ color: inherit;
318
+ opacity: 0.82;
319
+ }
320
+
321
+ .db-pinned-document-error {
322
+ position: absolute;
323
+ z-index: 1;
324
+ top: 100%;
325
+ right: 4px;
326
+ left: 4px;
327
+ margin: 0;
328
+ background: var(--db-bg);
329
+ }
330
+
201
331
  .db-explorer-btn {
202
332
  width: 24px;
203
333
  height: 24px;
@@ -411,6 +541,34 @@
411
541
  flex: 1;
412
542
  overflow-y: auto;
413
543
  padding: 2px 0;
544
+ scrollbar-color: var(--db-accent) var(--db-bg);
545
+ scrollbar-width: thin;
546
+ }
547
+
548
+ .db-tree::-webkit-scrollbar {
549
+ width: 12px;
550
+ }
551
+
552
+ .db-tree::-webkit-scrollbar-track,
553
+ .db-tree::-webkit-scrollbar-corner {
554
+ background: var(--db-bg);
555
+ }
556
+
557
+ .db-tree::-webkit-scrollbar-thumb {
558
+ min-height: 32px;
559
+ background: var(--db-accent);
560
+ border: 3px solid var(--db-bg);
561
+ border-radius: 999px;
562
+ }
563
+
564
+ .db-tree::-webkit-scrollbar-thumb:hover {
565
+ background: var(--db-accent-hover);
566
+ }
567
+
568
+ .db-tree::-webkit-scrollbar-button {
569
+ display: none;
570
+ width: 0;
571
+ height: 0;
414
572
  }
415
573
 
416
574
  .db-tree-loading,
@@ -429,6 +587,10 @@
429
587
  font-size: 12px;
430
588
  }
431
589
 
590
+ .db-tree-error--child {
591
+ margin-left: 24px;
592
+ }
593
+
432
594
  .db-tree-error-retry {
433
595
  border: 0;
434
596
  padding: 0;
@@ -555,11 +717,18 @@
555
717
 
556
718
  .db-tree-row:hover .db-tree-more,
557
719
  .db-tree-row:focus-within .db-tree-more,
720
+ .db-tree-row--selected .db-tree-more,
558
721
  .db-tree-more:focus-visible,
559
722
  .db-tree-more--active {
560
723
  visibility: visible;
561
724
  }
562
725
 
726
+ @media (hover: none), (pointer: coarse) {
727
+ .db-tree-more {
728
+ visibility: visible;
729
+ }
730
+ }
731
+
563
732
  .db-tree-more:hover {
564
733
  background: var(--db-bg-hover);
565
734
  color: var(--db-text);
@@ -1173,15 +1342,13 @@ body.db-resizing-sidebar * {
1173
1342
  }
1174
1343
 
1175
1344
  .db-shell-sidebar-footer-action {
1176
- min-width: 0;
1345
+ flex-shrink: 0;
1177
1346
  padding: 0;
1178
- overflow: hidden;
1179
1347
  border: 0;
1180
1348
  background: transparent;
1181
1349
  font: inherit;
1182
1350
  line-height: inherit;
1183
1351
  text-decoration: underline;
1184
- text-overflow: ellipsis;
1185
1352
  white-space: nowrap;
1186
1353
  cursor: pointer;
1187
1354
  }
@@ -1652,7 +1819,7 @@ body.db-resizing-sidebar * {
1652
1819
  }
1653
1820
 
1654
1821
  .db-settings-fieldset + .db-settings-fieldset {
1655
- margin-top: 20px;
1822
+ margin-top: 16px;
1656
1823
  }
1657
1824
 
1658
1825
  .db-settings-legend {
@@ -1694,6 +1861,16 @@ body.db-resizing-sidebar * {
1694
1861
  accent-color: var(--db-accent);
1695
1862
  }
1696
1863
 
1864
+ .db-settings-radio-row {
1865
+ display: flex;
1866
+ flex-wrap: wrap;
1867
+ gap: 8px 20px;
1868
+ }
1869
+
1870
+ .db-settings-radio--inline {
1871
+ padding: 2px 0;
1872
+ }
1873
+
1697
1874
  .db-settings-checkbox {
1698
1875
  display: flex;
1699
1876
  align-items: center;
@@ -1741,6 +1918,188 @@ body.db-resizing-sidebar * {
1741
1918
  cursor: pointer;
1742
1919
  }
1743
1920
 
1921
+ .db-settings-select {
1922
+ display: flex;
1923
+ flex-direction: column;
1924
+ gap: 6px;
1925
+ margin-top: 14px;
1926
+ color: var(--db-text);
1927
+ font-size: 13px;
1928
+ }
1929
+
1930
+ .db-settings-select-header {
1931
+ display: flex;
1932
+ align-items: baseline;
1933
+ justify-content: space-between;
1934
+ gap: 16px;
1935
+ }
1936
+
1937
+ .db-settings-select-input {
1938
+ width: 100%;
1939
+ padding: 6px 8px;
1940
+ font: inherit;
1941
+ font-size: 13px;
1942
+ background: var(--db-bg-subtle);
1943
+ color: var(--db-text);
1944
+ border: 1px solid var(--db-input-border);
1945
+ border-radius: 4px;
1946
+ outline: none;
1947
+ cursor: pointer;
1948
+ appearance: auto;
1949
+ }
1950
+
1951
+ .db-settings-select-input:focus-visible {
1952
+ border-color: var(--db-accent);
1953
+ }
1954
+
1955
+ .db-font-picker {
1956
+ position: relative;
1957
+ }
1958
+
1959
+ .db-font-picker-trigger {
1960
+ display: flex;
1961
+ align-items: center;
1962
+ gap: 12px;
1963
+ box-sizing: border-box;
1964
+ width: 100%;
1965
+ min-height: 54px;
1966
+ padding: 7px 10px 7px 12px;
1967
+ overflow: hidden;
1968
+ border: 1px solid var(--db-input-border);
1969
+ border-radius: 5px;
1970
+ outline: none;
1971
+ background: var(--db-bg-subtle);
1972
+ color: var(--db-text);
1973
+ text-align: left;
1974
+ cursor: pointer;
1975
+ }
1976
+
1977
+ .db-font-picker-trigger:hover,
1978
+ .db-font-picker-trigger[aria-expanded='true'] {
1979
+ background: var(--db-bg-hover);
1980
+ }
1981
+
1982
+ .db-font-picker-trigger:focus-visible {
1983
+ border-color: var(--db-accent);
1984
+ box-shadow: 0 0 0 1px var(--db-accent);
1985
+ }
1986
+
1987
+ .db-font-picker-caret {
1988
+ flex: 0 0 auto;
1989
+ width: 7px;
1990
+ height: 7px;
1991
+ margin: 0 3px 3px 0;
1992
+ border-right: 2px solid currentColor;
1993
+ border-bottom: 2px solid currentColor;
1994
+ color: var(--db-text-muted);
1995
+ transform: rotate(45deg);
1996
+ transition: transform 120ms ease;
1997
+ }
1998
+
1999
+ .db-font-picker-caret--open {
2000
+ margin-top: 5px;
2001
+ transform: rotate(225deg);
2002
+ }
2003
+
2004
+ .db-font-picker-menu {
2005
+ position: fixed;
2006
+ z-index: 3100;
2007
+ box-sizing: border-box;
2008
+ padding: 5px;
2009
+ overflow-y: auto;
2010
+ overscroll-behavior: contain;
2011
+ border: 1px solid var(--db-border-strong);
2012
+ border-radius: 6px;
2013
+ outline: none;
2014
+ background: var(--db-bg);
2015
+ color: var(--db-text);
2016
+ box-shadow: 0 10px 28px var(--db-shadow);
2017
+ }
2018
+
2019
+ .db-font-picker-group {
2020
+ padding: 10px 10px 4px;
2021
+ color: var(--db-text-muted);
2022
+ font:
2023
+ 600 10px/1.2 system-ui,
2024
+ -apple-system,
2025
+ 'Segoe UI',
2026
+ sans-serif;
2027
+ letter-spacing: 0.065em;
2028
+ text-transform: uppercase;
2029
+ }
2030
+
2031
+ .db-font-picker-option {
2032
+ display: flex;
2033
+ align-items: center;
2034
+ gap: 12px;
2035
+ min-height: 50px;
2036
+ padding: 6px 9px 6px 11px;
2037
+ border-radius: 4px;
2038
+ color: var(--db-text);
2039
+ cursor: pointer;
2040
+ user-select: none;
2041
+ }
2042
+
2043
+ .db-font-picker-option--active {
2044
+ background: var(--db-bg-hover);
2045
+ }
2046
+
2047
+ .db-font-picker-option--selected {
2048
+ background: var(--db-accent-soft-12);
2049
+ }
2050
+
2051
+ .db-font-picker-option--selected.db-font-picker-option--active {
2052
+ background: var(--db-accent-soft-25);
2053
+ }
2054
+
2055
+ .db-font-picker-preview {
2056
+ display: flex;
2057
+ flex: 1 1 auto;
2058
+ flex-direction: column;
2059
+ min-width: 0;
2060
+ line-height: 1.2;
2061
+ }
2062
+
2063
+ .db-font-picker-heading,
2064
+ .db-font-picker-body {
2065
+ overflow: hidden;
2066
+ text-overflow: ellipsis;
2067
+ white-space: nowrap;
2068
+ }
2069
+
2070
+ .db-font-picker-heading {
2071
+ color: var(--db-text);
2072
+ font-size: 16px;
2073
+ font-weight: 650;
2074
+ }
2075
+
2076
+ .db-font-picker-body {
2077
+ margin-top: 3px;
2078
+ color: var(--db-text-secondary);
2079
+ font-size: 12px;
2080
+ font-weight: 400;
2081
+ }
2082
+
2083
+ .db-font-picker-preview--compact .db-font-picker-heading {
2084
+ font-size: 15px;
2085
+ }
2086
+
2087
+ .db-font-picker-preview--compact .db-font-picker-body {
2088
+ color: var(--db-text-muted);
2089
+ font-size: 11px;
2090
+ }
2091
+
2092
+ .db-font-picker-check {
2093
+ flex: 0 0 18px;
2094
+ color: var(--db-accent-deep);
2095
+ font:
2096
+ 700 14px/1 system-ui,
2097
+ -apple-system,
2098
+ 'Segoe UI',
2099
+ sans-serif;
2100
+ text-align: center;
2101
+ }
2102
+
1744
2103
  .db-settings-accent-grid {
1745
2104
  display: grid;
1746
2105
  grid-template-columns: repeat(auto-fit, minmax(104px, 1fr));
@@ -2058,6 +2417,15 @@ body.db-resizing-sidebar * {
2058
2417
  padding: 4px 0;
2059
2418
  }
2060
2419
 
2420
+ .db-export-toolbar-menu-dropdown {
2421
+ max-width: min(720px, calc(100vw - 16px));
2422
+ }
2423
+
2424
+ .db-export-toolbar-menu-dropdown .db-toolbar-menu-item {
2425
+ overflow: hidden;
2426
+ text-overflow: ellipsis;
2427
+ }
2428
+
2061
2429
  .db-toolbar-menu-item {
2062
2430
  display: block;
2063
2431
  width: 100%;
@@ -2392,11 +2760,55 @@ body.db-resizing-sidebar * {
2392
2760
  background: var(--db-editor-canvas);
2393
2761
  }
2394
2762
 
2395
- /* Bind Squisq's host-facing accent to the active DocBlocks appearance. */
2763
+ /* Bind Squisq's host-facing accent to the active DocBlocks appearance.
2764
+ RawEditor uses the editor background/foreground variables for its
2765
+ textarea while Monaco's first lazy load is in flight. Define them here so
2766
+ Source view never paints Squisq's light fallback before the requested
2767
+ Monaco theme is ready. */
2396
2768
  .db-shell .squisq-editor-shell {
2397
2769
  --squisq-accent: var(--db-accent);
2398
2770
  --squisq-accent-hover: var(--db-accent-hover);
2399
2771
  --squisq-text-on-accent: var(--db-text-on-accent);
2772
+ --squisq-editor-background: #ffffff;
2773
+ --squisq-editor-foreground: #1f2937;
2774
+ }
2775
+
2776
+ .db-shell .squisq-editor-shell[data-theme='dark'] {
2777
+ /* Match Monaco's built-in vs-dark canvas exactly so replacing the loading
2778
+ textarea with Monaco does not introduce a second, subtler color flash. */
2779
+ --squisq-editor-background: #1e1e1e;
2780
+ --squisq-editor-foreground: #d4d4d4;
2781
+ }
2782
+
2783
+ /* The Write-canvas font picker is an explicit host preference, so its
2784
+ variables must beat the active document theme in Write mode. Squisq's base
2785
+ stylesheet intentionally puts theme fonts first; reverse that order only
2786
+ inside the DocBlocks shell. When "Inherit from theme" is selected the Write
2787
+ variables are absent, and these declarations fall straight through to the
2788
+ same theme title/body fonts as before. */
2789
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor {
2790
+ font-family: var(--squisq-write-body-font, var(--squisq-theme-body-font, inherit));
2791
+ }
2792
+
2793
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h1,
2794
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h2,
2795
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h3,
2796
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h4,
2797
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h5,
2798
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor h6 {
2799
+ font-family: var(
2800
+ --squisq-write-header-font,
2801
+ var(
2802
+ --squisq-write-body-font,
2803
+ var(--squisq-theme-title-font, var(--squisq-theme-body-font, inherit))
2804
+ )
2805
+ );
2806
+ }
2807
+
2808
+ /* Squisq's default horizontal rule uses a fixed slate border in both
2809
+ appearances. Keep document rules aligned with the selected host accent. */
2810
+ .db-shell .squisq-editor-shell .squisq-wysiwyg-editor hr {
2811
+ border-top-color: var(--db-accent);
2400
2812
  }
2401
2813
 
2402
2814
  /* Simple diagrams, drawings, and layout canvases share Squisq's Scene
@@ -4064,6 +4476,46 @@ html:has(.db-shell[data-theme='dark'])
4064
4476
  border-color: var(--db-border);
4065
4477
  }
4066
4478
 
4479
+ /* View menu. Squisq's dark appearance otherwise replaces its generic
4480
+ variables with a fixed slate-blue palette. Keep the popover and its
4481
+ controls on the same host palette as the DocBlocks app and overflow
4482
+ menus, including the native radio/checkbox selection color. */
4483
+ .db-shell .squisq-editor-shell .squisq-view-menu-popover {
4484
+ background: var(--db-bg);
4485
+ border-color: var(--db-border);
4486
+ box-shadow: 0 4px 12px var(--db-shadow);
4487
+ color: var(--db-text-secondary);
4488
+ }
4489
+
4490
+ .db-shell .squisq-editor-shell .squisq-view-menu-row:hover,
4491
+ .db-shell .squisq-editor-shell .squisq-view-menu-radio-row:hover {
4492
+ background: var(--db-bg-hover);
4493
+ }
4494
+
4495
+ .db-shell .squisq-editor-shell .squisq-view-menu-row--select:hover,
4496
+ .db-shell .squisq-editor-shell .squisq-view-menu-row--radios:hover {
4497
+ background: transparent;
4498
+ }
4499
+
4500
+ .db-shell .squisq-editor-shell .squisq-view-menu-row--select .squisq-view-menu-label,
4501
+ .db-shell .squisq-editor-shell .squisq-view-menu-row--radios > .squisq-view-menu-label {
4502
+ color: var(--db-text-muted);
4503
+ }
4504
+
4505
+ .db-shell .squisq-editor-shell .squisq-view-menu-select {
4506
+ background: var(--db-bg-subtle);
4507
+ border-color: var(--db-border);
4508
+ color: var(--db-text-secondary);
4509
+ }
4510
+
4511
+ .db-shell .squisq-editor-shell .squisq-view-menu-separator {
4512
+ background: var(--db-border);
4513
+ }
4514
+
4515
+ .db-shell .squisq-editor-shell :is(.squisq-view-menu-checkbox, .squisq-view-menu-radio) {
4516
+ accent-color: var(--db-accent);
4517
+ }
4518
+
4067
4519
  /* Monaco's line-number gutter ("editorGutter.background") is set via
4068
4520
  squisq's JS-side theme registration — those colors can't be CSS
4069
4521
  variables. To make the gutter blend with the outline/preview chrome
@@ -4457,6 +4909,7 @@ html:has(.db-shell[data-theme='dark'])
4457
4909
  .db-dialog--wide {
4458
4910
  width: 560px;
4459
4911
  max-width: 100%;
4912
+ max-height: min(calc(100dvh - 32px), 660px);
4460
4913
  }
4461
4914
 
4462
4915
  .db-dialog--full {