@farming-labs/svelte-theme 0.0.2-beta.11 → 0.0.2-beta.13
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.0.2-beta.
|
|
3
|
+
"version": "0.0.2-beta.13",
|
|
4
4
|
"description": "Svelte UI components for @farming-labs/docs — layout, sidebar, TOC, search, and theme toggle",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"svelte": "./src/index.js",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"gray-matter": "^4.0.3",
|
|
51
51
|
"sugar-high": "^0.9.5",
|
|
52
|
-
"@farming-labs/docs": "0.0.2-beta.
|
|
53
|
-
"@farming-labs/svelte": "0.0.2-beta.
|
|
52
|
+
"@farming-labs/docs": "0.0.2-beta.13",
|
|
53
|
+
"@farming-labs/svelte": "0.0.2-beta.13"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"svelte": ">=5.0.0"
|
|
@@ -8,6 +8,24 @@
|
|
|
8
8
|
? config.metadata.titleTemplate.replace("%s", "")
|
|
9
9
|
: " – Docs"
|
|
10
10
|
);
|
|
11
|
+
|
|
12
|
+
let tocEnabled = $derived(
|
|
13
|
+
config?.theme?.ui?.layout?.toc?.enabled ?? true
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
let breadcrumbEnabled = $derived.by(() => {
|
|
17
|
+
const bc = config?.breadcrumb;
|
|
18
|
+
if (bc === undefined || bc === true) return true;
|
|
19
|
+
if (bc === false) return false;
|
|
20
|
+
if (typeof bc === "object") return bc.enabled !== false;
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
let showEditOnGithub = $derived(
|
|
25
|
+
!!config?.github && !!data.editOnGithub
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
let showLastModified = $derived(!!data.lastModified);
|
|
11
29
|
</script>
|
|
12
30
|
|
|
13
31
|
<svelte:head>
|
|
@@ -19,12 +37,12 @@
|
|
|
19
37
|
|
|
20
38
|
<DocsPage
|
|
21
39
|
entry={config?.entry ?? "docs"}
|
|
22
|
-
tocEnabled
|
|
23
|
-
breadcrumbEnabled
|
|
40
|
+
{tocEnabled}
|
|
41
|
+
{breadcrumbEnabled}
|
|
24
42
|
previousPage={data.previousPage}
|
|
25
43
|
nextPage={data.nextPage}
|
|
26
|
-
editOnGithub={data.editOnGithub}
|
|
27
|
-
lastModified={data.lastModified}
|
|
44
|
+
editOnGithub={showEditOnGithub ? data.editOnGithub : null}
|
|
45
|
+
lastModified={showLastModified ? data.lastModified : null}
|
|
28
46
|
>
|
|
29
47
|
{#snippet children()}
|
|
30
48
|
{@html data.html}
|
|
@@ -3,19 +3,56 @@
|
|
|
3
3
|
import AskAIDialog from "./AskAIDialog.svelte";
|
|
4
4
|
import FloatingAIChat from "./FloatingAIChat.svelte";
|
|
5
5
|
import { page } from "$app/stores";
|
|
6
|
+
import { onMount } from "svelte";
|
|
6
7
|
|
|
7
8
|
let {
|
|
8
9
|
tree,
|
|
9
10
|
config = null,
|
|
10
11
|
title = undefined,
|
|
11
12
|
titleUrl = undefined,
|
|
12
|
-
themeToggle = true,
|
|
13
13
|
children,
|
|
14
14
|
} = $props();
|
|
15
15
|
|
|
16
16
|
let resolvedTitle = $derived(title ?? config?.nav?.title ?? "Docs");
|
|
17
17
|
let resolvedTitleUrl = $derived(titleUrl ?? config?.nav?.url ?? "/docs");
|
|
18
18
|
|
|
19
|
+
let showThemeToggle = $derived.by(() => {
|
|
20
|
+
const toggle = config?.themeToggle;
|
|
21
|
+
if (toggle === undefined || toggle === true) return true;
|
|
22
|
+
if (toggle === false) return false;
|
|
23
|
+
if (typeof toggle === "object") return toggle.enabled !== false;
|
|
24
|
+
return true;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
let forcedTheme = $derived.by(() => {
|
|
28
|
+
const toggle = config?.themeToggle;
|
|
29
|
+
if (typeof toggle === "object" && toggle.enabled === false && toggle.default && toggle.default !== "system") {
|
|
30
|
+
return toggle.default;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
let themeInitScript = $derived.by(() => {
|
|
36
|
+
if (forcedTheme) {
|
|
37
|
+
return `document.documentElement.classList.remove('light','dark');document.documentElement.classList.add('${forcedTheme}')`;
|
|
38
|
+
}
|
|
39
|
+
return [
|
|
40
|
+
"(function(){",
|
|
41
|
+
"var m=document.cookie.match(/(?:^|;\\s*)theme=(\\w+)/);",
|
|
42
|
+
"var t=m?m[1]:(window.matchMedia('(prefers-color-scheme:dark)').matches?'dark':'light');",
|
|
43
|
+
"document.documentElement.classList.remove('light','dark');",
|
|
44
|
+
"document.documentElement.classList.add(t);",
|
|
45
|
+
"})()",
|
|
46
|
+
].join("");
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
onMount(() => {
|
|
50
|
+
if (forcedTheme) {
|
|
51
|
+
document.documentElement.classList.remove("light", "dark");
|
|
52
|
+
document.documentElement.classList.add(forcedTheme);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
19
56
|
let sidebarOpen = $state(false);
|
|
20
57
|
let searchOpen = $state(false);
|
|
21
58
|
|
|
@@ -82,6 +119,10 @@
|
|
|
82
119
|
|
|
83
120
|
<svelte:window onkeydown={handleKeydown} />
|
|
84
121
|
|
|
122
|
+
<svelte:head>
|
|
123
|
+
{@html `<script>${themeInitScript}</script>`}
|
|
124
|
+
</svelte:head>
|
|
125
|
+
|
|
85
126
|
<div class="fd-layout">
|
|
86
127
|
<!-- Mobile header -->
|
|
87
128
|
<header class="fd-header">
|
|
@@ -227,7 +268,7 @@
|
|
|
227
268
|
{/if}
|
|
228
269
|
</nav>
|
|
229
270
|
|
|
230
|
-
{#if
|
|
271
|
+
{#if showThemeToggle}
|
|
231
272
|
<div class="fd-sidebar-footer">
|
|
232
273
|
<ThemeToggle />
|
|
233
274
|
</div>
|
|
@@ -8,7 +8,14 @@
|
|
|
8
8
|
let theme = $state("light");
|
|
9
9
|
|
|
10
10
|
onMount(() => {
|
|
11
|
-
|
|
11
|
+
if (document.documentElement.classList.contains("dark")) {
|
|
12
|
+
theme = "dark";
|
|
13
|
+
} else if (document.documentElement.classList.contains("light")) {
|
|
14
|
+
theme = "light";
|
|
15
|
+
} else {
|
|
16
|
+
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
|
17
|
+
document.documentElement.classList.add(theme);
|
|
18
|
+
}
|
|
12
19
|
});
|
|
13
20
|
|
|
14
21
|
function toggle() {
|