Skip to content

Commit 6ddd4fc

Browse files
Make ScreenSize widget dynamic to Tailwind config
And add an "all screens" popup
1 parent f639ed0 commit 6ddd4fc

File tree

3 files changed

+52
-16
lines changed

3 files changed

+52
-16
lines changed

src/lib/ScreenSize.svelte

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,54 @@
1-
<script>
1+
<script lang="ts">
22
// From https://gist.github.com/WarningImHack3r/375c559c5ee120408f9df2390ec2747a
33
// Inspired by https://gist.github.com/Sh4yy/0300299ae60af4910bcb341703946330
4+
import { slide } from "svelte/transition";
5+
import tailwindConfig from "/tailwind.config";
6+
import resolveConfig from "tailwindcss/resolveConfig";
7+
8+
const fullConfig = resolveConfig(tailwindConfig);
9+
const screens = Object.keys(fullConfig.theme.screens)
10+
.map(screen => ({
11+
name: screen,
12+
size: parseInt(fullConfig.theme.screens[screen].replace("px", ""))
13+
}))
14+
.sort((a, b) => a.size - b.size);
15+
let matchingScreen: (typeof screens)[number] | undefined;
16+
$: matchingScreen = screens.findLast(screen => screen.size <= width);
17+
418
let width = 0;
519
let height = 0;
20+
21+
let showAllScreens = false;
622
</script>
723

824
<svelte:window bind:innerWidth={width} bind:innerHeight={height} />
925

1026
<div
11-
class="fixed bottom-5 left-5 z-50 flex items-center space-x-2 rounded-full border border-gray-500 bg-black px-2.5 py-1 font-mono text-xs font-medium text-white shadow-lg shadow-black/50"
27+
class="font-mono text-xs font-medium text-white *:fixed *:border *:border-gray-500 *:bg-black *:px-2.5 *:py-1 *:shadow-lg *:shadow-black/50"
1228
>
13-
<span>
14-
{width.toLocaleString()} x {height.toLocaleString()}
15-
</span>
16-
<div class="h-4 w-px bg-gray-800" />
17-
<span class="sm:hidden">XS</span>
18-
<span class="hidden sm:max-md:inline">SM</span>
19-
<span class="hidden md:max-lg:inline">MD</span>
20-
<span class="hidden lg:max-xl:inline">LG</span>
21-
<span class="hidden xl:max-2xl:inline">XL</span>
22-
<span class="max-2xl:hidden">2XL</span>
29+
<div class="bottom-5 left-5 z-50 flex items-center rounded-full !pr-1">
30+
<span>
31+
{width.toLocaleString()} x {height.toLocaleString()}
32+
</span>
33+
{#if matchingScreen}
34+
<div class="ml-1.5 mr-1 h-4 w-px bg-gray-800"></div>
35+
<button
36+
type="button"
37+
class="inline rounded-l-sm rounded-r-full px-1 hover:bg-neutral-500 active:bg-neutral-600"
38+
on:click={() => (showAllScreens = !showAllScreens)}
39+
>
40+
{matchingScreen.name.toUpperCase()}
41+
</button>
42+
{/if}
43+
</div>
44+
{#if showAllScreens}
45+
<div class="bottom-12 left-5 z-40 rounded-xl duration-300" transition:slide>
46+
{#each screens as screen}
47+
<div class="flex justify-between gap-8">
48+
<span>{screen.name.toUpperCase()}</span>
49+
<span class="text-neutral-400">{screen.size.toLocaleString()}px</span>
50+
</div>
51+
{/each}
52+
</div>
53+
{/if}
2354
</div>

tailwind.config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Config } from "tailwindcss";
2-
import { fontFamily, screens } from "tailwindcss/defaultTheme";
2+
import defaultTheme from "tailwindcss/defaultTheme";
33
import typography from "@tailwindcss/typography";
44

55
export default {
@@ -16,7 +16,7 @@ export default {
1616
},
1717
screens: {
1818
xs: "475px",
19-
...screens
19+
...defaultTheme.screens
2020
},
2121
extend: {
2222
colors: {
@@ -60,7 +60,7 @@ export default {
6060
sm: "calc(var(--radius) - 4px)"
6161
},
6262
fontFamily: {
63-
sans: [...fontFamily.sans]
63+
sans: [...defaultTheme.fontFamily.sans]
6464
},
6565
typography: () => ({
6666
DEFAULT: {

vite.config.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,10 @@ import { sveltekit } from "@sveltejs/kit/vite";
22
import { defineConfig } from "vite";
33

44
export default defineConfig({
5-
plugins: [sveltekit()]
5+
plugins: [sveltekit()],
6+
server: {
7+
fs: {
8+
strict: false
9+
}
10+
}
611
});

0 commit comments

Comments
 (0)