diff --git a/.changeset/clever-maps-travel.md b/.changeset/clever-maps-travel.md new file mode 100644 index 0000000000..e0eb566bf9 --- /dev/null +++ b/.changeset/clever-maps-travel.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: allow comments after last selector in css diff --git a/.changeset/itchy-beds-kneel.md b/.changeset/itchy-beds-kneel.md new file mode 100644 index 0000000000..59c61ee2ae --- /dev/null +++ b/.changeset/itchy-beds-kneel.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: don't add scoping modifier to nesting selectors diff --git a/.changeset/kind-snakes-drive.md b/.changeset/kind-snakes-drive.md new file mode 100644 index 0000000000..4ca726ad9a --- /dev/null +++ b/.changeset/kind-snakes-drive.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: migrate derivations without semicolons diff --git a/.changeset/mean-jokes-exist.md b/.changeset/mean-jokes-exist.md new file mode 100644 index 0000000000..9bc55520ea --- /dev/null +++ b/.changeset/mean-jokes-exist.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +chore: speedup hydration around input and select values diff --git a/.changeset/plenty-elephants-fry.md b/.changeset/plenty-elephants-fry.md new file mode 100644 index 0000000000..06e05496d6 --- /dev/null +++ b/.changeset/plenty-elephants-fry.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: check for invalid bindings on window and document diff --git a/.changeset/pre.json b/.changeset/pre.json index 01cb500c88..a5505b0a82 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -60,6 +60,7 @@ "chilly-snakes-scream", "clean-eels-beg", "clever-chefs-relate", + "clever-maps-travel", "clever-rockets-burn", "clever-sloths-push", "cold-birds-own", @@ -208,6 +209,7 @@ "hungry-tips-unite", "hungry-trees-travel", "itchy-beans-melt", + "itchy-beds-kneel", "itchy-bulldogs-tan", "itchy-eels-marry", "itchy-kings-deliver", @@ -227,6 +229,7 @@ "kind-dots-sort", "kind-eagles-join", "kind-rings-flash", + "kind-snakes-drive", "kind-spoons-return", "large-clouds-carry", "large-turkeys-deny", @@ -267,6 +270,7 @@ "lucky-toes-begin", "many-rockets-give", "many-trees-fix", + "mean-jokes-exist", "metal-clouds-raise", "metal-lobsters-burn", "mighty-cooks-scream", @@ -318,6 +322,7 @@ "pink-bikes-agree", "pink-goats-promise", "pink-mayflies-tie", + "plenty-elephants-fry", "plenty-starfishes-dress", "plenty-zoos-fix", "polite-dolphins-care", @@ -338,7 +343,9 @@ "purple-dragons-peel", "quiet-apricots-dream", "quiet-berries-end", + "quiet-berries-explode", "quiet-camels-mate", + "quiet-cobras-smile", "quiet-crabs-nail", "quiet-timers-speak", "rare-mirrors-act", @@ -431,6 +438,7 @@ "soft-tigers-wink", "sour-bags-fail", "sour-forks-stare", + "sour-jeans-collect", "sour-rules-march", "sour-weeks-fix", "spicy-jeans-deliver", @@ -465,6 +473,7 @@ "tall-shrimps-worry", "tall-tigers-wait", "tame-cycles-kneel", + "tame-dots-battle", "tame-spies-drum", "tasty-cheetahs-appear", "tasty-numbers-perform", @@ -503,6 +512,7 @@ "tiny-meals-deliver", "tiny-moose-kiss", "tough-radios-punch", + "twelve-beans-drive", "twelve-dragons-join", "twelve-onions-juggle", "twelve-worms-jog", diff --git a/.changeset/quiet-cobras-smile.md b/.changeset/quiet-cobras-smile.md new file mode 100644 index 0000000000..10b4879837 --- /dev/null +++ b/.changeset/quiet-cobras-smile.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: inline pointer events now correctly work in Chrome diff --git a/.changeset/sour-jeans-collect.md b/.changeset/sour-jeans-collect.md new file mode 100644 index 0000000000..3e39d9ae04 --- /dev/null +++ b/.changeset/sour-jeans-collect.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: update value like attributes in a separate template_effect diff --git a/.changeset/tame-dots-battle.md b/.changeset/tame-dots-battle.md new file mode 100644 index 0000000000..12cb09c7b4 --- /dev/null +++ b/.changeset/tame-dots-battle.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: improve handling of unowned derived signal diff --git a/.gitignore b/.gitignore index 16cac3b27f..4ce5c243c7 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ coverage .env.test # build output -dist .vercel # OS-specific diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index fde8f91e31..fb590bf82b 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,33 @@ # svelte +## 5.0.0-next.138 + +### Patch Changes + +- fix: allow comments after last selector in css ([#11723](https://github.com/sveltejs/svelte/pull/11723)) + +- fix: don't add scoping modifier to nesting selectors ([#11713](https://github.com/sveltejs/svelte/pull/11713)) + +- chore: speedup hydration around input and select values ([#11717](https://github.com/sveltejs/svelte/pull/11717)) + +- fix: update value like attributes in a separate template_effect ([#11720](https://github.com/sveltejs/svelte/pull/11720)) + +- fix: improve handling of unowned derived signal ([#11712](https://github.com/sveltejs/svelte/pull/11712)) + +## 5.0.0-next.137 + +### Patch Changes + +- fix: migrate derivations without semicolons ([#11704](https://github.com/sveltejs/svelte/pull/11704)) + +- fix: check for invalid bindings on window and document ([#11676](https://github.com/sveltejs/svelte/pull/11676)) + +- fix: more efficient spread attributes in SSR output ([#11660](https://github.com/sveltejs/svelte/pull/11660)) + +- fix: inline pointer events now correctly work in Chrome ([#11695](https://github.com/sveltejs/svelte/pull/11695)) + +- fix: don't require warning codes to be separated by commas in non-runes mode ([#11669](https://github.com/sveltejs/svelte/pull/11669)) + ## 5.0.0-next.136 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 0ce76eb44f..7ec190a899 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -2,7 +2,7 @@ "name": "svelte", "description": "Cybernetically enhanced web apps", "license": "MIT", - "version": "5.0.0-next.136", + "version": "5.0.0-next.138", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/compiler/migrate/index.js b/packages/svelte/src/compiler/migrate/index.js index 0a64088c5a..0ca0fba137 100644 --- a/packages/svelte/src/compiler/migrate/index.js +++ b/packages/svelte/src/compiler/migrate/index.js @@ -369,11 +369,15 @@ const instance_script = { /** @type {number} */ (node.body.expression.right.start), '$derived(' ); - state.str.update( - /** @type {number} */ (node.body.expression.right.end), - /** @type {number} */ (node.end), - ');' - ); + if (node.body.expression.right.end !== node.end) { + state.str.update( + /** @type {number} */ (node.body.expression.right.end), + /** @type {number} */ (node.end), + ');' + ); + } else { + state.str.appendRight(/** @type {number} */ (node.end), ');'); + } return; } else { for (const binding of reassigned_bindings) { diff --git a/packages/svelte/src/compiler/phases/1-parse/read/style.js b/packages/svelte/src/compiler/phases/1-parse/read/style.js index ebd3b1a715..fdc79f6bae 100644 --- a/packages/svelte/src/compiler/phases/1-parse/read/style.js +++ b/packages/svelte/src/compiler/phases/1-parse/read/style.js @@ -139,7 +139,7 @@ function read_selector_list(parser, inside_pseudo_class = false) { const end = parser.index; - parser.allow_whitespace(); + allow_comment_or_whitespace(parser); if (inside_pseudo_class ? parser.match(')') : parser.match('{')) { return { @@ -324,7 +324,7 @@ function read_selector(parser, inside_pseudo_class = false) { } const index = parser.index; - parser.allow_whitespace(); + allow_comment_or_whitespace(parser); if (parser.match(',') || (inside_pseudo_class ? parser.match(')') : parser.match('{'))) { // rewind, so we know whether to continue building the selector list diff --git a/packages/svelte/src/compiler/phases/1-parse/state/element.js b/packages/svelte/src/compiler/phases/1-parse/state/element.js index cb6f24f868..235f64f893 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/element.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/element.js @@ -217,7 +217,7 @@ export default function tag(parser) { while ((attribute = read(parser))) { if (attribute.type === 'Attribute' || attribute.type === 'BindDirective') { if (unique_names.includes(attribute.name)) { - e.attribute_duplicate(attribute.start); + e.attribute_duplicate(attribute); // is allowed } else if (attribute.name !== 'this') { unique_names.push(attribute.name); diff --git a/packages/svelte/src/compiler/phases/2-analyze/validation.js b/packages/svelte/src/compiler/phases/2-analyze/validation.js index 4c14f2b4dc..067c5a4d95 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/validation.js +++ b/packages/svelte/src/compiler/phases/2-analyze/validation.js @@ -393,6 +393,23 @@ const validation = { ); } + if (property.invalid_elements && property.invalid_elements.includes(parent.name)) { + const valid_bindings = Object.entries(binding_properties) + .filter(([_, binding_property]) => { + return ( + binding_property.valid_elements?.includes(parent.name) || + (!binding_property.valid_elements && + !binding_property.invalid_elements?.includes(parent.name)) + ); + }) + .map(([property_name]) => property_name); + e.bind_invalid_name( + node, + node.name, + `Possible bindings for <${parent.name}> are ${valid_bindings.join(', ')}` + ); + } + if (parent.name === 'input' && node.name !== 'this') { const type = /** @type {import('#compiler').Attribute | undefined} */ ( parent.attributes.find((a) => a.type === 'Attribute' && a.name === 'type') diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js index 4cc0c836bf..ce8068371e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js @@ -506,6 +506,10 @@ function serialize_element_attribute_update_assignment(element, node_id, attribu value ) ); + } else if (name === 'value') { + update = b.stmt(b.call('$.set_value', node_id, value)); + } else if (name === 'checked') { + update = b.stmt(b.call('$.set_checked', node_id, value)); } else if (DOMProperties.includes(name)) { update = b.stmt(b.assignment('=', b.member(node_id, b.id(name)), value)); } else { @@ -1990,7 +1994,7 @@ export const template_visitors = { child_metadata.bound_contenteditable = true; } - if (needs_input_reset && (node.name === 'input' || node.name === 'select')) { + if (needs_input_reset && node.name === 'input') { context.state.init.push(b.stmt(b.call('$.remove_input_attr_defaults', context.state.node))); } diff --git a/packages/svelte/src/compiler/phases/3-transform/css/index.js b/packages/svelte/src/compiler/phases/3-transform/css/index.js index cb54841657..2fd588b9e3 100644 --- a/packages/svelte/src/compiler/phases/3-transform/css/index.js +++ b/packages/svelte/src/compiler/phases/3-transform/css/index.js @@ -238,7 +238,7 @@ const visitors = { } } - if (relative_selector.selectors.every((s) => s.type === 'NestingSelector')) { + if (relative_selector.selectors.some((s) => s.type === 'NestingSelector')) { continue; } diff --git a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js index d57f848f1e..1800479a68 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/transform-server.js @@ -1851,18 +1851,27 @@ function serialize_element_attributes(node, context) { for (const attribute of node.attributes) { if (attribute.type === 'Attribute') { - if (attribute.name === 'value' && node.name === 'textarea') { - if ( - attribute.value !== true && - attribute.value[0].type === 'Text' && - regex_starts_with_newline.test(attribute.value[0].data) - ) { - // Two or more leading newlines are required to restore the leading newline immediately after ` + + + + \ No newline at end of file diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/_config.js new file mode 100644 index 0000000000..5a19fa4773 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/_config.js @@ -0,0 +1,23 @@ +import { flushSync } from 'svelte'; +import { test } from '../../test'; + +export default test({ + mode: ['client'], + async test({ assert, target, logs }) { + let [btn1] = target.querySelectorAll('button'); + + flushSync(() => { + btn1.click(); + }); + + flushSync(() => { + btn1.click(); + }); + + flushSync(() => { + btn1.click(); + }); + + assert.deepEqual(logs, ['recalculating']); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/main.svelte b/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/main.svelte new file mode 100644 index 0000000000..5644e87377 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-8/main.svelte @@ -0,0 +1,18 @@ + + + +{#if visible} +

{derived}

+{/if} diff --git a/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/_config.js b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/_config.js new file mode 100644 index 0000000000..d2a0703301 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/_config.js @@ -0,0 +1,34 @@ +import { test, ok } from '../../test'; +import { flushSync } from 'svelte'; + +export default test({ + mode: ['client'], + + async test({ assert, target }) { + /** + * @type {HTMLInputElement | null} + */ + const input = target.querySelector('input[type=text]'); + const button = target.querySelector('button'); + /** + * @type {HTMLInputElement | null} + */ + const checkbox = target.querySelector('input[type=checkbox]'); + const textarea = target.querySelector('textarea'); + ok(input); + ok(button); + ok(checkbox); + ok(textarea); + + flushSync(() => { + input.value = 'foo'; + checkbox.click(); + textarea.innerHTML = 'bar'; + button.click(); + }); + + assert.equal(input.value, 'foo'); + assert.equal(checkbox.checked, true); + assert.equal(textarea.innerHTML, 'bar'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/main.svelte b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/main.svelte new file mode 100644 index 0000000000..b5c47f0131 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update-spread/main.svelte @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/_config.js b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/_config.js new file mode 100644 index 0000000000..d2a0703301 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/_config.js @@ -0,0 +1,34 @@ +import { test, ok } from '../../test'; +import { flushSync } from 'svelte'; + +export default test({ + mode: ['client'], + + async test({ assert, target }) { + /** + * @type {HTMLInputElement | null} + */ + const input = target.querySelector('input[type=text]'); + const button = target.querySelector('button'); + /** + * @type {HTMLInputElement | null} + */ + const checkbox = target.querySelector('input[type=checkbox]'); + const textarea = target.querySelector('textarea'); + ok(input); + ok(button); + ok(checkbox); + ok(textarea); + + flushSync(() => { + input.value = 'foo'; + checkbox.click(); + textarea.innerHTML = 'bar'; + button.click(); + }); + + assert.equal(input.value, 'foo'); + assert.equal(checkbox.checked, true); + assert.equal(textarea.innerHTML, 'bar'); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/main.svelte b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/main.svelte new file mode 100644 index 0000000000..35bd481a4c --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/value-attribute-isolated-update/main.svelte @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/errors.json b/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/errors.json new file mode 100644 index 0000000000..57b4aea046 --- /dev/null +++ b/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/errors.json @@ -0,0 +1,14 @@ +[ + { + "code": "bind_invalid_name", + "message": "`bind:clientWidth` is not a valid binding. Possible bindings for are focused, fullscreenElement, visibilityState, this", + "start": { + "line": 5, + "column": 17 + }, + "end": { + "line": 5, + "column": 39 + } + } +] diff --git a/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/input.svelte b/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/input.svelte new file mode 100644 index 0000000000..68c833fb38 --- /dev/null +++ b/packages/svelte/tests/validator/samples/document-binding-invalid-dimensions/input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/errors.json b/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/errors.json new file mode 100644 index 0000000000..12db6f5a26 --- /dev/null +++ b/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/errors.json @@ -0,0 +1,14 @@ +[ + { + "code": "bind_invalid_name", + "message": "`bind:clientWidth` is not a valid binding. Possible bindings for are focused, innerWidth, innerHeight, outerWidth, outerHeight, scrollX, scrollY, online, devicePixelRatio, this", + "start": { + "line": 5, + "column": 15 + }, + "end": { + "line": 5, + "column": 37 + } + } +] diff --git a/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/input.svelte b/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/input.svelte new file mode 100644 index 0000000000..94022fc84b --- /dev/null +++ b/packages/svelte/tests/validator/samples/window-binding-invalid-dimensions/input.svelte @@ -0,0 +1,5 @@ + + + diff --git a/playgrounds/demo/.gitignore b/playgrounds/demo/.gitignore index 13c523dea0..3653d28870 100644 --- a/playgrounds/demo/.gitignore +++ b/playgrounds/demo/.gitignore @@ -1,4 +1,5 @@ src/* -dist/* +dist/client/* +dist/server/* !src/entry-client.ts !src/entry-server.ts diff --git a/playgrounds/demo/dist/index.js b/playgrounds/demo/dist/index.js new file mode 100644 index 0000000000..4aa70d0f14 --- /dev/null +++ b/playgrounds/demo/dist/index.js @@ -0,0 +1,22 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import express from 'express'; +import { head, html } from './server/entry-server.js'; + +const rendered = fs + .readFileSync(path.resolve('./dist/client/index.html'), 'utf-8') + .replace(``, html) + .replace(``, head); + +express() + .use('*', async (req, res) => { + if (req.originalUrl !== '/') { + res.sendFile(path.resolve('./dist/client' + req.originalUrl)); + return; + } + + res.status(200).set({ 'Content-Type': 'text/html' }).end(rendered); + }) + .listen('3000'); + +console.log('listening on http://localhost:3000'); diff --git a/playgrounds/demo/package.json b/playgrounds/demo/package.json index 7f0c920d0f..e96e8011ba 100644 --- a/playgrounds/demo/package.json +++ b/playgrounds/demo/package.json @@ -7,7 +7,8 @@ "prepare": "node scripts/create-app-svelte.js", "dev": "vite --host", "ssr": "node ./server.js", - "build": "vite build", + "build": "vite build --outDir dist/client && vite build --outDir dist/server --ssr src/entry-server.ts", + "prod": "npm run build && node dist", "preview": "vite preview" }, "devDependencies": { diff --git a/playgrounds/demo/vite.config.js b/playgrounds/demo/vite.config.js index a6a970e8cd..0feb57810d 100644 --- a/playgrounds/demo/vite.config.js +++ b/playgrounds/demo/vite.config.js @@ -3,6 +3,9 @@ import inspect from 'vite-plugin-inspect'; import { svelte } from '@sveltejs/vite-plugin-svelte'; export default defineConfig({ + build: { + minify: false + }, plugins: [inspect(), svelte()], optimizeDeps: { // svelte is a local workspace package, optimizing it would require dev server restarts with --force for every change diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d9ff6ad1c2..3eef183e05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -223,8 +223,8 @@ importers: specifier: ^6.0.0 version: 6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.9)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.15)(@lezer/lr@1.4.0) '@rich_harris/svelte-split-pane': - specifier: ^1.1.2 - version: 1.1.2(svelte@packages+svelte) + specifier: ^1.1.3 + version: 1.1.3(svelte@packages+svelte) '@rollup/browser': specifier: ^3.28.0 version: 3.29.4 @@ -2320,16 +2320,16 @@ packages: '@resvg/resvg-js-win32-x64-msvc': 2.6.0 dev: true - /@rich_harris/svelte-split-pane@1.1.1(svelte@4.2.9): - resolution: {integrity: sha512-y2RRLyrN6DCeIgwA423aAIv/T5JqQeOl2XogBQ/21DvA2IF7oyrLUtXMxmQL2va2NFdeJO6MDx6nDX5X7kau7A==} + /@rich_harris/svelte-split-pane@1.1.2(svelte@4.2.9): + resolution: {integrity: sha512-O601UlgGzrn6Nva7uLAF25h63wvrI2rxDh5KTEXd0pdTP7LetHR/rqgi8jyPIgRDCL86eoopEdC3ejOOQoWGWQ==} peerDependencies: - svelte: ^3.54.0 + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 dependencies: svelte: 4.2.9 dev: false - /@rich_harris/svelte-split-pane@1.1.2(svelte@packages+svelte): - resolution: {integrity: sha512-O601UlgGzrn6Nva7uLAF25h63wvrI2rxDh5KTEXd0pdTP7LetHR/rqgi8jyPIgRDCL86eoopEdC3ejOOQoWGWQ==} + /@rich_harris/svelte-split-pane@1.1.3(svelte@packages+svelte): + resolution: {integrity: sha512-eziKez1ncDfLqJQsViwLG2rYNfMEa3pYBKFUBfNTChgT5lUnofm5IDHxupAKklKvRpTXCVhQXb1MxLUfj5UgFQ==} peerDependencies: svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 dependencies: @@ -2739,7 +2739,7 @@ packages: '@neocodemirror/svelte': 0.0.15(@codemirror/autocomplete@6.12.0)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0) '@replit/codemirror-lang-svelte': 6.0.0(@codemirror/autocomplete@6.12.0)(@codemirror/lang-css@6.2.1)(@codemirror/lang-html@6.4.9)(@codemirror/lang-javascript@6.2.1)(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0)(@lezer/common@1.2.1)(@lezer/highlight@1.2.0)(@lezer/javascript@1.4.15)(@lezer/lr@1.4.0) '@replit/codemirror-vim': 6.1.0(@codemirror/commands@6.3.3)(@codemirror/language@6.10.1)(@codemirror/search@6.5.6)(@codemirror/state@6.4.0)(@codemirror/view@6.24.0) - '@rich_harris/svelte-split-pane': 1.1.1(svelte@4.2.9) + '@rich_harris/svelte-split-pane': 1.1.2(svelte@4.2.9) '@rollup/browser': 3.29.4 '@sveltejs/site-kit': 5.2.2(@sveltejs/kit@2.4.3)(svelte@4.2.9) acorn: 8.11.3 diff --git a/sites/svelte-5-preview/package.json b/sites/svelte-5-preview/package.json index 137cb17a4e..8325e66a87 100644 --- a/sites/svelte-5-preview/package.json +++ b/sites/svelte-5-preview/package.json @@ -46,7 +46,7 @@ "@lezer/highlight": "^1.1.6", "@neocodemirror/svelte": "0.0.15", "@replit/codemirror-lang-svelte": "^6.0.0", - "@rich_harris/svelte-split-pane": "^1.1.2", + "@rich_harris/svelte-split-pane": "^1.1.3", "@rollup/browser": "^3.28.0", "acorn": "^8.10.0", "codemirror": "^6.0.1", diff --git a/sites/svelte-5-preview/src/lib/CodeMirror.svelte b/sites/svelte-5-preview/src/lib/CodeMirror.svelte index 07432235e0..38b89a9aa9 100644 --- a/sites/svelte-5-preview/src/lib/CodeMirror.svelte +++ b/sites/svelte-5-preview/src/lib/CodeMirror.svelte @@ -246,6 +246,8 @@