@wizzlethorpe/vaults 0.4.0 → 0.6.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.
@@ -1,15 +1,26 @@
1
1
  // Theme + layout styles for the rendered wiki. Self-contained, no build step.
2
2
  // Single light theme: parchment + scarlet.
3
3
  /**
4
- * Per-vault accent override. When `accent_color` is set in settings.md,
5
- * append this block after DEFAULT_CSS so it wins. The derived shades
6
- * (--accent-soft, --wikilink-bg) are recomputed via color-mix so they
7
- * stay coherent with whatever color the user picked.
4
+ * Per-vault theme overrides. When `accent_color` or `bg_color` are set in
5
+ * settings.md, append this block after DEFAULT_CSS so it wins. The derived
6
+ * shades (--accent-soft, --wikilink-bg, --rule, etc) are recomputed via
7
+ * color-mix so they stay coherent with whatever colors the user picked.
8
8
  */
9
9
  export function renderThemeOverride(opts) {
10
- if (!opts.lightAccent)
10
+ const blocks = [];
11
+ if (opts.lightAccent)
12
+ blocks.push(accentBlock(":root", opts.lightAccent));
13
+ if (opts.lightBg)
14
+ blocks.push(bgBlock(":root", opts.lightBg));
15
+ if (!blocks.length)
11
16
  return "";
12
- return "\n\n/* User accent override (settings.md) */\n" + accentBlock(":root", opts.lightAccent);
17
+ return "\n\n/* User theme overrides (settings.md) */\n" + blocks.join("\n");
18
+ }
19
+ function bgBlock(selector, color) {
20
+ return `${selector} {
21
+ --bg: ${color};
22
+ --rule: color-mix(in srgb, ${color} 85%, #000);
23
+ }`;
13
24
  }
14
25
  function accentBlock(selector, color) {
15
26
  return `${selector} {
@@ -44,7 +55,7 @@ article a.internal.new, article a.internal.is-unresolved { opacity: 0.7; font-st
44
55
  The sidebar's flex gap handles spacing; no extra margin or rule needed. */
45
56
  .sidebar > .brand {
46
57
  display: block; padding: 0 0.5rem;
47
- font-weight: 700; font-size: 1.05rem; letter-spacing: 0.04em;
58
+ font-weight: 700; font-size: 1.25rem; letter-spacing: 0.04em;
48
59
  color: var(--fg); text-decoration: none;
49
60
  }
50
61
  .sidebar > .brand:hover { color: var(--accent); text-decoration: none; }
@@ -76,42 +87,20 @@ main { padding: 2rem 0 4rem; min-width: 0; }
76
87
  (the Explorer is always shown). On mobile it acts as a real disclosure
77
88
  widget so the long sitemap doesn't push the article off-screen. The
78
89
  default state is closed; an inline script in the layout opens it on
79
- desktop after first paint. */
80
- .sidebar > details.explorer { margin: 0; }
81
- .sidebar > details.explorer > summary {
82
- list-style: none;
83
- cursor: pointer;
84
- user-select: none;
85
- display: flex;
86
- align-items: center;
87
- gap: 0.5rem;
88
- padding: 0.4rem 0.5rem;
89
- margin: 0 0 0.5rem;
90
- font-size: 0.75rem;
91
- text-transform: uppercase;
92
- letter-spacing: 0.08em;
93
- color: var(--muted);
94
- font-weight: 600;
95
- border-radius: 3px;
96
- }
97
- .sidebar > details.explorer > summary::-webkit-details-marker { display: none; }
98
- .sidebar > details.explorer > summary::before {
99
- content: ''; display: inline-block;
100
- width: 5px; height: 5px;
101
- border-right: 1.5px solid currentColor;
102
- border-bottom: 1.5px solid currentColor;
103
- transform: rotate(-45deg);
104
- transition: transform 0.15s ease;
105
- opacity: 0.7;
106
- }
107
- .sidebar > details.explorer[open] > summary::before { transform: rotate(45deg); }
108
- .sidebar > details.explorer > summary:hover { color: var(--accent); }
90
+ desktop after first paint. The summary reuses the TOC styling so both
91
+ sidebars present the same dropdown affordance. */
92
+ .sidebar > nav > details.explorer { margin: 0; }
93
+ .sidebar > nav > details.explorer > .toc-summary {
94
+ margin-bottom: 0.5rem;
95
+ display: inline-flex;
96
+ }
97
+ .sidebar > nav > details.explorer[open] > .toc-summary::before { transform: rotate(45deg); }
109
98
  @media (min-width: 1101px) {
110
99
  /* On desktop, force the Explorer to behave as if always open: hide the
111
100
  toggle affordance, and reveal the sitemap regardless of [open] state. */
112
- .sidebar > details.explorer > summary { cursor: default; pointer-events: none; }
113
- .sidebar > details.explorer > summary::before { display: none; }
114
- .sidebar > details.explorer > .sitemap-list { display: block; }
101
+ .sidebar > nav > details.explorer > .toc-summary { cursor: default; pointer-events: none; }
102
+ .sidebar > nav > details.explorer > .toc-summary::before { display: none; }
103
+ .sidebar > nav > details.explorer > .sitemap-list { display: block; }
115
104
  }
116
105
 
117
106
  .search-box { position: relative; }
@@ -144,6 +133,67 @@ main { padding: 2rem 0 4rem; min-width: 0; }
144
133
  .auth-box .auth-status strong { color: var(--accent); font-weight: 600; }
145
134
  .auth-box .auth-action { color: var(--accent); text-decoration: none; font-weight: 500; }
146
135
  .auth-box .auth-action:hover { text-decoration: underline; }
136
+
137
+ /* Signed-out auth UI: present Sign in as a full-width button rather than
138
+ a lightweight text link. */
139
+ .auth-box.auth-signed-out {
140
+ padding: 0;
141
+ border: none;
142
+ border-radius: 0;
143
+ }
144
+ .auth-box .auth-action-primary {
145
+ width: 100%;
146
+ display: block;
147
+ text-align: center;
148
+ padding: 0.52rem 0.75rem;
149
+ border-radius: 4px;
150
+ border: 1px solid var(--accent);
151
+ background: transparent;
152
+ color: var(--accent);
153
+ font-weight: 600;
154
+ letter-spacing: 0.01em;
155
+ transition: background 0.12s ease, border-color 0.12s ease, color 0.12s ease, transform 0.06s ease;
156
+ }
157
+ .auth-box .auth-action-primary:hover {
158
+ text-decoration: none;
159
+ background: var(--wikilink-bg);
160
+ border-color: var(--accent-soft);
161
+ color: var(--accent);
162
+ }
163
+ .auth-box .auth-action-primary:active { transform: translateY(1px); }
164
+
165
+ /* Signed-in auth UI: keep status on the left and present Sign out as a
166
+ right-side action split by a divider. */
167
+ .auth-box.auth-signed-in {
168
+ padding: 0.3rem 0.35rem 0.3rem 0.65rem;
169
+ flex-wrap: nowrap;
170
+ gap: 0;
171
+ }
172
+ .auth-box.auth-signed-in .auth-status {
173
+ flex: 1;
174
+ min-width: 0;
175
+ padding-right: 0.55rem;
176
+ white-space: nowrap;
177
+ overflow: hidden;
178
+ text-overflow: ellipsis;
179
+ }
180
+ .auth-box.auth-signed-in .auth-action {
181
+ display: inline-flex;
182
+ align-items: center;
183
+ justify-content: center;
184
+ margin-left: auto;
185
+ padding: 0.32rem 0.6rem;
186
+ border-left: 1px solid var(--rule);
187
+ border-radius: 0;
188
+ text-decoration: none;
189
+ font-weight: 600;
190
+ line-height: 1.2;
191
+ white-space: nowrap;
192
+ }
193
+ .auth-box.auth-signed-in .auth-action:hover {
194
+ text-decoration: none;
195
+ background: var(--wikilink-bg);
196
+ }
147
197
  .search-result-summary {
148
198
  font-size: 0.78rem; color: var(--muted); margin-top: 0.25rem; line-height: 1.4;
149
199
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
@@ -199,14 +249,130 @@ main { padding: 2rem 0 4rem; min-width: 0; }
199
249
  }
200
250
  .rightbar .backlinks a:hover { color: var(--accent); border-left-color: var(--accent); }
201
251
 
252
+ /* Top-of-article header strip: breadcrumbs left, meta + frontmatter affordance right.
253
+ Wraps onto a second line on narrow viewports rather than overflowing. */
254
+ .page-header {
255
+ display: flex;
256
+ flex-wrap: wrap;
257
+ align-items: center;
258
+ gap: 0.4rem 1rem;
259
+ margin: 0 0 1rem;
260
+ }
261
+ .page-header .crumbs { margin: 0; flex: 1 1 auto; min-width: 0; }
262
+ .page-header-right {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 0.5rem;
266
+ margin-left: auto;
267
+ flex-shrink: 0;
268
+ }
269
+
270
+ /* Lives at the bottom of the article; muted, separated by a thin rule so
271
+ it reads as page-footer info rather than article content. */
202
272
  .page-meta {
203
273
  color: var(--muted); font-size: 0.78rem;
204
- margin: -0.75rem 0 1.75rem;
274
+ margin: 2.5rem 0 0;
275
+ padding-top: 0.6rem;
276
+ border-top: 1px solid var(--rule);
205
277
  display: flex; gap: 0.4rem; align-items: center; flex-wrap: wrap;
206
278
  }
207
279
  .page-meta time { font-variant-numeric: tabular-nums; }
208
280
  .page-meta .meta-sep { opacity: 0.5; }
209
281
 
282
+ .frontmatter-toggle {
283
+ display: inline-flex; align-items: center; gap: 0.35rem;
284
+ padding: 0.15rem 0.5rem;
285
+ font-size: 0.78rem;
286
+ color: var(--muted);
287
+ background: transparent;
288
+ border: 1px solid var(--rule);
289
+ border-radius: 4px;
290
+ cursor: pointer;
291
+ font-family: inherit;
292
+ transition: color 0.15s, border-color 0.15s, background 0.15s;
293
+ }
294
+ .frontmatter-toggle:hover {
295
+ color: var(--accent);
296
+ border-color: var(--accent);
297
+ }
298
+ .frontmatter-toggle-glyph {
299
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
300
+ font-weight: 700;
301
+ letter-spacing: -0.05em;
302
+ }
303
+ /* Mobile: drop the "frontmatter" label so the button is just a {} chip. */
304
+ @media (max-width: 600px) {
305
+ .frontmatter-toggle-label { display: none; }
306
+ .frontmatter-toggle { padding: 0.15rem 0.4rem; }
307
+ }
308
+ .frontmatter-dialog {
309
+ border: 1px solid var(--rule);
310
+ border-radius: 6px;
311
+ padding: 0;
312
+ background: var(--bg);
313
+ color: inherit;
314
+ max-width: min(720px, 90vw);
315
+ width: min(720px, 90vw);
316
+ }
317
+ .frontmatter-dialog::backdrop {
318
+ background: rgba(0, 0, 0, 0.35);
319
+ }
320
+ .frontmatter-header {
321
+ display: flex; align-items: center; gap: 0.5rem;
322
+ padding: 0.6rem 0.8rem;
323
+ border-bottom: 1px solid var(--rule);
324
+ }
325
+ .frontmatter-title {
326
+ font-weight: 600;
327
+ font-size: 0.85rem;
328
+ color: var(--muted);
329
+ flex: 1;
330
+ }
331
+ /* Pin a fixed min-height on both buttons and centre contents — different
332
+ font-sizes (× at 1rem vs "Copy" at 0.8rem) would otherwise produce
333
+ different line-box heights. */
334
+ .frontmatter-copy,
335
+ .frontmatter-close {
336
+ font-family: inherit;
337
+ background: transparent;
338
+ border: 1px solid var(--rule);
339
+ border-radius: 4px;
340
+ cursor: pointer;
341
+ color: inherit;
342
+ font-size: 0.8rem;
343
+ line-height: 1;
344
+ display: inline-flex;
345
+ align-items: center;
346
+ justify-content: center;
347
+ min-height: 1.75rem;
348
+ padding: 0 0.6rem;
349
+ transition: color 0.15s, border-color 0.15s;
350
+ }
351
+ .frontmatter-copy:hover,
352
+ .frontmatter-close:hover {
353
+ color: var(--accent);
354
+ border-color: var(--accent);
355
+ }
356
+ .frontmatter-close {
357
+ font-size: 1.1rem;
358
+ min-width: 1.75rem;
359
+ padding: 0;
360
+ }
361
+ .frontmatter-dialog pre {
362
+ margin: 0;
363
+ padding: 0.8rem 1rem;
364
+ max-height: 60vh;
365
+ overflow: auto;
366
+ background: color-mix(in srgb, var(--muted) 8%, transparent);
367
+ }
368
+ .frontmatter-dialog code.frontmatter-yaml {
369
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
370
+ font-size: 0.85rem;
371
+ line-height: 1.45;
372
+ white-space: pre;
373
+ display: block;
374
+ }
375
+
210
376
  .crumbs { color: var(--muted); font-size: 0.875rem; margin-bottom: 1rem; }
211
377
  .crumbs a { color: var(--muted); text-decoration: none; }
212
378
  .crumbs a:hover { color: var(--accent); text-decoration: underline; }
@@ -367,6 +533,54 @@ article blockquote { margin: 1rem 0; padding: 0.5rem 1rem; border-left: 3px soli
367
533
  border-radius: 6px;
368
534
  background: color-mix(in srgb, var(--muted) 4%, transparent);
369
535
  }
536
+
537
+ /* Multi-view tabbed container: tab strip on top, blocks below as panels.
538
+ The block inside loses its outer rounding/border on top so it merges
539
+ visually with the active tab without doubled rules. */
540
+ .bases-tabbed {
541
+ margin: 1rem 0;
542
+ border: 1px solid var(--rule);
543
+ border-radius: 6px;
544
+ background: color-mix(in srgb, var(--muted) 4%, transparent);
545
+ }
546
+ .bases-tabbed .bases-block {
547
+ margin: 0;
548
+ border: none;
549
+ border-radius: 0;
550
+ background: transparent;
551
+ }
552
+ .bases-tabbed .bases-block .bases-caption { display: none; }
553
+ .bases-tab-strip {
554
+ display: flex;
555
+ flex-wrap: wrap;
556
+ gap: 0.25rem;
557
+ padding: 0.4rem 0.5rem 0;
558
+ border-bottom: 1px solid var(--rule);
559
+ }
560
+ .bases-tab {
561
+ font-family: inherit;
562
+ font-size: 0.85rem;
563
+ font-weight: 600;
564
+ background: transparent;
565
+ border: 1px solid transparent;
566
+ border-bottom: none;
567
+ border-radius: 5px 5px 0 0;
568
+ color: var(--muted);
569
+ cursor: pointer;
570
+ padding: 0.4rem 0.85rem;
571
+ margin-bottom: -1px;
572
+ transition: color 0.15s, background 0.15s, border-color 0.15s;
573
+ }
574
+ .bases-tab:hover {
575
+ color: var(--accent);
576
+ }
577
+ .bases-tab-active {
578
+ color: inherit;
579
+ background: var(--bg);
580
+ border-color: var(--rule);
581
+ border-bottom-color: var(--bg);
582
+ }
583
+ .bases-tab-panel[hidden] { display: none !important; }
370
584
  .bases-caption {
371
585
  padding: 0.55rem 0.85rem;
372
586
  font-weight: 700;
@@ -447,6 +661,14 @@ article blockquote { margin: 1rem 0; padding: 0.5rem 1rem; border-left: 3px soli
447
661
  overflow: hidden;
448
662
  transition: border-color 0.15s, transform 0.15s;
449
663
  }
664
+ /* Author rules with display:flex/grid/... override the UA [hidden]
665
+ default, so the runtime filter has nothing to cling to. Force the hide
666
+ here for every Bases item type. */
667
+ .bases-card[hidden],
668
+ .bases-list li[hidden],
669
+ .bases-table tr[hidden] {
670
+ display: none !important;
671
+ }
450
672
  .bases-card:hover {
451
673
  border-color: var(--accent);
452
674
  transform: translateY(-2px);
@@ -455,7 +677,21 @@ article blockquote { margin: 1rem 0; padding: 0.5rem 1rem; border-left: 3px soli
455
677
  width: 100%;
456
678
  aspect-ratio: 1 / 1;
457
679
  background-color: color-mix(in srgb, var(--muted) 8%, transparent);
680
+ overflow: hidden;
681
+ }
682
+ .bases-card-cover img {
683
+ width: 100%;
684
+ height: 100%;
685
+ display: block;
458
686
  }
687
+ .bases-card-cover-cover img { object-fit: cover; object-position: center; }
688
+ .bases-card-cover-contain img { object-fit: contain; object-position: center; }
689
+ .bases-card-cover-1x1 { aspect-ratio: 1 / 1; }
690
+ .bases-card-cover-3x2 { aspect-ratio: 3 / 2; }
691
+ .bases-card-cover-4x3 { aspect-ratio: 4 / 3; }
692
+ .bases-card-cover-16x9 { aspect-ratio: 16 / 9; }
693
+ .bases-card-cover-3x4 { aspect-ratio: 3 / 4; }
694
+ .bases-card-cover-2x3 { aspect-ratio: 2 / 3; }
459
695
  .bases-card-body {
460
696
  padding: 0.6rem 0.75rem;
461
697
  display: flex;
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/render/styles.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2CAA2C;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA6B;IAC/D,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,gDAAgD,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,KAAa;IAClD,OAAO,GAAG,QAAQ;cACN,KAAK;sCACmB,KAAK;sCACL,KAAK;4CACC,KAAK;EAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4gB1B,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/render/styles.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,2CAA2C;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgD;IAClF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9B,OAAO,gDAAgD,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,OAAO,CAAC,QAAgB,EAAE,KAAa;IAC9C,OAAO,GAAG,QAAQ;UACV,KAAK;+BACgB,KAAK;EAClC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,KAAa;IAClD,OAAO,GAAG,QAAQ;cACN,KAAK;sCACmB,KAAK;sCACL,KAAK;4CACC,KAAK;EAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6uB1B,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { stat } from "node:fs/promises";
2
+ import { spawn } from "node:child_process";
3
+ import { dirname, join, relative } from "node:path";
4
+ /**
5
+ * Loud warning when a file that contains secrets is about to be written.
6
+ * Today's only secrets-bearing file is `.env` (session-signing key,
7
+ * Patreon client secret); `.vaultrc.json` itself is config-only as of
8
+ * the secrets split and is intentionally trackable.
9
+ *
10
+ * The check is best-effort: if `git` isn't on PATH, or the vault isn't
11
+ * inside a git repo, we still emit a quieter reminder. Never throws —
12
+ * a wrong gitignore guess shouldn't block writing the file.
13
+ */
14
+ export async function warnSensitive(vaultPath, filePath, what = "the session-signing key and (when configured) the Patreon client secret") {
15
+ const gitRoot = await findGitRoot(vaultPath);
16
+ if (!gitRoot) {
17
+ console.warn(` \x1b[33m⚠\x1b[0m ${filePath} contains ${what}. `
18
+ + `If you ever put this vault under git, gitignore it first.`);
19
+ return;
20
+ }
21
+ const ignored = await isGitIgnored(gitRoot, vaultPath, filePath);
22
+ if (ignored)
23
+ return; // healthy state — silent
24
+ console.warn(`\n \x1b[31m⚠ SECURITY:\x1b[0m ${filePath} is NOT gitignored in this repo!`);
25
+ console.warn(` This file contains ${what}. Add it to .gitignore before committing.`);
26
+ console.warn(` cd ${gitRoot} && echo "${pathRelativeToRepoRoot(gitRoot, vaultPath, filePath)}" >> .gitignore\n`);
27
+ }
28
+ async function findGitRoot(start) {
29
+ let dir = start;
30
+ for (let i = 0; i < 32; i++) { // generous loop bound; protects against symlink cycles
31
+ try {
32
+ const s = await stat(join(dir, ".git"));
33
+ if (s.isDirectory() || s.isFile())
34
+ return dir;
35
+ }
36
+ catch { /* keep walking */ }
37
+ const parent = dirname(dir);
38
+ if (parent === dir)
39
+ return null;
40
+ dir = parent;
41
+ }
42
+ return null;
43
+ }
44
+ async function isGitIgnored(gitRoot, vaultPath, filePath) {
45
+ const fullPath = join(vaultPath, filePath);
46
+ return new Promise((resolve) => {
47
+ // `git check-ignore` exits 0 when the path IS ignored, 1 when not, 128
48
+ // on error. Errors (no git, permissions) → assume not ignored so we
49
+ // err on the side of warning.
50
+ const proc = spawn("git", ["-C", gitRoot, "check-ignore", "--quiet", fullPath], {
51
+ stdio: "ignore",
52
+ });
53
+ proc.on("exit", (code) => resolve(code === 0));
54
+ proc.on("error", () => resolve(false));
55
+ });
56
+ }
57
+ function pathRelativeToRepoRoot(gitRoot, vaultPath, filePath) {
58
+ return relative(gitRoot, join(vaultPath, filePath)).split(/[/\\]/).join("/");
59
+ }
60
+ //# sourceMappingURL=sensitive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitive.js","sourceRoot":"","sources":["../src/sensitive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,QAAgB,EAChB,OAAe,yEAAyE;IAExF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,sBAAsB,QAAQ,aAAa,IAAI,IAAI;cACjD,2DAA2D,CAC9D,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,OAAO;QAAE,OAAO,CAAC,yBAAyB;IAE9C,OAAO,CAAC,IAAI,CACV,kCAAkC,QAAQ,kCAAkC,CAC7E,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,2CAA2C,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CACV,UAAU,OAAO,aAAa,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CACtG,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAa;IACtC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,uDAAuD;QACpF,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE;gBAAE,OAAO,GAAG,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,uEAAuE;QACvE,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;YAC9E,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IAClF,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/E,CAAC"}
package/dist/settings.js CHANGED
@@ -47,11 +47,26 @@ const SCHEMA = {
47
47
  type: "string",
48
48
  description: "Override the accent color (links, headings, highlights). Any CSS color works: '#a8201a', 'crimson', 'rgb(168 32 26)'. Empty = use the built-in scarlet.",
49
49
  },
50
+ bg_color: {
51
+ default: "",
52
+ type: "string",
53
+ description: "Override the background color. Any CSS color works: '#f4ecd8', 'wheat', 'rgb(244 236 216)'. Empty = use the built-in parchment.",
54
+ },
50
55
  favicon: {
51
56
  default: "",
52
57
  type: "string",
53
58
  description: "Vault-relative path to an image used as the site favicon (png/jpg/svg/webp). Empty = generated default with the vault's accent color.",
54
59
  },
60
+ auto_image: {
61
+ default: true,
62
+ type: "boolean",
63
+ description: "When a page has no 'image:' frontmatter, fall back to the first embedded image in the body. Used for OG/Twitter social cards, Bases card covers, and Foundry actor/item reskins. Set false to opt out.",
64
+ },
65
+ include_unknown_files: {
66
+ default: false,
67
+ type: "boolean",
68
+ description: "Ship files with unrecognized extensions to every deploy variant. Default false skips them (with a warning) so a stray file in your vault can't accidentally bypass role gating. Recognized media types (audio/video/pdf/epub) are reference-gated like images regardless of this setting.",
69
+ },
55
70
  };
56
71
  export const SETTINGS_FILE = "settings.md";
57
72
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizzlethorpe/vaults",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Sync an Obsidian vault to a Cloudflare-hosted wiki with role-based access. Renders locally, deploys to Cloudflare Pages.",
5
5
  "keywords": [
6
6
  "obsidian",