@treeseed/core 0.8.9 → 0.8.10

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.
@@ -41,6 +41,8 @@
41
41
  color: var(--ts-color-text);
42
42
  display: flex;
43
43
  gap: var(--ts-space-2);
44
+ min-width: 0;
45
+ max-width: 100%;
44
46
  text-decoration: none;
45
47
  }
46
48
 
@@ -53,14 +55,20 @@
53
55
  display: inline-flex;
54
56
  flex: 0 0 auto;
55
57
  font-weight: 800;
56
- height: 2rem;
58
+ height: 3rem;
57
59
  justify-content: center;
58
- width: 2rem;
60
+ max-height: 3rem;
61
+ max-width: 3rem;
62
+ overflow: hidden;
63
+ width: 3rem;
59
64
  }
60
65
 
61
66
  .ts-shell-brand__mark img {
62
67
  display: block;
63
68
  height: 100%;
69
+ max-height: 100%;
70
+ max-width: 100%;
71
+ object-fit: contain;
64
72
  width: 100%;
65
73
  }
66
74
 
@@ -98,6 +106,7 @@
98
106
  flex-wrap: wrap;
99
107
  gap: var(--ts-space-1);
100
108
  justify-content: flex-end;
109
+ min-width: 0;
101
110
  }
102
111
 
103
112
  .ts-app-shell__rail-context,
@@ -242,9 +251,9 @@
242
251
  font-size: 0.875rem;
243
252
  font-weight: 650;
244
253
  justify-content: center;
245
- line-height: 1.15;
246
- min-height: 2.25rem;
247
- padding: 0.45rem 0.65rem;
254
+ line-height: 1.2;
255
+ min-height: 2.5rem;
256
+ padding: 0.55rem 0.75rem;
248
257
  text-align: center;
249
258
  white-space: nowrap;
250
259
  }
@@ -298,6 +307,12 @@
298
307
  padding: var(--ts-space-3);
299
308
  }
300
309
 
310
+ .ts-public-shell--content .ts-public-shell__main {
311
+ margin-inline: auto;
312
+ max-width: var(--ts-content-width);
313
+ width: 100%;
314
+ }
315
+
301
316
  .ts-public-shell__header {
302
317
  display: grid;
303
318
  gap: var(--ts-space-2);
@@ -305,9 +320,12 @@
305
320
  }
306
321
 
307
322
  .ts-public-shell__nav {
323
+ align-items: center;
308
324
  display: flex;
309
325
  flex-wrap: wrap;
310
- gap: var(--ts-space-2);
326
+ gap: var(--ts-space-1);
327
+ justify-content: flex-end;
328
+ min-width: 0;
311
329
  }
312
330
 
313
331
  .ts-public-shell__link {
@@ -319,6 +337,7 @@
319
337
  }
320
338
 
321
339
  .ts-public-shell__link[aria-current='page'],
340
+ .ts-public-shell__summary--active,
322
341
  .ts-public-shell__link:hover {
323
342
  background: var(--ts-color-surface-raised);
324
343
  border-color: var(--ts-color-border);
@@ -326,9 +345,182 @@
326
345
  text-decoration: none;
327
346
  }
328
347
 
348
+ .ts-public-shell__nav-group {
349
+ position: relative;
350
+ }
351
+
352
+ .ts-public-shell__summary {
353
+ align-items: center;
354
+ cursor: pointer;
355
+ display: inline-flex;
356
+ gap: 0.35rem;
357
+ list-style: none;
358
+ }
359
+
360
+ .ts-public-shell__summary::-webkit-details-marker {
361
+ display: none;
362
+ }
363
+
364
+ .ts-public-shell__summary span {
365
+ color: var(--ts-color-text-subtle);
366
+ font-size: 0.75rem;
367
+ transition: transform 160ms ease;
368
+ }
369
+
370
+ .ts-public-shell__nav-group[open] .ts-public-shell__summary span {
371
+ transform: rotate(180deg);
372
+ }
373
+
374
+ .ts-public-shell__menu {
375
+ background: var(--ts-color-surface-overlay);
376
+ border: 1px solid var(--ts-color-border-strong);
377
+ border-radius: var(--ts-radius-md);
378
+ box-shadow: var(--ts-color-shadow);
379
+ display: grid;
380
+ gap: 0.15rem;
381
+ inset-block-start: calc(100% + 0.35rem);
382
+ inset-inline-end: 0;
383
+ min-width: 13rem;
384
+ padding: var(--ts-space-1);
385
+ position: absolute;
386
+ z-index: 40;
387
+ }
388
+
389
+ .ts-public-shell__menu-link {
390
+ border-radius: var(--ts-radius-sm);
391
+ color: var(--ts-color-text-muted);
392
+ font-size: 0.9rem;
393
+ font-weight: 600;
394
+ padding: 0.5rem 0.65rem;
395
+ text-decoration: none;
396
+ }
397
+
398
+ .ts-public-shell__menu-link[aria-current='page'],
399
+ .ts-public-shell__menu-link:hover,
400
+ .ts-public-shell__menu-link:focus-visible {
401
+ background: var(--ts-color-surface-muted);
402
+ color: var(--ts-color-text);
403
+ text-decoration: none;
404
+ }
405
+
406
+ .ts-public-shell__icon-link {
407
+ align-items: center;
408
+ border: 1px solid transparent;
409
+ border-radius: var(--ts-radius-md);
410
+ color: var(--ts-color-text-muted);
411
+ display: inline-flex;
412
+ height: 2.25rem;
413
+ justify-content: center;
414
+ text-decoration: none;
415
+ width: 2.25rem;
416
+ }
417
+
418
+ .ts-public-shell__icon-link:hover,
419
+ .ts-public-shell__icon-link:focus-visible {
420
+ background: var(--ts-color-surface-raised);
421
+ border-color: var(--ts-color-border);
422
+ color: var(--ts-color-text);
423
+ text-decoration: none;
424
+ }
425
+
426
+ .ts-public-shell__icon-link svg {
427
+ fill: currentColor;
428
+ height: 1.15rem;
429
+ width: 1.15rem;
430
+ }
431
+
432
+ .ts-public-shell__icon-link--stroke svg {
433
+ fill: none;
434
+ stroke: currentColor;
435
+ stroke-linecap: round;
436
+ stroke-linejoin: round;
437
+ stroke-width: 1.8;
438
+ }
439
+
329
440
  .ts-public-shell__main {
330
441
  display: grid;
331
442
  gap: var(--ts-space-3);
443
+ padding-top: clamp(1.25rem, 3vw, 2.25rem);
444
+ }
445
+
446
+ .ts-public-footer {
447
+ border-top: 2px solid var(--ts-color-border-strong);
448
+ display: block;
449
+ margin-top: 4rem;
450
+ padding-top: 2rem;
451
+ width: 100%;
452
+ }
453
+
454
+ .site-footer-cta + .ts-public-footer {
455
+ margin-top: 0;
456
+ }
457
+
458
+ .ts-public-footer__inner {
459
+ display: grid;
460
+ gap: 2rem;
461
+ margin-inline: auto;
462
+ max-width: var(--ts-content-width);
463
+ padding-bottom: 3.75rem;
464
+ width: 100%;
465
+ }
466
+
467
+ .ts-public-footer__grid {
468
+ display: flex;
469
+ flex-wrap: wrap;
470
+ gap: 2rem;
471
+ justify-content: center;
472
+ }
473
+
474
+ .ts-public-footer__column {
475
+ align-content: start;
476
+ display: grid;
477
+ gap: 0.75rem;
478
+ width: 16rem;
479
+ }
480
+
481
+ .ts-public-footer__title,
482
+ .ts-public-footer__column-title {
483
+ color: var(--ts-color-text);
484
+ font-size: 1.25rem;
485
+ font-weight: 750;
486
+ line-height: 1.2;
487
+ margin: 0;
488
+ }
489
+
490
+ .ts-public-footer__heading {
491
+ color: var(--ts-color-info-text);
492
+ font-size: 0.82rem;
493
+ font-weight: 750;
494
+ letter-spacing: 0.14em;
495
+ line-height: 1.2;
496
+ margin: 0;
497
+ text-transform: uppercase;
498
+ }
499
+
500
+ .ts-public-footer__copy,
501
+ .ts-public-footer__links {
502
+ color: var(--ts-color-text-muted);
503
+ font-size: 1rem;
504
+ line-height: 1.9;
505
+ margin: 0;
506
+ }
507
+
508
+ .ts-public-footer__links {
509
+ display: flex;
510
+ flex-direction: column;
511
+ gap: 0.35rem;
512
+ }
513
+
514
+ .ts-public-footer__links a {
515
+ color: var(--ts-color-text-muted);
516
+ display: block;
517
+ text-decoration: none;
518
+ }
519
+
520
+ .ts-public-footer__links a:hover,
521
+ .ts-public-footer__links a:focus-visible {
522
+ color: var(--ts-color-text);
523
+ text-decoration: underline;
332
524
  }
333
525
 
334
526
  @media (min-width: 48rem) {
@@ -387,12 +579,19 @@
387
579
  }
388
580
 
389
581
  .ts-top-bar {
390
- align-items: flex-start;
391
- flex-direction: column;
582
+ align-items: center;
583
+ flex-wrap: wrap;
392
584
  }
393
585
 
394
586
  .ts-top-bar__actions {
587
+ justify-content: flex-end;
588
+ }
589
+
590
+ .ts-public-shell__nav {
395
591
  justify-content: flex-start;
396
- width: 100%;
592
+ }
593
+
594
+ .ts-public-shell__menu {
595
+ inset-inline: 0 auto;
397
596
  }
398
597
  }
@@ -1,6 +1,10 @@
1
1
  @import "tailwindcss";
2
2
  @import "katex/dist/katex.min.css";
3
3
  @import "./tokens.css";
4
+ @import "./theme.css";
5
+ @import "./ui.css";
6
+ @import "./forms.css";
7
+ @import "./app-shell.css";
4
8
  @import "./prose.css";
5
9
 
6
10
  @theme {
@@ -573,9 +577,10 @@ button:focus-visible {
573
577
  width: 100vw;
574
578
  margin-left: calc(50% - 50vw);
575
579
  margin-right: calc(50% - 50vw);
576
- margin-bottom: -8rem;
580
+ margin-bottom: 0;
577
581
  background: var(--ts-color-canvas-subtle);
578
582
  border-top: 1px solid color-mix(in srgb, var(--ts-color-info) 36%, var(--ts-color-surface) 12%);
583
+ border-bottom: 1px solid var(--ts-color-border);
579
584
  }
580
585
 
581
586
  .site-footer-cta::before {
@@ -0,0 +1,53 @@
1
+ import { completeTokens } from "./shared.js";
2
+ const cedarScheme = {
3
+ id: "cedar",
4
+ name: "Cedar Clay",
5
+ swatches: ["#b86b3c", "#7d4528", "#fffdf8", "#2d241c"],
6
+ modeSwatches: {
7
+ light: ["#b86b3c", "#7d4528", "#fffdf8", "#2d241c"],
8
+ dark: ["#d98c5f", "#ffc59c", "#241b16", "#f1e7da"]
9
+ },
10
+ tokens: {
11
+ light: completeTokens({
12
+ canvas: "#f8f2e8",
13
+ canvasSubtle: "#efe3d2",
14
+ surface: "#fffdf8",
15
+ surfaceMuted: "#efe3d2",
16
+ surfaceRaised: "#fbf7ef",
17
+ text: "#2d241c",
18
+ textMuted: "#695746",
19
+ border: "#dccdb8",
20
+ borderStrong: "#bea98f",
21
+ accent: "#b86b3c",
22
+ accentHover: "#9a5731",
23
+ accentStrong: "#7d4528",
24
+ accentSoft: "#f1d9c8",
25
+ info: "#557f84",
26
+ success: "#5f7d45",
27
+ warning: "#9a6a21",
28
+ danger: "#a74435"
29
+ }, "light"),
30
+ dark: completeTokens({
31
+ canvas: "#181310",
32
+ canvasSubtle: "#241b16",
33
+ surface: "#241b16",
34
+ surfaceMuted: "#2d2119",
35
+ surfaceRaised: "#33261d",
36
+ text: "#f1e7da",
37
+ textMuted: "#c0ab98",
38
+ border: "#49382b",
39
+ borderStrong: "#655040",
40
+ accent: "#d98c5f",
41
+ accentHover: "#f0b184",
42
+ accentStrong: "#ffc59c",
43
+ accentSoft: "#3a241b",
44
+ info: "#83b0b3",
45
+ success: "#a1bf78",
46
+ warning: "#ddb76b",
47
+ danger: "#e88976"
48
+ }, "dark")
49
+ }
50
+ };
51
+ export {
52
+ cedarScheme
53
+ };
@@ -0,0 +1,53 @@
1
+ import { completeTokens } from "./shared.js";
2
+ const fernScheme = {
3
+ id: "fern",
4
+ name: "Fern Canopy",
5
+ swatches: ["#4f7d4e", "#2f5a35", "#ffffff", "#1f2a20"],
6
+ modeSwatches: {
7
+ light: ["#4f7d4e", "#2f5a35", "#ffffff", "#1f2a20"],
8
+ dark: ["#8bbb75", "#b9e69e", "#172016", "#e8f0e3"]
9
+ },
10
+ tokens: {
11
+ light: completeTokens({
12
+ canvas: "#f3f7ef",
13
+ canvasSubtle: "#e8efe1",
14
+ surface: "#ffffff",
15
+ surfaceMuted: "#e8efe1",
16
+ surfaceRaised: "#fafcf7",
17
+ text: "#1f2a20",
18
+ textMuted: "#51604d",
19
+ border: "#cdd8c6",
20
+ borderStrong: "#aebca6",
21
+ accent: "#4f7d4e",
22
+ accentHover: "#3f6f3f",
23
+ accentStrong: "#2f5a35",
24
+ accentSoft: "#dcebd6",
25
+ info: "#3a6f75",
26
+ success: "#287243",
27
+ warning: "#8a6a1f",
28
+ danger: "#a23e35"
29
+ }, "light"),
30
+ dark: completeTokens({
31
+ canvas: "#11170f",
32
+ canvasSubtle: "#172016",
33
+ surface: "#172016",
34
+ surfaceMuted: "#1e2b1b",
35
+ surfaceRaised: "#223020",
36
+ text: "#e8f0e3",
37
+ textMuted: "#a8b6a2",
38
+ border: "#344431",
39
+ borderStrong: "#4d6048",
40
+ accent: "#8bbb75",
41
+ accentHover: "#a9d88e",
42
+ accentStrong: "#b9e69e",
43
+ accentSoft: "#20351f",
44
+ info: "#7db9bd",
45
+ success: "#81c784",
46
+ warning: "#d6b45e",
47
+ danger: "#e07a6f"
48
+ }, "dark")
49
+ }
50
+ };
51
+ export {
52
+ fernScheme
53
+ };
@@ -0,0 +1,13 @@
1
+ import { cedarScheme } from "./cedar.js";
2
+ import { fernScheme } from "./fern.js";
3
+ import { lichenScheme } from "./lichen.js";
4
+ import { tidepoolScheme } from "./tidepool.js";
5
+ const BUILT_IN_COLOR_SCHEMES = [
6
+ fernScheme,
7
+ lichenScheme,
8
+ cedarScheme,
9
+ tidepoolScheme
10
+ ];
11
+ export {
12
+ BUILT_IN_COLOR_SCHEMES
13
+ };
@@ -0,0 +1,53 @@
1
+ import { completeTokens } from "./shared.js";
2
+ const lichenScheme = {
3
+ id: "lichen",
4
+ name: "Lichen Stone",
5
+ swatches: ["#6f8b67", "#4e6d49", "#ffffff", "#242923"],
6
+ modeSwatches: {
7
+ light: ["#6f8b67", "#4e6d49", "#ffffff", "#242923"],
8
+ dark: ["#9ab48a", "#c9dbbd", "#1a201d", "#e7ece5"]
9
+ },
10
+ tokens: {
11
+ light: completeTokens({
12
+ canvas: "#f4f5f1",
13
+ canvasSubtle: "#e7ebe3",
14
+ surface: "#ffffff",
15
+ surfaceMuted: "#e7ebe3",
16
+ surfaceRaised: "#fbfcf8",
17
+ text: "#242923",
18
+ textMuted: "#596057",
19
+ border: "#d2d8cf",
20
+ borderStrong: "#b7c0b2",
21
+ accent: "#6f8b67",
22
+ accentHover: "#5d7a56",
23
+ accentStrong: "#4e6d49",
24
+ accentSoft: "#e0eadc",
25
+ info: "#607d83",
26
+ success: "#537f54",
27
+ warning: "#8a7140",
28
+ danger: "#9d4c44"
29
+ }, "light"),
30
+ dark: completeTokens({
31
+ canvas: "#121614",
32
+ canvasSubtle: "#1a201d",
33
+ surface: "#1a201d",
34
+ surfaceMuted: "#222a25",
35
+ surfaceRaised: "#27302b",
36
+ text: "#e7ece5",
37
+ textMuted: "#a5aea4",
38
+ border: "#38423c",
39
+ borderStrong: "#515c55",
40
+ accent: "#9ab48a",
41
+ accentHover: "#bdd0ad",
42
+ accentStrong: "#c9dbbd",
43
+ accentSoft: "#243322",
44
+ info: "#8fb1b4",
45
+ success: "#94be8d",
46
+ warning: "#d0b577",
47
+ danger: "#db8579"
48
+ }, "dark")
49
+ }
50
+ };
51
+ export {
52
+ lichenScheme
53
+ };
@@ -0,0 +1,33 @@
1
+ function completeTokens(tokens, mode) {
2
+ return {
3
+ ...tokens,
4
+ surfaceOverlay: mode === "dark" ? "rgba(7, 12, 8, 0.72)" : "rgba(255, 255, 255, 0.88)",
5
+ textSubtle: tokens.textMuted,
6
+ textInverse: mode === "dark" ? "#11170f" : "#ffffff",
7
+ link: tokens.info,
8
+ linkHover: tokens.accentHover,
9
+ borderMuted: tokens.border,
10
+ focus: tokens.info,
11
+ accentText: mode === "dark" ? "#10170f" : "#ffffff",
12
+ infoSoft: mode === "dark" ? colorMix(tokens.info, tokens.canvas, 22) : colorMix(tokens.info, tokens.surface, 18),
13
+ infoText: tokens.info,
14
+ infoBorder: colorMix(tokens.info, tokens.border, mode === "dark" ? 48 : 42),
15
+ successSoft: mode === "dark" ? colorMix(tokens.success, tokens.canvas, 24) : colorMix(tokens.success, tokens.surface, 18),
16
+ successText: tokens.success,
17
+ successBorder: colorMix(tokens.success, tokens.border, mode === "dark" ? 48 : 42),
18
+ warningSoft: mode === "dark" ? colorMix(tokens.warning, tokens.canvas, 24) : colorMix(tokens.warning, tokens.surface, 18),
19
+ warningText: tokens.warning,
20
+ warningBorder: colorMix(tokens.warning, tokens.border, mode === "dark" ? 48 : 42),
21
+ dangerSoft: mode === "dark" ? colorMix(tokens.danger, tokens.canvas, 24) : colorMix(tokens.danger, tokens.surface, 16),
22
+ dangerText: tokens.danger,
23
+ dangerBorder: colorMix(tokens.danger, tokens.border, mode === "dark" ? 48 : 42),
24
+ shadow: mode === "dark" ? "0 16px 36px rgba(0, 0, 0, 0.28)" : "0 1px 2px rgba(31, 35, 40, 0.08)",
25
+ grid: mode === "dark" ? "rgba(160, 180, 150, 0.12)" : "rgba(80, 100, 74, 0.12)"
26
+ };
27
+ }
28
+ function colorMix(first, second, firstPercent) {
29
+ return `color-mix(in srgb, ${first} ${firstPercent}%, ${second})`;
30
+ }
31
+ export {
32
+ completeTokens
33
+ };
@@ -0,0 +1,53 @@
1
+ import { completeTokens } from "./shared.js";
2
+ const tidepoolScheme = {
3
+ id: "tidepool",
4
+ name: "Tidepool Dusk",
5
+ swatches: ["#3f8582", "#286462", "#ffffff", "#1d2928"],
6
+ modeSwatches: {
7
+ light: ["#3f8582", "#286462", "#ffffff", "#1d2928"],
8
+ dark: ["#73c5bd", "#b8eee8", "#162123", "#e2eeee"]
9
+ },
10
+ tokens: {
11
+ light: completeTokens({
12
+ canvas: "#eff7f5",
13
+ canvasSubtle: "#dfecea",
14
+ surface: "#ffffff",
15
+ surfaceMuted: "#dfecea",
16
+ surfaceRaised: "#f7fbfa",
17
+ text: "#1d2928",
18
+ textMuted: "#4f615f",
19
+ border: "#c9d9d7",
20
+ borderStrong: "#a9bfbc",
21
+ accent: "#3f8582",
22
+ accentHover: "#32726f",
23
+ accentStrong: "#286462",
24
+ accentSoft: "#d5ece9",
25
+ info: "#4c7899",
26
+ success: "#3d7b62",
27
+ warning: "#8b6e2f",
28
+ danger: "#a6453d"
29
+ }, "light"),
30
+ dark: completeTokens({
31
+ canvas: "#0f1718",
32
+ canvasSubtle: "#162123",
33
+ surface: "#162123",
34
+ surfaceMuted: "#1c2b2d",
35
+ surfaceRaised: "#223235",
36
+ text: "#e2eeee",
37
+ textMuted: "#9fb6b6",
38
+ border: "#304649",
39
+ borderStrong: "#496265",
40
+ accent: "#73c5bd",
41
+ accentHover: "#a2e1d9",
42
+ accentStrong: "#b8eee8",
43
+ accentSoft: "#1c3838",
44
+ info: "#8bbce5",
45
+ success: "#7cc6a1",
46
+ warning: "#d3b66a",
47
+ danger: "#e28074"
48
+ }, "dark")
49
+ }
50
+ };
51
+ export {
52
+ tidepoolScheme
53
+ };
@@ -1,3 +1,9 @@
1
+ import {
2
+ BOOKS as RUNTIME_BOOKS,
3
+ BOOKS_LINK as RUNTIME_BOOKS_LINK,
4
+ TREESEED_LIBRARY_DOWNLOAD as RUNTIME_TREESEED_LIBRARY_DOWNLOAD,
5
+ TREESEED_LINKS as RUNTIME_TREESEED_LINKS
6
+ } from "@treeseed/sdk/platform/books-data";
1
7
  const normalizeHref = (href) => href.endsWith("/") ? href : `${href}/`;
2
8
  function buildSidebarLink(href, label, currentPath) {
3
9
  return {
@@ -76,20 +82,20 @@ function getDocsDownloadForPathFromRuntime(runtime2, pathname) {
76
82
  downloadTitle: book.downloadTitle
77
83
  };
78
84
  }
79
- const BOOKS = [];
80
- const BOOKS_LINK = {
85
+ const BOOKS = RUNTIME_BOOKS ?? [];
86
+ const BOOKS_LINK = RUNTIME_BOOKS_LINK ?? {
81
87
  label: "Books",
82
- link: "/knowledge/"
88
+ link: "/books/"
83
89
  };
84
- const TREESEED_LIBRARY_DOWNLOAD = {
90
+ const TREESEED_LIBRARY_DOWNLOAD = RUNTIME_TREESEED_LIBRARY_DOWNLOAD ?? {
85
91
  downloadFileName: "treeseed-knowledge.md",
86
92
  downloadHref: "/books/treeseed-knowledge.md",
87
93
  downloadTitle: "TreeSeed Knowledge Library"
88
94
  };
89
- const TREESEED_LINKS = {
90
- home: "/knowledge/"
95
+ const TREESEED_LINKS = RUNTIME_TREESEED_LINKS ?? {
96
+ home: "/books/"
91
97
  };
92
- const runtime = { BOOKS, BOOKS_LINK, TREESEED_LIBRARY_DOWNLOAD, TREESEED_LINKS };
98
+ const runtime = typeof __TREESEED_BOOK_RUNTIME__ !== "undefined" ? __TREESEED_BOOK_RUNTIME__ : { BOOKS, BOOKS_LINK, TREESEED_LIBRARY_DOWNLOAD, TREESEED_LINKS };
93
99
  function buildBookSidebar(bookSlug) {
94
100
  return buildBookSidebarFromRuntime(runtime, bookSlug);
95
101
  }