Skip to content

Commit ebe86d0

Browse files
authored
Svelte 5 docs (#436)
* Update `svelte` and `vite-plugin-svelte` to latest next (svelte 5) * Disable sveld until Svelte 5 compatible * Work around action timing change in Svelte 5 by updating example to specific explicit `target: document.body`. Resolves #437 * Update `svelte` and `vite-plugin-svelte` to latest next (`.201` and `.5` respectively) * Update dependencies to latest * fix(TextField): Type error * fix(TableOfContents): Fix ssr support * fix(SelectField): Fix ssr support by no longer nesting `<button>` instances * Update to official Svelte 5 * Ignore warning * docs: Remove API docs until can be extracted in Svelte 5 compatible way (sveld update, etc) * Require official Svelte 5 (instead of `next` version). Still supports Svelte 3/4 * Add missing changesets * fix(AppLayout): Fix SSR drawer layout on mobile. Resolves #22 * refactor: Use 'esm-env' for browser/dev conditionals
1 parent 4df82aa commit ebe86d0

22 files changed

+510
-425
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-ux': patch
3+
---
4+
5+
fix(TableOfContents): Fix ssr support

.changeset/fast-dancers-invite.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-ux': patch
3+
---
4+
5+
fix(AppLayout): Fix SSR drawer layout on mobile. Resolves #22

.changeset/metal-garlics-sin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte-ux': patch
3+
---
4+
5+
fix(SelectField): Fix Svelte 5 SSR compatibility

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
},
1818
"devDependencies": {
1919
"@changesets/cli": "2.27.9",
20-
"@svitejs/changesets-changelog-github-compact": "^1.1.0",
20+
"@svitejs/changesets-changelog-github-compact": "^1.2.0",
2121
"rimraf": "6.0.1",
22-
"wrangler": "^3.80.1"
22+
"wrangler": "^3.81.0"
2323
},
2424
"packageManager": "[email protected]"
2525
}

packages/create-svelte-ux/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"commander": "^12.1.0"
2323
},
2424
"devDependencies": {
25-
"@types/node": "^22.7.5",
25+
"@types/node": "^22.7.7",
2626
"prettier": "^3.3.3"
2727
},
2828
"files": [

packages/svelte-ux/package.json

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,34 @@
2222
"@changesets/cli": "^2.27.9",
2323
"@fortawesome/free-solid-svg-icons": "^6.6.0",
2424
"@skeletonlabs/tw-plugin": "^0.4.0",
25-
"@sveltejs/adapter-cloudflare": "^4.7.2",
26-
"@sveltejs/kit": "^2.6.3",
25+
"@sveltejs/adapter-cloudflare": "^4.7.3",
26+
"@sveltejs/kit": "^2.7.2",
2727
"@sveltejs/package": "^2.3.5",
28-
"@sveltejs/vite-plugin-svelte": "^3.1.2",
28+
"@sveltejs/vite-plugin-svelte": "4.0.0",
2929
"@tailwindcss/typography": "^0.5.15",
3030
"@types/culori": "^2.1.1",
3131
"@types/d3-array": "^3.2.1",
3232
"@types/d3-scale": "^4.0.8",
3333
"@types/lodash-es": "^4.17.12",
3434
"@types/prismjs": "^1.26.4",
35-
"@vitest/coverage-v8": "^2.1.2",
35+
"@vitest/coverage-v8": "^2.1.3",
3636
"autoprefixer": "^10.4.20",
37-
"daisyui": "^4.12.12",
38-
"marked": "^14.1.2",
37+
"daisyui": "^4.12.13",
38+
"marked": "^14.1.3",
3939
"mdsvex": "^0.12.3",
40-
"posthog-js": "^1.167.0",
40+
"posthog-js": "^1.174.2",
4141
"prettier": "^3.3.3",
4242
"prettier-plugin-svelte": "^3.2.7",
4343
"rehype-slug": "^6.0.0",
44-
"svelte": "^4.2.19",
45-
"svelte-check": "^4.0.4",
46-
"svelte2tsx": "^0.7.21",
47-
"tailwindcss": "^3.4.13",
48-
"tslib": "^2.7.0",
49-
"typescript": "^5.6.2",
44+
"svelte": "5.0.2",
45+
"svelte-check": "^4.0.5",
46+
"svelte2tsx": "^0.7.22",
47+
"tailwindcss": "^3.4.14",
48+
"tslib": "^2.8.0",
49+
"typescript": "^5.6.3",
5050
"unist-util-visit": "^5.0.0",
51-
"vite": "^5.4.8",
52-
"vitest": "^2.1.2"
51+
"vite": "^5.4.9",
52+
"vitest": "^2.1.3"
5353
},
5454
"type": "module",
5555
"dependencies": {
@@ -61,17 +61,18 @@
6161
"d3-array": "^3.2.4",
6262
"d3-scale": "^4.0.2",
6363
"date-fns": "^4.1.0",
64+
"esm-env": "^1.0.0",
6465
"immer": "^10.1.1",
6566
"lodash-es": "^4.17.21",
6667
"prism-svelte": "^0.5.0",
6768
"prism-themes": "^1.9.0",
6869
"prismjs": "^1.29.0",
6970
"sveld": "^0.20.2",
70-
"tailwind-merge": "^2.5.3",
71+
"tailwind-merge": "^2.5.4",
7172
"zod": "^3.23.8"
7273
},
7374
"peerDependencies": {
74-
"svelte": "^3.56.0 || ^4.0.0 || ^5.0.0-next.120"
75+
"svelte": "^3.56.0 || ^4.0.0 || ^5.0.0"
7576
},
7677
"main": "./dist/index.js",
7778
"exports": {

packages/svelte-ux/src/lib/components/AppBar.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script lang="ts">
2+
import { BROWSER } from 'esm-env';
23
import { mdiMenu } from '@mdi/js';
34
45
import Breadcrumb from './Breadcrumb.svelte';
56
import Button from './Button.svelte';
6-
import { browser } from '../utils/env.js';
77
import { cls } from '../utils/styles.js';
88
import { getComponentClasses } from './theme.js';
99
import { getSettings } from './index.js';
@@ -23,7 +23,7 @@
2323
2424
$: titleString = Array.isArray(title) ? title.filter((x) => x).join('') : title.toString();
2525
26-
$: if (browser && head) {
26+
$: if (BROWSER && head) {
2727
// Appears to be needed for some reactive updates
2828
document.title = titleString;
2929
}

packages/svelte-ux/src/lib/components/AppLayout.svelte

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<script lang="ts">
2+
import { BROWSER } from 'esm-env';
23
import Backdrop from './Backdrop.svelte';
34
45
import { mdScreen } from '../stores/matchMedia.js';
56
import { cls } from '../utils/styles.js';
67
import { getComponentClasses } from './theme.js';
7-
import { browser } from '../utils/env.js';
88
import { getSettings } from './index.js';
99
1010
export let navWidth = 240;
@@ -21,7 +21,7 @@
2121
2222
const settingsClasses = getComponentClasses('AppLayout');
2323
const { showDrawer } = getSettings();
24-
$: temporaryDrawer = browser ? !$mdScreen : false;
24+
$: temporaryDrawer = BROWSER ? !$mdScreen : false;
2525
</script>
2626

2727
<div
@@ -52,6 +52,7 @@
5252
<aside
5353
class={cls(
5454
'fixed top-0 h-[calc(100%-var(--headerHeight))] w-[var(--drawerWidth)] transition-all duration-500 overflow-hidden',
55+
!BROWSER && 'max-md:hidden', // hide drawer during SSR on <md viewports (which is same result once hydrated)
5556
temporaryDrawer
5657
? 'fixed h-full z-50 elevation-10'
5758
: headerPosition === 'full'

packages/svelte-ux/src/lib/components/SelectField.svelte

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@
163163
// Elements
164164
let inputEl: HTMLInputElement | null = null;
165165
let menuOptionsEl: HTMLDivElement;
166-
let selectFieldEl: HTMLButtonElement;
166+
let selectFieldEl: HTMLDivElement;
167167
168168
function nextOptionIndex(currentIndex: number) {
169169
// Find next non-disabled option
@@ -412,8 +412,9 @@
412412
}
413413
</script>
414414

415-
<button
416-
type="button"
415+
<!-- svelte-ignore a11y_no_static_element_interactions -->
416+
<!-- svelte-ignore a11y_click_events_have_key_events -->
417+
<div
417418
aria-haspopup={!inlineOptions ? 'listbox' : undefined}
418419
class={cls(
419420
'SelectField block w-full cursor-default text-left',
@@ -652,4 +653,4 @@
652653
</SelectListOptions>
653654
{/if}
654655
{/if}
655-
</button>
656+
</div>

packages/svelte-ux/src/lib/components/TableOfContents.svelte

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { createEventDispatcher, onDestroy, onMount } from 'svelte';
33
import { mdiCircleSmall } from '@mdi/js';
4+
import { BROWSER } from 'esm-env';
45
56
import { buildTree, type TreeNode } from '../utils/array.js';
67
import { cls } from '../utils/styles.js';
@@ -9,7 +10,7 @@
910
import { getComponentClasses } from './theme.js';
1011
1112
export let element = 'main';
12-
export let scrollContainer = window;
13+
export let scrollContainer = BROWSER ? window : null;
1314
export let scrollOffset = 0;
1415
export let maxDepth = 6;
1516
export let icon = mdiCircleSmall;
@@ -52,13 +53,13 @@
5253
});
5354
nodes = buildTree(headings);
5455
55-
scrollContainer.addEventListener('scroll', onScroll, { passive: true });
56+
scrollContainer?.addEventListener('scroll', onScroll, { passive: true });
5657
// set first heading until scrolled
5758
activeHeadingId = headings[0]?.id;
5859
});
5960
6061
onDestroy(() => {
61-
scrollContainer.removeEventListener('scroll', onScroll);
62+
scrollContainer?.removeEventListener('scroll', onScroll);
6263
});
6364
</script>
6465

0 commit comments

Comments
 (0)