@farming-labs/svelte-theme 0.0.3-beta.2 → 0.0.3-beta.4

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.
@@ -0,0 +1,362 @@
1
+ /* ═══════════════════════════════════════════════════════════════════
2
+ * Omni Command Palette — pixel-perfect sync with website/components/ui/omni-command-palette.tsx
3
+ * Uses same CSS variables as docs so it auto-adapts to every theme.
4
+ * ═══════════════════════════════════════════════════════════════════ */
5
+
6
+ @keyframes omni-fade-in {
7
+ from {
8
+ opacity: 0;
9
+ }
10
+ to {
11
+ opacity: 1;
12
+ }
13
+ }
14
+ @keyframes omni-fade-out {
15
+ from {
16
+ opacity: 1;
17
+ }
18
+ to {
19
+ opacity: 0;
20
+ }
21
+ }
22
+ @keyframes omni-scale-in {
23
+ from {
24
+ opacity: 0;
25
+ transform: translateX(-50%) scale(0.96) translateY(-4px);
26
+ }
27
+ to {
28
+ opacity: 1;
29
+ transform: translateX(-50%) scale(1) translateY(0);
30
+ }
31
+ }
32
+ @keyframes omni-scale-out {
33
+ from {
34
+ opacity: 1;
35
+ transform: translateX(-50%) scale(1) translateY(0);
36
+ }
37
+ to {
38
+ opacity: 0;
39
+ transform: translateX(-50%) scale(0.96) translateY(-4px);
40
+ }
41
+ }
42
+
43
+ @keyframes omni-spin {
44
+ from {
45
+ transform: rotate(0deg);
46
+ }
47
+ to {
48
+ transform: rotate(360deg);
49
+ }
50
+ }
51
+
52
+ .omni-spin {
53
+ animation: omni-spin 1s linear infinite;
54
+ }
55
+
56
+ .omni-overlay {
57
+ position: fixed;
58
+ inset: 0;
59
+ z-index: 100;
60
+ background: rgba(0, 0, 0, 0.55);
61
+ backdrop-filter: blur(4px);
62
+ animation: omni-fade-in 150ms ease-out;
63
+ }
64
+
65
+ .omni-content {
66
+ position: fixed;
67
+ z-index: 101;
68
+ top: 18%;
69
+ left: 50%;
70
+ transform: translateX(-50%);
71
+ width: min(720px, calc(100% - 32px));
72
+ border-radius: var(--radius, 0.75rem);
73
+ border: 1px solid var(--color-fd-border, #262626);
74
+ background: var(--color-fd-popover, #0c0c0c);
75
+ color: var(--color-fd-foreground, #fafafa);
76
+ box-shadow:
77
+ 0 24px 60px -12px rgba(0, 0, 0, 0.5),
78
+ 0 0 0 1px rgba(255, 255, 255, 0.04);
79
+ outline: none;
80
+ overflow: hidden;
81
+ animation: omni-scale-in 200ms cubic-bezier(0.16, 1, 0.3, 1);
82
+ }
83
+
84
+ @media (max-width: 639px) {
85
+ .omni-content {
86
+ top: 10%;
87
+ width: calc(100% - 24px);
88
+ max-height: 75vh;
89
+ }
90
+ .omni-kbd {
91
+ display: none;
92
+ }
93
+ }
94
+
95
+ /* Header */
96
+ .omni-header {
97
+ border-bottom: 1px solid var(--color-fd-border, #262626);
98
+ }
99
+ .omni-search-row {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 0.5rem;
103
+ padding: 0.625rem 0.875rem;
104
+ }
105
+ .omni-search-icon {
106
+ color: var(--color-fd-muted-foreground, #a3a3a3);
107
+ flex-shrink: 0;
108
+ }
109
+ .omni-search-input {
110
+ flex: 1;
111
+ background: transparent;
112
+ outline: none;
113
+ font-size: 0.875rem;
114
+ line-height: 1.25rem;
115
+ color: var(--color-fd-foreground, #fafafa);
116
+ border: none;
117
+ }
118
+ .omni-search-input::placeholder {
119
+ color: var(--color-fd-muted-foreground, #a3a3a3);
120
+ }
121
+ .omni-kbd {
122
+ border-radius: 0.25rem;
123
+ background: var(--color-fd-muted, #262626);
124
+ padding: 0.125rem 0.375rem;
125
+ font-size: 10px;
126
+ color: var(--color-fd-muted-foreground, #a3a3a3);
127
+ font-family: inherit;
128
+ line-height: 1.4;
129
+ }
130
+ .omni-close-btn {
131
+ margin-left: 0.25rem;
132
+ border-radius: 0.25rem;
133
+ padding: 0.25rem;
134
+ color: var(--color-fd-muted-foreground, #a3a3a3);
135
+ transition: background 120ms;
136
+ cursor: pointer;
137
+ border: none;
138
+ background: none;
139
+ }
140
+ .omni-close-btn:hover {
141
+ background: var(--color-fd-muted, #262626);
142
+ }
143
+
144
+ /* Body / listbox */
145
+ .omni-body {
146
+ max-height: 60vh;
147
+ overflow: auto;
148
+ padding: 0.25rem;
149
+ }
150
+ .omni-body::-webkit-scrollbar {
151
+ width: 6px;
152
+ }
153
+ .omni-body::-webkit-scrollbar-track {
154
+ background: transparent;
155
+ }
156
+ .omni-body::-webkit-scrollbar-thumb {
157
+ background: var(--color-fd-muted, #262626);
158
+ border-radius: 3px;
159
+ }
160
+
161
+ /* Loading */
162
+ .omni-loading {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 0.5rem;
166
+ padding: 0.5rem 0.75rem;
167
+ color: var(--color-fd-muted-foreground, #a3a3a3);
168
+ font-size: 0.75rem;
169
+ }
170
+
171
+ /* Groups */
172
+ .omni-group {
173
+ padding: 0.25rem 0;
174
+ }
175
+ .omni-group-label {
176
+ padding: 0.25rem 0.75rem;
177
+ font-size: 10px;
178
+ text-transform: uppercase;
179
+ letter-spacing: 0.06em;
180
+ color: var(--color-fd-muted-foreground, #a3a3a3);
181
+ font-weight: 500;
182
+ }
183
+ .omni-group-items {
184
+ display: flex;
185
+ flex-direction: column;
186
+ }
187
+
188
+ /* Items */
189
+ .omni-item {
190
+ display: flex;
191
+ width: 100%;
192
+ align-items: center;
193
+ gap: 0.75rem;
194
+ border-radius: calc(var(--radius, 0.75rem) - 4px);
195
+ padding: 0.5rem 0.75rem;
196
+ text-align: left;
197
+ font-size: 0.875rem;
198
+ line-height: 1.25rem;
199
+ cursor: pointer;
200
+ border: none;
201
+ background: transparent;
202
+ color: var(--color-fd-foreground, #fafafa);
203
+ transition: background 80ms;
204
+ }
205
+ .omni-item:hover,
206
+ .omni-item-active {
207
+ background: color-mix(in srgb, var(--color-fd-accent, #262626) 60%, transparent);
208
+ }
209
+ .omni-item-active {
210
+ color: var(--color-fd-accent-foreground, #fafafa);
211
+ }
212
+ .omni-item-disabled {
213
+ opacity: 0.5;
214
+ cursor: not-allowed;
215
+ }
216
+
217
+ .omni-item-icon {
218
+ flex-shrink: 0;
219
+ color: var(--color-fd-muted-foreground, #a3a3a3);
220
+ }
221
+ .omni-item-active .omni-item-icon {
222
+ color: var(--color-fd-accent-foreground, #fafafa);
223
+ }
224
+ .omni-item-text {
225
+ flex: 1;
226
+ min-width: 0;
227
+ }
228
+ .omni-item-label {
229
+ overflow: hidden;
230
+ text-overflow: ellipsis;
231
+ white-space: nowrap;
232
+ }
233
+ .omni-item-subtitle {
234
+ overflow: hidden;
235
+ text-overflow: ellipsis;
236
+ white-space: nowrap;
237
+ font-size: 0.75rem;
238
+ color: var(--color-fd-muted-foreground, #a3a3a3);
239
+ opacity: 0.8;
240
+ }
241
+ .omni-item-active .omni-item-subtitle {
242
+ color: var(--color-fd-accent-foreground, #fafafa);
243
+ opacity: 0.7;
244
+ }
245
+ .omni-item-badge {
246
+ color: var(--color-fd-muted-foreground, #a3a3a3);
247
+ flex-shrink: 0;
248
+ }
249
+ a.omni-item-badge:hover {
250
+ color: var(--color-fd-foreground, #fafafa);
251
+ }
252
+ .omni-item-ext {
253
+ position: relative;
254
+ z-index: 2;
255
+ display: inline-flex;
256
+ align-items: center;
257
+ justify-content: center;
258
+ padding: 0.25rem;
259
+ border-radius: 0.25rem;
260
+ color: var(--color-fd-muted-foreground, #a3a3a3);
261
+ flex-shrink: 0;
262
+ transition:
263
+ color 100ms,
264
+ background 100ms;
265
+ text-decoration: none;
266
+ }
267
+ .omni-item-ext:hover {
268
+ color: var(--color-fd-foreground, #fafafa);
269
+ background: var(--color-fd-muted, #262626);
270
+ }
271
+ .omni-item-shortcuts {
272
+ display: none;
273
+ align-items: center;
274
+ gap: 0.25rem;
275
+ font-size: 10px;
276
+ color: var(--color-fd-muted-foreground, #a3a3a3);
277
+ }
278
+ @media (min-width: 640px) {
279
+ .omni-item-shortcuts {
280
+ display: flex;
281
+ }
282
+ }
283
+ .omni-kbd-sm {
284
+ border-radius: 0.25rem;
285
+ background: var(--color-fd-muted, #262626);
286
+ padding: 0.125rem 0.25rem;
287
+ font-family: inherit;
288
+ }
289
+ .omni-item-chevron {
290
+ width: 0.875rem;
291
+ height: 0.875rem;
292
+ margin-left: 0.25rem;
293
+ color: var(--color-fd-muted-foreground, #a3a3a3);
294
+ opacity: 0;
295
+ transition: opacity 120ms;
296
+ flex-shrink: 0;
297
+ }
298
+ .omni-item:hover .omni-item-chevron {
299
+ opacity: 1;
300
+ }
301
+
302
+ /* Highlight */
303
+ .omni-highlight {
304
+ border-radius: 2px;
305
+ background: color-mix(in srgb, var(--color-fd-primary, #6366f1) 30%, transparent);
306
+ padding: 0 2px;
307
+ color: inherit;
308
+ }
309
+
310
+ /* Empty states */
311
+ .omni-empty-group {
312
+ padding: 0.5rem 0.75rem;
313
+ font-size: 0.75rem;
314
+ color: var(--color-fd-muted-foreground, #a3a3a3);
315
+ }
316
+ .omni-empty {
317
+ padding: 2rem 0.75rem;
318
+ text-align: center;
319
+ font-size: 0.875rem;
320
+ color: var(--color-fd-muted-foreground, #a3a3a3);
321
+ }
322
+ .omni-empty-icon {
323
+ width: 2rem;
324
+ height: 2rem;
325
+ margin: 0 auto 0.5rem;
326
+ display: flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ border-radius: 9999px;
330
+ background: var(--color-fd-muted, #262626);
331
+ }
332
+
333
+ /* Footer */
334
+ .omni-footer {
335
+ border-top: 1px solid var(--color-fd-border, #262626);
336
+ }
337
+ .omni-footer-inner {
338
+ display: flex;
339
+ align-items: center;
340
+ justify-content: space-between;
341
+ padding: 0.5rem 0.75rem;
342
+ font-size: 0.75rem;
343
+ color: var(--color-fd-muted-foreground, #a3a3a3);
344
+ }
345
+ .omni-footer-hints {
346
+ display: flex;
347
+ align-items: center;
348
+ gap: 1rem;
349
+ }
350
+ .omni-footer-hint {
351
+ display: flex;
352
+ align-items: center;
353
+ gap: 0.25rem;
354
+ }
355
+ .omni-footer-hint-desktop {
356
+ display: none;
357
+ }
358
+ @media (min-width: 640px) {
359
+ .omni-footer-hint-desktop {
360
+ display: flex;
361
+ }
362
+ }
@@ -23,6 +23,13 @@
23
23
  --color-fd-accent-foreground: oklch(0.216 0.006 56.043);
24
24
  --color-fd-border: oklch(0.923 0.003 48.717);
25
25
  --color-fd-ring: oklch(0.709 0.01 56.259);
26
+ --scrollbar-thumb: var(--color-fd-border);
27
+ --scrollbar-thumb-hover: var(--color-fd-ring);
28
+ --scrollbar-track: transparent;
29
+ --radius: 0px;
30
+ --fd-nav-height: 56px;
31
+ --fd-banner-height: 0px;
32
+ --fd-tocnav-height: 0px;
26
33
  }
27
34
 
28
35
  /* ─── Color Tokens (dark) ────────────────────────────────────────── */
@@ -44,6 +51,71 @@
44
51
  --color-fd-accent-foreground: oklch(0.985 0.001 106.423);
45
52
  --color-fd-border: hsl(0 0% 15%);
46
53
  --color-fd-ring: hsl(0 0% 30%);
54
+ --scrollbar-thumb: var(--color-fd-border);
55
+ --scrollbar-thumb-hover: var(--color-fd-ring);
56
+ --scrollbar-track: transparent;
57
+ }
58
+
59
+ /* ─── Scroll (light + dark) ──────────────────────────────────────── */
60
+
61
+ html {
62
+ scroll-behavior: auto;
63
+ scroll-padding-top: calc(
64
+ var(--fd-nav-height, 56px) + var(--fd-banner-height, 0px) + var(--fd-tocnav-height, 0px) + 24px
65
+ );
66
+ }
67
+
68
+ html:not([data-anchor-scrolling]) {
69
+ scroll-behavior: smooth;
70
+ }
71
+
72
+ /* ─── Custom scrollbar (light + dark) ─────────────────────────────── */
73
+
74
+ * {
75
+ scrollbar-width: thin;
76
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
77
+ }
78
+
79
+ ::-webkit-scrollbar {
80
+ width: 12px;
81
+ height: 12px;
82
+ }
83
+
84
+ ::-webkit-scrollbar-track {
85
+ background: var(--scrollbar-track);
86
+ }
87
+
88
+ ::-webkit-scrollbar-thumb {
89
+ background-color: var(--scrollbar-thumb);
90
+ border-radius: 9999px;
91
+ border: 3px solid transparent;
92
+ background-clip: content-box;
93
+ }
94
+
95
+ ::-webkit-scrollbar-thumb:hover {
96
+ background-color: var(--scrollbar-thumb-hover);
97
+ }
98
+
99
+ ::-webkit-scrollbar-corner {
100
+ background: transparent;
101
+ }
102
+
103
+ /* ─── Selection (light + dark) ───────────────────────────────────── */
104
+
105
+ body {
106
+ overscroll-behavior: none;
107
+ }
108
+
109
+ ::selection {
110
+ background: var(--color-fd-foreground);
111
+ color: var(--color-fd-background);
112
+ }
113
+
114
+ /* ─── Inline code word break ─────────────────────────────────────── */
115
+
116
+ code:not(pre code) {
117
+ overflow-wrap: break-word;
118
+ word-break: break-word;
47
119
  }
48
120
 
49
121
  /* ─── Sharp corners everywhere (both modes) ──────────────────────── */
@@ -310,7 +382,16 @@
310
382
  }
311
383
 
312
384
  .fd-codeblock-title {
313
- border-bottom-color: var(--color-fd-border);
385
+ border-bottom: 1px solid var(--color-fd-border) !important;
386
+ border-radius: 0 !important;
387
+ background-color: color-mix(in srgb, var(--color-fd-secondary, hsl(0 0% 8%)) 55%, transparent) !important;
388
+ background-image: repeating-linear-gradient(
389
+ -45deg,
390
+ color-mix(in srgb, var(--color-fd-foreground, #fff) 4%, transparent),
391
+ color-mix(in srgb, var(--color-fd-foreground, #fff) 4%, transparent) 1px,
392
+ transparent 1px,
393
+ transparent 6px
394
+ ) !important;
314
395
  }
315
396
 
316
397
  .fd-codeblock-title .fd-copy-btn {
@@ -455,6 +536,32 @@
455
536
  box-shadow: 4px 4px 0 0 var(--color-fd-border, hsl(0 0% 15%));
456
537
  }
457
538
 
539
+ /* Custom Ask AI trigger — same as fd-ai-floating-btn for theme */
540
+ .fd-ai-floating-trigger .ask-ai-trigger {
541
+ font-family: var(--fd-font-sans, inherit);
542
+ border-radius: 0 !important;
543
+ box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important;
544
+ }
545
+
546
+ .fd-ai-floating-trigger .ask-ai-trigger:hover {
547
+ transform: translate(-1px, -1px);
548
+ box-shadow: 4px 4px 0 0 var(--color-fd-border, hsl(0 0% 15%));
549
+ }
550
+
551
+ .fd-ai-fm-input-bar .fd-ai-floating-trigger .ask-ai-trigger {
552
+ border-radius: 0 !important;
553
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
554
+ text-transform: uppercase !important;
555
+ letter-spacing: 0.04em !important;
556
+ font-size: 12px !important;
557
+ box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important;
558
+ }
559
+
560
+ .fd-ai-fm-input-bar .fd-ai-floating-trigger .ask-ai-trigger:hover {
561
+ transform: translate(-1px, -1px);
562
+ box-shadow: 4px 4px 0 0 var(--color-fd-border, hsl(0 0% 15%));
563
+ }
564
+
458
565
  .fd-ai-suggestion {
459
566
  border-radius: 0 !important;
460
567
  font-size: 12px;
@@ -599,3 +706,123 @@
599
706
  .fd-ai-code-block code {
600
707
  font-family: var(--fd-font-mono, ui-monospace, monospace);
601
708
  }
709
+
710
+ /* Light mode: AI code blocks — light bg + dark text + visible pixel border */
711
+ :root:not(.dark) .fd-ai-code-block {
712
+ background: #f4f4f5 !important;
713
+ box-shadow: 3px 3px 0 0 hsl(0 0% 75%);
714
+ --sh-class: #b45309;
715
+ --sh-identifier: #1f2937;
716
+ --sh-keyword: #7c3aed;
717
+ --sh-string: #0d9488;
718
+ --sh-property: #dc2626;
719
+ --sh-entity: #059669;
720
+ --sh-sign: #374151;
721
+ --sh-comment: #6b7280;
722
+ --sh-jsxliterals: #7c3aed;
723
+ }
724
+
725
+ :root:not(.dark) .fd-ai-code-header {
726
+ border-bottom-color: hsl(0 0% 80%);
727
+ background: color-mix(in srgb, #e4e4e7 90%, transparent);
728
+ }
729
+
730
+ :root:not(.dark) .fd-ai-code-lang {
731
+ color: #52525b;
732
+ }
733
+
734
+ :root:not(.dark) .fd-ai-code-copy {
735
+ color: #52525b;
736
+ border-color: hsl(0 0% 75%);
737
+ }
738
+
739
+ :root:not(.dark) .fd-ai-code-copy:hover {
740
+ color: #18181b;
741
+ background: color-mix(in srgb, #d4d4d8 70%, transparent);
742
+ }
743
+
744
+ :root:not(.dark) .fd-ai-code-block code {
745
+ color: #1f2937;
746
+ }
747
+
748
+ /* ─── Omni Command Palette — pixel-border theme ──────────────────── */
749
+
750
+ .omni-content {
751
+ border-radius: 0 !important;
752
+ border: 2px solid var(--color-fd-border, hsl(0 0% 15%)) !important;
753
+ box-shadow:
754
+ 4px 4px 0 0 var(--color-fd-border, hsl(0 0% 15%)),
755
+ 0 24px 60px -12px rgba(0, 0, 0, 0.5) !important;
756
+ }
757
+
758
+ .omni-item {
759
+ border-radius: 0 !important;
760
+ }
761
+
762
+ .omni-kbd,
763
+ .omni-kbd-sm {
764
+ border-radius: 0 !important;
765
+ border: 1px solid var(--color-fd-border, hsl(0 0% 15%)) !important;
766
+ }
767
+
768
+ .omni-close-btn {
769
+ border-radius: 0 !important;
770
+ }
771
+
772
+ .omni-empty-icon {
773
+ border-radius: 0 !important;
774
+ }
775
+
776
+ .omni-search-input {
777
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
778
+ }
779
+
780
+ .omni-group-label {
781
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
782
+ letter-spacing: 0.08em !important;
783
+ }
784
+
785
+ .omni-footer-inner {
786
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
787
+ }
788
+
789
+ .omni-highlight {
790
+ background: color-mix(in srgb, var(--color-fd-primary, #6366f1) 25%, transparent) !important;
791
+ border-radius: 0 !important;
792
+ }
793
+
794
+ /* ─── Page Actions — pixel-border theme ─────────────────────────── */
795
+
796
+ .fd-page-action-btn {
797
+ text-transform: uppercase !important;
798
+ box-shadow: 2px 2px 0 0 var(--color-fd-border, #262626) !important;
799
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
800
+ border-radius: 0 !important;
801
+ font-size: 0.75rem !important;
802
+ letter-spacing: 0.03em !important;
803
+ }
804
+
805
+ .fd-page-action-dropdown {
806
+ position: relative !important;
807
+ }
808
+
809
+ .fd-page-action-menu {
810
+ border-radius: 0 !important;
811
+ border: 2px solid var(--color-fd-border, #262626) !important;
812
+ box-shadow: 2px 2px 0 0 var(--color-fd-border, #262626), 0 4px 24px hsl(0 0% 0% / 0.5) !important;
813
+ padding: 0 !important;
814
+ }
815
+
816
+ .fd-page-action-menu-item {
817
+ border-radius: 0 !important;
818
+ font-size: 0.8rem !important;
819
+ font-family: var(--fd-font-mono, ui-monospace, monospace) !important;
820
+ text-transform: uppercase !important;
821
+ letter-spacing: 0.03em !important;
822
+ color: var(--color-fd-muted-foreground) !important;
823
+ border-top: 1px solid var(--color-fd-border, #262626) !important;
824
+ }
825
+
826
+ .fd-page-action-menu-item:first-child {
827
+ border-top: none !important;
828
+ }