@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/svelte-theme",
3
- "version": "0.0.7",
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/docs": "0.0.7",
86
- "@farming-labs/svelte": "0.0.7"
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
- <button class="fd-search-trigger-mobile" onclick={openSearch} aria-label="Search">
228
- <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
229
- <circle cx="11" cy="11" r="8" />
230
- <line x1="21" y1="21" x2="16.65" y2="16.65" />
231
- </svg>
232
- </button>
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
- <div class="fd-sidebar-search">
252
- <button class="fd-sidebar-search-btn" onclick={openSearch}>
253
- <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
254
- <circle cx="11" cy="11" r="8" />
255
- <line x1="21" y1="21" x2="16.65" y2="16.65" />
256
- </svg>
257
- <span>Search</span>
258
- <kbd>&#8984;</kbd><kbd>K</kbd>
259
- </button>
260
- </div>
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>&#8984;</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 config?.ai?.mode === "floating" && config?.ai?.enabled}
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}
@@ -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;