@farming-labs/svelte-theme 0.0.7 → 0.0.9-beta.1
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 +3 -3
- package/src/components/DocsLayout.svelte +26 -19
- package/styles/colorful.css +108 -0
- package/styles/docs.css +0 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farming-labs/svelte-theme",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9-beta.1",
|
|
4
4
|
"description": "Svelte UI components for @farming-labs/docs — layout, sidebar, TOC, search, and theme toggle",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"docs",
|
|
@@ -82,8 +82,8 @@
|
|
|
82
82
|
"dependencies": {
|
|
83
83
|
"gray-matter": "^4.0.3",
|
|
84
84
|
"sugar-high": "^0.9.5",
|
|
85
|
-
"@farming-labs/
|
|
86
|
-
"@farming-labs/
|
|
85
|
+
"@farming-labs/svelte": "0.0.9-beta.1",
|
|
86
|
+
"@farming-labs/docs": "0.0.9-beta.1"
|
|
87
87
|
},
|
|
88
88
|
"peerDependencies": {
|
|
89
89
|
"svelte": ">=5.0.0"
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
|
|
21
21
|
let resolvedTitle = $derived(title ?? config?.nav?.title ?? "Docs");
|
|
22
22
|
let resolvedTitleUrl = $derived(titleUrl ?? config?.nav?.url ?? "/docs");
|
|
23
|
+
let staticExport = $derived(!!(config && config.staticExport));
|
|
24
|
+
let showSearch = $derived(!staticExport);
|
|
25
|
+
let showFloatingAI = $derived(!staticExport && config?.ai?.mode === "floating" && !!config?.ai?.enabled);
|
|
23
26
|
|
|
24
27
|
let showThemeToggle = $derived.by(() => {
|
|
25
28
|
const toggle = config?.themeToggle;
|
|
@@ -78,7 +81,7 @@
|
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
function handleKeydown(e) {
|
|
81
|
-
if ((e.metaKey || e.ctrlKey) && e.key === "k") {
|
|
84
|
+
if (showSearch && (e.metaKey || e.ctrlKey) && e.key === "k") {
|
|
82
85
|
e.preventDefault();
|
|
83
86
|
searchOpen = !searchOpen;
|
|
84
87
|
}
|
|
@@ -224,12 +227,14 @@
|
|
|
224
227
|
</svg>
|
|
225
228
|
</button>
|
|
226
229
|
<a href={resolvedTitleUrl} class="fd-header-title">{resolvedTitle}</a>
|
|
227
|
-
|
|
228
|
-
<
|
|
229
|
-
<
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
230
|
+
{#if showSearch}
|
|
231
|
+
<button class="fd-search-trigger-mobile" onclick={openSearch} aria-label="Search">
|
|
232
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
|
|
233
|
+
<circle cx="11" cy="11" r="8" />
|
|
234
|
+
<line x1="21" y1="21" x2="16.65" y2="16.65" />
|
|
235
|
+
</svg>
|
|
236
|
+
</button>
|
|
237
|
+
{/if}
|
|
233
238
|
</header>
|
|
234
239
|
|
|
235
240
|
{#if sidebarOpen}
|
|
@@ -248,16 +253,18 @@
|
|
|
248
253
|
</a>
|
|
249
254
|
</div>
|
|
250
255
|
|
|
251
|
-
|
|
252
|
-
<
|
|
253
|
-
<
|
|
254
|
-
<
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
256
|
+
{#if showSearch}
|
|
257
|
+
<div class="fd-sidebar-search">
|
|
258
|
+
<button class="fd-sidebar-search-btn" onclick={openSearch}>
|
|
259
|
+
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
|
|
260
|
+
<circle cx="11" cy="11" r="8" />
|
|
261
|
+
<line x1="21" y1="21" x2="16.65" y2="16.65" />
|
|
262
|
+
</svg>
|
|
263
|
+
<span>Search</span>
|
|
264
|
+
<kbd>⌘</kbd><kbd>K</kbd>
|
|
265
|
+
</button>
|
|
266
|
+
</div>
|
|
267
|
+
{/if}
|
|
261
268
|
|
|
262
269
|
{#if sidebarHeader}
|
|
263
270
|
<div class="fd-sidebar-banner">
|
|
@@ -390,7 +397,7 @@
|
|
|
390
397
|
</main>
|
|
391
398
|
</div>
|
|
392
399
|
|
|
393
|
-
{#if
|
|
400
|
+
{#if showFloatingAI}
|
|
394
401
|
<FloatingAIChat
|
|
395
402
|
suggestedQuestions={config.ai.suggestedQuestions ?? []}
|
|
396
403
|
aiLabel={config.ai.aiLabel ?? "AI"}
|
|
@@ -400,6 +407,6 @@
|
|
|
400
407
|
/>
|
|
401
408
|
{/if}
|
|
402
409
|
|
|
403
|
-
{#if searchOpen}
|
|
410
|
+
{#if showSearch && searchOpen}
|
|
404
411
|
<SearchDialog onclose={closeSearch} />
|
|
405
412
|
{/if}
|
package/styles/colorful.css
CHANGED
|
@@ -102,6 +102,114 @@
|
|
|
102
102
|
caret-color: var(--color-fd-primary);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
/* ─── Sidebar AI trigger (sidebar-icon mode) — search + Ask AI row ───── */
|
|
106
|
+
|
|
107
|
+
.fd-sidebar-search-ai-row {
|
|
108
|
+
display: flex;
|
|
109
|
+
gap: 10px;
|
|
110
|
+
align-items: stretch;
|
|
111
|
+
width: 100%;
|
|
112
|
+
margin-bottom: 2px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.fd-sidebar-search-ai-row .fd-sidebar-search-btn {
|
|
116
|
+
flex: 1;
|
|
117
|
+
min-width: 0;
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
gap: 8px;
|
|
121
|
+
padding: 8px 12px;
|
|
122
|
+
font-size: 0.875rem;
|
|
123
|
+
color: var(--color-fd-muted-foreground);
|
|
124
|
+
background: transparent;
|
|
125
|
+
border: 1px solid var(--color-fd-border);
|
|
126
|
+
border-radius: 8px;
|
|
127
|
+
cursor: pointer;
|
|
128
|
+
transition: background-color 150ms, border-color 150ms, color 150ms;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.fd-sidebar-search-ai-row .fd-sidebar-search-btn:hover {
|
|
132
|
+
background: var(--color-fd-accent);
|
|
133
|
+
color: var(--color-fd-foreground);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.fd-sidebar-search-ai-row .fd-sidebar-search-btn svg {
|
|
137
|
+
flex-shrink: 0;
|
|
138
|
+
width: 16px;
|
|
139
|
+
height: 16px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.fd-sidebar-search-ai-row .fd-sidebar-search-kbd {
|
|
143
|
+
display: flex;
|
|
144
|
+
gap: 2px;
|
|
145
|
+
margin-left: auto;
|
|
146
|
+
font-size: 0.75rem;
|
|
147
|
+
opacity: 0.8;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.fd-sidebar-search-ai-row .fd-sidebar-search-kbd kbd {
|
|
151
|
+
font-family: inherit;
|
|
152
|
+
font-size: 0.7rem;
|
|
153
|
+
padding: 2px 5px;
|
|
154
|
+
border: 1px solid var(--color-fd-border);
|
|
155
|
+
border-radius: 4px;
|
|
156
|
+
background: var(--color-fd-muted);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.fd-sidebar-search-ai-row .fd-sidebar-ai-btn {
|
|
160
|
+
display: inline-flex;
|
|
161
|
+
align-items: center;
|
|
162
|
+
justify-content: center;
|
|
163
|
+
width: 38px;
|
|
164
|
+
min-width: 38px;
|
|
165
|
+
flex-shrink: 0;
|
|
166
|
+
border-radius: 8px;
|
|
167
|
+
border: 1px solid var(--color-fd-border);
|
|
168
|
+
background: transparent;
|
|
169
|
+
color: var(--color-fd-muted-foreground);
|
|
170
|
+
cursor: pointer;
|
|
171
|
+
transition: background-color 150ms, color 150ms, border-color 150ms;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.fd-sidebar-search-ai-row .fd-sidebar-ai-btn:hover {
|
|
175
|
+
background: var(--color-fd-accent);
|
|
176
|
+
color: var(--color-fd-primary);
|
|
177
|
+
border-color: var(--color-fd-primary);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.fd-sidebar-search-ai-row .fd-sidebar-ai-btn svg {
|
|
181
|
+
width: 16px;
|
|
182
|
+
height: 16px;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.dark .fd-sidebar .fd-sidebar-search-ai-row .fd-sidebar-search-btn {
|
|
186
|
+
background: var(--color-fd-secondary);
|
|
187
|
+
border-color: var(--color-fd-border);
|
|
188
|
+
color: var(--color-fd-muted-foreground);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.dark .fd-sidebar .fd-sidebar-search-ai-row .fd-sidebar-search-btn:hover {
|
|
192
|
+
background: var(--color-fd-accent);
|
|
193
|
+
color: var(--color-fd-foreground);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.dark .fd-sidebar .fd-sidebar-search-ai-row .fd-sidebar-search-kbd kbd {
|
|
197
|
+
background: var(--color-fd-muted);
|
|
198
|
+
border-color: var(--color-fd-border);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.dark .fd-sidebar .fd-sidebar-search-ai-row .fd-sidebar-ai-btn {
|
|
202
|
+
background: var(--color-fd-secondary);
|
|
203
|
+
border-color: var(--color-fd-border);
|
|
204
|
+
color: var(--color-fd-muted-foreground);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.dark .fd-sidebar .fd-sidebar-search-ai-row .fd-sidebar-ai-btn:hover {
|
|
208
|
+
background: var(--color-fd-accent);
|
|
209
|
+
color: var(--color-fd-primary);
|
|
210
|
+
border-color: var(--color-fd-primary);
|
|
211
|
+
}
|
|
212
|
+
|
|
105
213
|
/* ─── Page Actions — colorful theme ────────────────────────────────── */
|
|
106
214
|
|
|
107
215
|
.fd-page-action-btn {
|
package/styles/docs.css
CHANGED
|
@@ -2262,7 +2262,6 @@ html.dark pre.shiki {
|
|
|
2262
2262
|
transform: scale(0.97);
|
|
2263
2263
|
}
|
|
2264
2264
|
|
|
2265
|
-
/* Dark mode: floating button and trigger use dark-friendly colors */
|
|
2266
2265
|
.dark .fd-ai-floating-btn,
|
|
2267
2266
|
.dark .fd-ai-fm-trigger-btn {
|
|
2268
2267
|
background: color-mix(in srgb, var(--color-fd-secondary, rgba(255, 255, 255, 0.08)) 90%, transparent);
|
|
@@ -2283,8 +2282,6 @@ html.dark pre.shiki {
|
|
|
2283
2282
|
animation: fd-ai-fade-in 300ms ease-out;
|
|
2284
2283
|
}
|
|
2285
2284
|
|
|
2286
|
-
/* Custom Ask AI trigger (e.g. triggerComponent): same base as .fd-ai-floating-btn
|
|
2287
|
-
so theme overrides for fd-ai-floating-btn can also target .ask-ai-trigger */
|
|
2288
2285
|
.fd-ai-floating-trigger .ask-ai-trigger {
|
|
2289
2286
|
display: flex;
|
|
2290
2287
|
align-items: center;
|