starlight-theme-bejamas 0.0.0-canary.0d34eb2

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,124 @@
1
+ ---
2
+ import {
3
+ Select,
4
+ SelectControl,
5
+ SelectIndicator,
6
+ SelectOption,
7
+ } from "virtual:starlight-theme-bejamas/components/select";
8
+
9
+ import { SunIcon, MoonIcon, LaptopIcon } from "@lucide/astro";
10
+ ---
11
+
12
+ <starlight-theme-select>
13
+ <div class="relative text-sm">
14
+ <div class="sl-bejamas-theme-select-icons">
15
+ <SunIcon class="theme-icon theme-icon-light size-4" />
16
+ <MoonIcon class="theme-icon theme-icon-dark size-4" />
17
+ <LaptopIcon class="theme-icon theme-icon-auto size-4" />
18
+ </div>
19
+ <Select showCheckmark={false}>
20
+ <SelectIndicator />
21
+ <SelectControl
22
+ showCheckmark={false}
23
+ class="sl-bejamas-theme-select-control"
24
+ >
25
+ <SelectOption value="light"
26
+ ><SunIcon class="size-4" /> Light</SelectOption
27
+ >
28
+ <SelectOption value="dark"
29
+ ><MoonIcon class="size-4" /> Dark</SelectOption
30
+ >
31
+ <SelectOption value="auto"
32
+ ><LaptopIcon class="size-4" /> Auto</SelectOption
33
+ >
34
+ </SelectControl>
35
+ </Select>
36
+ </div>
37
+ </starlight-theme-select>
38
+
39
+ <script is:inline>
40
+ StarlightThemeProvider.updatePickers();
41
+ </script>
42
+
43
+ <script>
44
+ type Theme = "auto" | "dark" | "light";
45
+ const storageKey = "starlight-theme";
46
+
47
+ const parseTheme = (theme: unknown): Theme =>
48
+ theme === "auto" || theme === "dark" || theme === "light" ? theme : "auto";
49
+
50
+ const loadTheme = (): Theme =>
51
+ parseTheme(
52
+ typeof localStorage !== "undefined" && localStorage.getItem(storageKey),
53
+ );
54
+
55
+ function storeTheme(theme: Theme): void {
56
+ if (typeof localStorage !== "undefined") {
57
+ localStorage.setItem(
58
+ storageKey,
59
+ theme === "light" || theme === "dark" ? theme : "",
60
+ );
61
+ }
62
+ }
63
+
64
+ const getPreferredColorScheme = (): Theme =>
65
+ matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
66
+
67
+ function onThemeChange(theme: Theme): void {
68
+ const resolved = theme === "auto" ? getPreferredColorScheme() : theme;
69
+ StarlightThemeProvider.updatePickers(theme);
70
+ document.documentElement.dataset.theme = resolved;
71
+ document.documentElement.dataset.themeChoice = theme;
72
+ document.documentElement.classList.toggle("dark", resolved === "dark");
73
+ storeTheme(theme);
74
+ }
75
+
76
+ matchMedia("(prefers-color-scheme: light)").addEventListener("change", () => {
77
+ if (loadTheme() === "auto") onThemeChange("auto");
78
+ });
79
+
80
+ class StarlightThemeSelect extends HTMLElement {
81
+ constructor() {
82
+ super();
83
+ onThemeChange(loadTheme());
84
+ this.querySelector("select")?.addEventListener("change", (e) => {
85
+ if (e.currentTarget instanceof HTMLSelectElement) {
86
+ onThemeChange(parseTheme(e.currentTarget.value));
87
+ }
88
+ });
89
+ }
90
+ }
91
+
92
+ customElements.define("starlight-theme-select", StarlightThemeSelect);
93
+ </script>
94
+
95
+ <style>
96
+ .theme-icon {
97
+ display: none;
98
+ }
99
+
100
+ :global(html[data-theme-choice="light"]) .theme-icon-light {
101
+ display: block;
102
+ }
103
+
104
+ :global(html[data-theme-choice="dark"]) .theme-icon-dark {
105
+ display: block;
106
+ }
107
+
108
+ :global(html[data-theme-choice="auto"]) .theme-icon-auto {
109
+ display: block;
110
+ }
111
+
112
+ .sl-bejamas-theme-select-icons {
113
+ position: absolute;
114
+ z-index: 10;
115
+ left: calc(var(--spacing) * 3);
116
+ top: calc(var(--spacing) * 2.5);
117
+ pointer-events: none;
118
+ }
119
+
120
+ .sl-bejamas-theme-select-control {
121
+ padding-left: calc(var(--spacing) * 9);
122
+ width: calc(var(--spacing) * 28);
123
+ }
124
+ </style>
@@ -0,0 +1,543 @@
1
+ @layer starlight, bejamas;
2
+
3
+ @import "@fontsource-variable/inter/index.css";
4
+
5
+ @layer bejamas {
6
+ @media (min-width: 50rem) {
7
+ :root::after {
8
+ content: "";
9
+ position: fixed;
10
+ inset: 0;
11
+ right: calc(var(--spacing) * 6);
12
+ background: linear-gradient(
13
+ var(--background) 49.99%,
14
+ var(--sl-main-frame-inner-background) 50%
15
+ );
16
+ z-index: -1;
17
+ }
18
+ }
19
+
20
+ .page {
21
+ background-color: var(--background);
22
+ }
23
+
24
+ :root {
25
+ --sl-font: "Inter Variable", sans-serif;
26
+ --sl-font-mono: "Geist Mono", monospace;
27
+
28
+ --radius: 0.5rem;
29
+
30
+ --sl-color-text-accent: var(--accent-foreground);
31
+
32
+ --sl-color-banner-text: var(--foreground);
33
+
34
+ --sl-color-bg-inline-code: var(--input);
35
+
36
+ --sl-color-hairline-shade: var(--border);
37
+
38
+ --sl-color-bg-sidebar: var(--background);
39
+
40
+ --sl-color-gray-5: var(--input);
41
+ --sl-color-black: transparent;
42
+
43
+ --code-background: var(--background);
44
+ --sl-color-text: var(--foreground);
45
+
46
+ --sl-text-h1: var(--text-3xl);
47
+ --sl-text-h2: var(--text-xl);
48
+ --sl-text-h3: var(--text-lg);
49
+
50
+ --sl-color-gray-2: var(--input);
51
+
52
+ --default-font-family: "Inter Variable", sans-serif;
53
+ --font-sans: "Inter Variable", sans-serif;
54
+
55
+ --sl-color-bg: var(--background);
56
+ --sl-color-fg: var(--foreground);
57
+ --sl-color-primary: var(--primary);
58
+ --sl-color-primary-fg: var(--primary-foreground);
59
+
60
+ --sl-color-hairline: var(--border);
61
+ --sl-color-bg-nav: var(--background);
62
+
63
+ --sl-color-text-accent: var(--primary);
64
+ --sl-color-accent: var(--primary);
65
+
66
+ --sl-nav-height: calc(var(--spacing) * 15);
67
+ /* --sl-nav-height: auto; */
68
+ --sl-nav-pad-y: calc(var(--spacing) * 4.5);
69
+ --sl-content-pad-x: calc(var(--spacing) * 5);
70
+ --sl-nav-pad-x: calc(var(--spacing) * 1 + var(--sl-content-pad-x));
71
+ --sl-main-frame-inner-background: color-mix(
72
+ in oklab,
73
+ var(--muted) 100%,
74
+ transparent
75
+ );
76
+ --sl-main-frame-inner-border: var(--border);
77
+ --sl-content-inline-start: 0rem;
78
+
79
+ --sl-icon-color: var(--foreground);
80
+ }
81
+
82
+ @media (min-width: 50em) {
83
+ :root {
84
+ --sl-nav-height: calc(var(--spacing) * 18);
85
+ }
86
+ [data-has-sidebar] {
87
+ --sl-sidebar-width: 0;
88
+ }
89
+ }
90
+
91
+ @media (min-width: 64em) {
92
+ [data-has-sidebar] {
93
+ --sl-sidebar-width: 18.75rem;
94
+ }
95
+ }
96
+
97
+ html[data-theme="dark"],
98
+ html.dark {
99
+ --sl-main-frame-inner-background: color-mix(
100
+ in oklab,
101
+ var(--muted) 30%,
102
+ transparent
103
+ );
104
+ --sl-main-frame-inner-border: color-mix(
105
+ in oklab,
106
+ var(--border) 50%,
107
+ transparent
108
+ );
109
+ }
110
+ }
111
+
112
+ @layer bejamas {
113
+ .sidebar-pane .sidebar-content {
114
+ --sl-sidebar-item-padding-inline: 1rem;
115
+ padding-top: 0;
116
+ }
117
+
118
+ .right-sidebar-panel {
119
+ --sl-sidebar-item-padding-inline: 1rem;
120
+ padding-top: calc(var(--spacing) * 14);
121
+ }
122
+
123
+ .right-sidebar-panel a {
124
+ color: var(--muted-foreground);
125
+ }
126
+
127
+ .right-sidebar-panel a[aria-current="true"] {
128
+ color: var(--foreground);
129
+ }
130
+
131
+ .right-sidebar-panel a:hover {
132
+ color: var(--foreground);
133
+ }
134
+
135
+ .right-sidebar,
136
+ .sidebar .sidebar-pane {
137
+ border: 0;
138
+ }
139
+
140
+ @media (min-width: 72rem) {
141
+ .right-sidebar {
142
+ position: sticky;
143
+ top: var(--sl-nav-height);
144
+ padding-top: 0;
145
+ height: auto;
146
+ }
147
+ }
148
+
149
+ .sidebar-content a {
150
+ background-color: var(--background);
151
+ padding: 0;
152
+ }
153
+
154
+ .group-label > span {
155
+ color: var(--muted-foreground);
156
+ font-size: 0.875rem;
157
+ font-weight: 500;
158
+ }
159
+
160
+ .group-label + svg {
161
+ color: var(--muted-foreground);
162
+ font-size: 1rem;
163
+ }
164
+
165
+ .sidebar-content a > span {
166
+ color: var(--foreground);
167
+ padding-inline: 0.5rem;
168
+ padding-block: 0.375rem;
169
+ border-radius: 0.5rem;
170
+ /* transition-property: color, background-color;
171
+ transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
172
+ transition-duration: 0.05s; */
173
+ display: inline-block;
174
+ }
175
+
176
+ .sidebar-content a[aria-current="page"] > span {
177
+ background-color: var(--secondary);
178
+ color: var(--foreground);
179
+ font-weight: 500;
180
+ }
181
+
182
+ .sidebar-content a:not([aria-current="page"]):hover > span {
183
+ background-color: var(--secondary);
184
+ color: var(--secondary-foreground);
185
+ }
186
+
187
+ .sidebar-content ul ul li {
188
+ margin-inline-start: 0;
189
+ border-inline-start: 0;
190
+ padding-inline-start: 0;
191
+ margin-bottom: 1px;
192
+ }
193
+
194
+ .right-sidebar-container {
195
+ max-width: 20rem;
196
+ margin-right: 0;
197
+ margin-left: auto;
198
+ }
199
+
200
+ .content-panel {
201
+ border-top: 0;
202
+ }
203
+
204
+ .content-panel:first-child {
205
+ padding-bottom: 0;
206
+ padding-top: calc(var(--spacing) * 5);
207
+ }
208
+
209
+ @media (min-width: 50rem) {
210
+ .content-panel:first-child {
211
+ padding-top: calc(var(--spacing) * 12);
212
+ }
213
+ }
214
+
215
+ .right-sidebar-panel h2 {
216
+ color: var(--muted-foreground);
217
+ font-size: 0.875rem;
218
+ font-weight: 500;
219
+ padding-inline: 0.5rem;
220
+ }
221
+
222
+ site-search button {
223
+ --tw-shadow: var(--shadow-sm);
224
+ box-shadow:
225
+ var(--tw-inset-shadow), var(--tw-inset-ring-shadow),
226
+ var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
227
+ border-radius: calc(var(--radius) - 2px);
228
+ max-width: calc(var(--spacing) * 50);
229
+ }
230
+
231
+ .expressive-code .frame {
232
+ box-shadow: none;
233
+ }
234
+
235
+ .expressive-code .frame pre {
236
+ border: 1px solid var(--border);
237
+ }
238
+
239
+ ul.top-level li details ul li:last-child {
240
+ margin-bottom: 1.25rem;
241
+ }
242
+
243
+ ul.top-level summary {
244
+ margin-bottom: 0.25rem;
245
+ }
246
+
247
+ starlight-tabs[data-sync-key="pkg"] .tablist-wrapper {
248
+ background-color: var(--code-background);
249
+ border: 1px solid var(--border);
250
+ border-bottom: 0;
251
+
252
+ padding-top: 0;
253
+ border-top-left-radius: var(--radius-lg);
254
+ border-top-right-radius: var(--radius-lg);
255
+ font-family: var(--sl-font-mono);
256
+ font-size: 0.875rem;
257
+ }
258
+
259
+ .expressive-code pre {
260
+ border-radius: var(--radius-lg);
261
+ }
262
+
263
+ .expressive-code .frame.has-title pre {
264
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
265
+ }
266
+
267
+ .expressive-code .frame.is-terminal pre {
268
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
269
+ }
270
+
271
+ starlight-tabs[data-sync-key="pkg"] .tablist-wrapper ul {
272
+ padding-block: calc(var(--spacing) * 2);
273
+ padding-inline: calc(var(--spacing) * 4);
274
+ gap: 0;
275
+ }
276
+
277
+ .tab {
278
+ margin-bottom: 0;
279
+ }
280
+
281
+ starlight-tabs[data-sync-key="pkg"] .tablist-wrapper a {
282
+ border-bottom: 0;
283
+ padding-block: calc(var(--spacing) * 0.5);
284
+ padding-inline: calc(var(--spacing) * 2);
285
+ }
286
+
287
+ starlight-tabs[data-sync-key="pkg"] .tablist-wrapper a[aria-selected="true"] {
288
+ background-color: var(--secondary);
289
+ color: var(--secondary-foreground);
290
+ border-bottom: 0;
291
+ border-radius: calc(var(--radius) - 4px);
292
+ }
293
+
294
+ starlight-tabs[data-sync-key="pkg"] .tablist-wrapper ~ div[role="tabpanel"] {
295
+ margin-top: 0;
296
+ }
297
+
298
+ starlight-tabs[data-sync-key="pkg"] figcaption.header {
299
+ display: none;
300
+ }
301
+
302
+ .tablist-wrapper > ul {
303
+ border: 0;
304
+ gap: 1.25rem;
305
+ }
306
+
307
+ .tablist-wrapper > ul a {
308
+ padding-inline: 0;
309
+ }
310
+
311
+ .tablist-wrapper > ul a[aria-selected="true"] {
312
+ font-weight: 500;
313
+ }
314
+
315
+ .sl-heading-wrapper.level-h2:not(:first-child) {
316
+ margin-top: 4rem;
317
+ }
318
+
319
+ .sl-heading-wrapper.level-h3:not(:first-child) {
320
+ margin-top: 3rem;
321
+ }
322
+
323
+ .sl-markdown-content a:not(:where(.not-content *)) {
324
+ text-decoration: underline;
325
+ text-underline-offset: 4px;
326
+ }
327
+
328
+ button[data-open-modal] {
329
+ border-color: var(--border);
330
+ color: var(--foreground);
331
+ box-shadow: var(--shadow-xs);
332
+ background-color: var(--background);
333
+ height: calc(var(--spacing) * 9);
334
+ }
335
+
336
+ button[data-open-modal] kbd {
337
+ background-color: var(--muted);
338
+ color: var(--muted-foreground);
339
+ border-radius: calc(var(--radius) - 4px);
340
+ gap: 0;
341
+ }
342
+
343
+ .tablist-wrapper ~ [role="tabpanel"] {
344
+ margin-top: calc(var(--spacing) * 2.5);
345
+ }
346
+
347
+ starlight-tabs starlight-tabs {
348
+ margin-top: 0;
349
+ }
350
+
351
+ /* .expressive-code .header {
352
+ background-color: var(--background);
353
+ border: 1px solid var(--border);
354
+ } */
355
+
356
+ .expressive-code .title {
357
+ background-color: var(--background);
358
+ color: var(--muted-foreground);
359
+ border-color: var(--border);
360
+ border: 1px solid var(--border);
361
+
362
+ font-family: var(--sl-font-mono);
363
+ width: 100%;
364
+ border-bottom: 0;
365
+ font-size: 0.875rem;
366
+ padding-block: 0.75rem;
367
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
368
+ }
369
+
370
+ .sl-markdown-content :is(h1, h2, h3, h4, h5, h6):not(:where(.not-content *)) {
371
+ font-weight: 500;
372
+ }
373
+
374
+ .sl-bejamas-component-preview {
375
+ min-height: 450px;
376
+ padding: 1rem;
377
+ border: 1px solid var(--border);
378
+ border-radius: 0.5rem;
379
+ display: flex;
380
+ justify-content: center;
381
+ align-items: center;
382
+ background-color: var(--background);
383
+ }
384
+
385
+ .sl-markdown-content ul:not(:where(.not-content *)) {
386
+ list-style: disc;
387
+ padding-left: 1rem;
388
+ }
389
+
390
+ .sl-markdown-content ol:not(:where(.not-content *)) {
391
+ list-style: decimal;
392
+ padding-left: 1rem;
393
+ }
394
+
395
+ .tablist-wrapper {
396
+ overflow-x: inherit;
397
+ }
398
+
399
+ .tablist-wrapper a[role="tab"] {
400
+ border-bottom: 0;
401
+ padding: 0;
402
+ display: inline-block;
403
+ }
404
+
405
+ .sl-markdown-content :is(th, td):not(:where(.not-content *)) {
406
+ min-width: 10rem;
407
+ padding-inline: 1rem;
408
+ border-color: var(--border);
409
+ }
410
+
411
+ .sl-markdown-content
412
+ :is(tr):last-child
413
+ :is(th, td):not(:where(.not-content *)) {
414
+ border-bottom: 0;
415
+ }
416
+
417
+ .sl-markdown-content table:not(:where(.not-content *)) {
418
+ border: 1px solid var(--border);
419
+ border-radius: calc(var(--radius) - 2px);
420
+ }
421
+
422
+ .main-frame {
423
+ min-height: 100svh;
424
+ }
425
+
426
+ @media (min-width: 50em) {
427
+ .main-frame {
428
+ padding-inline: calc(var(--spacing) * 5);
429
+ }
430
+ }
431
+
432
+ @media (min-width: 64em) {
433
+ .main-frame {
434
+ padding-inline-end: calc(var(--spacing) * 6);
435
+ padding-inline-start: var(--sl-content-inline-start);
436
+ }
437
+ }
438
+
439
+ .sidebar-content::before {
440
+ content: "";
441
+ --blur: 4px;
442
+ --stop: 50%;
443
+ --height: 40px;
444
+ position: sticky;
445
+ pointer-events: none;
446
+ width: 100%;
447
+ height: var(--height);
448
+ user-select: none;
449
+ -webkit-user-select: none;
450
+ left: 0;
451
+ -webkit-backdrop-filter: blur(var(--blur));
452
+ backdrop-filter: blur(var(--blur));
453
+
454
+ background: linear-gradient(to top, transparent, var(--background));
455
+ mask-image: linear-gradient(
456
+ to bottom,
457
+ var(--background) var(--stop),
458
+ transparent
459
+ );
460
+ top: 0;
461
+ }
462
+
463
+ .sidebar-content::after {
464
+ content: "";
465
+ --blur: 4px;
466
+ --stop: 50%;
467
+ --height: 80px;
468
+ position: sticky;
469
+ pointer-events: none;
470
+ width: 100%;
471
+ height: var(--height);
472
+ user-select: none;
473
+ -webkit-user-select: none;
474
+ left: 0;
475
+ -webkit-backdrop-filter: blur(var(--blur));
476
+ backdrop-filter: blur(var(--blur));
477
+
478
+ background: linear-gradient(to bottom, transparent, var(--background));
479
+ mask-image: linear-gradient(
480
+ to top,
481
+ var(--background) var(--stop),
482
+ transparent
483
+ );
484
+ bottom: 0;
485
+ }
486
+
487
+ starlight-file-tree {
488
+ --x-space: calc(var(--spacing) * 5);
489
+ background-color: var(--background);
490
+ border: 1px solid var(--border);
491
+ border-radius: var(--radius-lg);
492
+ }
493
+
494
+ starlight-file-tree ul {
495
+ border-inline-start-color: var(--border);
496
+ }
497
+
498
+ starlight-file-tree .comment {
499
+ color: var(--muted-foreground);
500
+ max-width: calc(var(--spacing) * 150);
501
+ }
502
+
503
+ starlight-menu-button button {
504
+ box-shadow: none;
505
+ padding: 0;
506
+ width: calc(var(--spacing) * 6);
507
+ background-color: var(--background);
508
+ color: var(--foreground);
509
+ }
510
+
511
+ starlight-menu-button button svg {
512
+ width: calc(var(--spacing) * 8);
513
+ height: calc(var(--spacing) * 8);
514
+ font-size: calc(var(--spacing) * 8);
515
+ }
516
+
517
+ #starlight__on-this-page--mobile {
518
+ /* border-top: 1px solid var(--border); */
519
+ border-bottom: 0;
520
+ }
521
+
522
+ #starlight__on-this-page--mobile .toggle {
523
+ border: 0;
524
+ color: var(--muted-foreground);
525
+ padding-left: 0;
526
+ background-color: var(--background);
527
+ }
528
+
529
+ .sl-container {
530
+ margin-inline: auto;
531
+ }
532
+
533
+ @media (min-width: 64rem) {
534
+ .sl-container {
535
+ margin-inline: var(--sl-content-margin-inline, auto);
536
+ }
537
+ }
538
+
539
+ .size-4 {
540
+ width: calc(var(--spacing) * 4);
541
+ height: calc(var(--spacing) * 4);
542
+ }
543
+ }
@@ -0,0 +1,40 @@
1
+ declare module "virtual:starlight/components/MobileMenuToggle" {
2
+ const MobileMenuToggle: typeof import("@astrojs/starlight/components/MobileMenuToggle.astro").default;
3
+ export default MobileMenuToggle;
4
+ }
5
+ declare module "virtual:starlight/components/MobileMenuFooter" {
6
+ const MobileMenuFooter: typeof import("@astrojs/starlight/components/MobileMenuFooter.astro").default;
7
+ export default MobileMenuFooter;
8
+ }
9
+ declare module "virtual:starlight/components/EditLink" {
10
+ const EditLink: typeof import("@astrojs/starlight/components/EditLink.astro").default;
11
+ export default EditLink;
12
+ }
13
+ declare module "virtual:starlight/components/LastUpdated" {
14
+ const LastUpdated: typeof import("@astrojs/starlight/components/LastUpdated.astro").default;
15
+ export default LastUpdated;
16
+ }
17
+ declare module "virtual:starlight/components/Pagination" {
18
+ const Pagination: typeof import("@astrojs/starlight/components/Pagination.astro").default;
19
+ export default Pagination;
20
+ }
21
+ declare module "virtual:starlight/components/LanguageSelect" {
22
+ const LanguageSelect: typeof import("@astrojs/starlight/components/LanguageSelect.astro").default;
23
+ export default LanguageSelect;
24
+ }
25
+ declare module "virtual:starlight/components/Search" {
26
+ const Search: typeof import("@astrojs/starlight/components/Search.astro").default;
27
+ export default Search;
28
+ }
29
+ declare module "virtual:starlight/components/SiteTitle" {
30
+ const SiteTitle: typeof import("@astrojs/starlight/components/SiteTitle.astro").default;
31
+ export default SiteTitle;
32
+ }
33
+ declare module "virtual:starlight/components/SocialIcons" {
34
+ const SocialIcons: typeof import("@astrojs/starlight/components/SocialIcons.astro").default;
35
+ export default SocialIcons;
36
+ }
37
+ declare module "virtual:starlight/components/ThemeSelect" {
38
+ const ThemeSelect: typeof import("./overrides/ThemeSelect.astro").default;
39
+ export default ThemeSelect;
40
+ }