@farming-labs/svelte-theme 0.1.45 → 0.1.47

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/svelte-theme",
3
- "version": "0.1.45",
3
+ "version": "0.1.47",
4
4
  "description": "Svelte UI components for @farming-labs/docs — layout, sidebar, TOC, search, and theme toggle",
5
5
  "keywords": [
6
6
  "docs",
@@ -112,8 +112,8 @@
112
112
  "dependencies": {
113
113
  "gray-matter": "^4.0.3",
114
114
  "sugar-high": "^0.9.5",
115
- "@farming-labs/docs": "0.1.45",
116
- "@farming-labs/svelte": "0.1.45"
115
+ "@farming-labs/docs": "0.1.47",
116
+ "@farming-labs/svelte": "0.1.47"
117
117
  },
118
118
  "peerDependencies": {
119
119
  "svelte": ">=5.0.0"
@@ -1,4 +1,5 @@
1
1
  <script>
2
+ import { resolveReadingTimeOptions } from "@farming-labs/docs";
2
3
  import DocsPage from "./DocsPage.svelte";
3
4
  import { onMount, onDestroy } from "svelte";
4
5
 
@@ -124,6 +125,26 @@
124
125
  );
125
126
  let showActionsAbove = $derived(pageActionsPosition === "above-title" && showPageActions);
126
127
  let showActionsBelow = $derived(pageActionsPosition === "below-title" && showPageActions);
128
+ let readingTimeConfig = $derived.by(() => {
129
+ return resolveReadingTimeOptions(config?.readingTime);
130
+ });
131
+ let readingTimeValue = $derived(
132
+ readingTimeConfig.enabled && typeof data.readingTime === "number"
133
+ ? Math.max(1, Math.ceil(data.readingTime))
134
+ : null
135
+ );
136
+ let readingTimeLabel = $derived(readingTimeValue ? `${readingTimeValue} min read` : null);
137
+ let showReadingTimeAbove = $derived(!!readingTimeLabel && showActionsAbove);
138
+ let showReadingTimeBelow = $derived(
139
+ !!readingTimeLabel &&
140
+ !showReadingTimeAbove &&
141
+ (showActionsBelow ||
142
+ showLastUpdatedBelowTitle ||
143
+ (!showPageActions && pageActionsPosition === "below-title"))
144
+ );
145
+ let showReadingTimeStandalone = $derived(
146
+ !!readingTimeLabel && !showReadingTimeAbove && !showReadingTimeBelow
147
+ );
127
148
  let feedbackPathKey = $derived(
128
149
  `${data.locale ?? ""}:${data.entry ?? config?.entry ?? "docs"}:${data.slug ?? ""}`
129
150
  );
@@ -373,6 +394,18 @@
373
394
  {/if}
374
395
  </div>
375
396
  {/if}
397
+ {#if showReadingTimeAbove}
398
+ <div class="fd-page-meta">
399
+ <span class="fd-page-meta-dot" aria-hidden="true">·</span>
400
+ <span class="fd-page-meta-item">{readingTimeLabel}</span>
401
+ </div>
402
+ {/if}
403
+ {#if showReadingTimeStandalone}
404
+ <div class="fd-page-meta">
405
+ <span class="fd-page-meta-dot" aria-hidden="true">·</span>
406
+ <span class="fd-page-meta-item">{readingTimeLabel}</span>
407
+ </div>
408
+ {/if}
376
409
 
377
410
  <h1 class="fd-page-title">{data.title}</h1>
378
411
  {#if data.description}
@@ -383,6 +416,12 @@
383
416
  Last updated: {data.lastModified}
384
417
  </p>
385
418
  {/if}
419
+ {#if showReadingTimeBelow && !showActionsBelow}
420
+ <div class="fd-page-meta">
421
+ <span class="fd-page-meta-dot" aria-hidden="true">·</span>
422
+ <span class="fd-page-meta-item">{readingTimeLabel}</span>
423
+ </div>
424
+ {/if}
386
425
 
387
426
  {#if showActionsBelow}
388
427
  <hr class="fd-page-actions-divider" aria-hidden="true" />
@@ -444,6 +483,12 @@
444
483
  </div>
445
484
  {/if}
446
485
  </div>
486
+ {#if showReadingTimeBelow}
487
+ <div class="fd-page-meta">
488
+ <span class="fd-page-meta-dot" aria-hidden="true">·</span>
489
+ <span class="fd-page-meta-item">{readingTimeLabel}</span>
490
+ </div>
491
+ {/if}
447
492
  {/if}
448
493
 
449
494
  {@html htmlWithoutFirstH1}
package/styles/docs.css CHANGED
@@ -745,6 +745,33 @@ samp {
745
745
  margin-bottom: 1rem;
746
746
  }
747
747
 
748
+ .fd-page-meta {
749
+ display: flex;
750
+ flex-wrap: wrap;
751
+ align-items: center;
752
+ gap: 0.375rem;
753
+ margin-bottom: 0.75rem;
754
+ }
755
+
756
+ .fd-page-meta-dot {
757
+ display: inline-flex;
758
+ align-items: center;
759
+ justify-content: center;
760
+ font-family: var(--fd-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace);
761
+ font-size: 0.8rem;
762
+ line-height: 1;
763
+ color: color-mix(in srgb, var(--color-fd-muted-foreground) 78%, transparent);
764
+ }
765
+
766
+ .fd-page-meta-item {
767
+ font-family: var(--fd-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace);
768
+ font-size: 0.6875rem;
769
+ font-weight: 500;
770
+ letter-spacing: 0;
771
+ text-transform: uppercase;
772
+ color: var(--color-fd-muted-foreground);
773
+ }
774
+
748
775
  .fd-feedback {
749
776
  margin-top: 2rem;
750
777
  margin-bottom: 1.25rem;