* Fixed: bind:scroll resets scroll state
* failing test
* bail if value is undefined
* changeset
---------
Co-authored-by: Rich Harris <rich.harris@vercel.com>
Ownership validation had a false positive when rendering a component as slotted content of another component. To fix this, #11401 did set the current component context to the context the snippet was declared in, not to the context it is rendered in. This was flawed because it means that component context was altered in a way that setContext/getContext failed because the parent chain was incorrect. This fixes that by introducing a separate global (dev time only) which tracks the component function the ownership needs.
fixes#11429
* fix: handle reassignment of `$$props` and `$$restProps`
Some libraries assign to properties of `$$props` and `$$restProps`. These were previously resulting in an error but are now handled properly
https://github.com/sveltejs/svelte/issues/10359#issuecomment-2080067464
* $$props is coarse grained on updates, so we can simplify this
* fix
* fix comment
* start reorganising messages
* tidy up
* more
* more
* more
* alphabetise
* consolidate
* more
* more
* more
* more
* more
* more
* alphabetise
* more
* this is no longer needed
* no longer necessary
* more
* more
* fix
* regenerate messages
* more
* more
* tighten up rune validation
* more
* fix
* more
* tweak a11y messages
* add server errors
* overhaul runtime errors
* regenerate messages
* unused
* lint
* more
* more
* Update packages/svelte/messages/compile-errors/script.md
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* Update packages/svelte/messages/client-warnings/warnings.md
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* fix
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* fix: mark `accessors` and `immutable` as deprecated
* add warnings for deprecated <svelte:options> attributes
* disable accessors in runes mode
* update tests
* tidy up
* the hell?
* regenerate types
* if I would get a dollar for every windows bug I fix I would be a millionaire by now
* return instance _and_ props in runes mode, move flushSync into shared code, don't set accessors in runes mode
* goddammit
* note breaking change
* fix
* regenerate messages
* Revert "return instance _and_ props in runes mode, move flushSync into shared code, don't set accessors in runes mode"
This reverts commit a47827e57d.
* pass instance to tests
---------
Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
* fix: fall back to component namespace when not statically determinable
In #10006 we added more elaborate mechanisms to determine which namespace a given element is in. For `<svelte:element>` we added a "can't know at compile time" case and introduced a limited heuristic into the runtime.
This doesn't work for a few reasons:
- we're checking the parent's namespace to determine the current namespace, but the element itself could be the one that _changes_ the namespace
- as mentioned in the previous comment already, on the first render we can't do any parent analysis
- it does not take into account the static component namespace
The last point is the crucial one: In Svelte 4, we're falling back to the component namespace if we can't know statically - e.g. if someone added `<svelte:options namespace="svg">` then `<svelte:element>` should fall back to that namespace instead.
We were not doing that up until now, which introduced a regression. Fixing this also means getting rid of the (flawed) "can't know statically" heuristic.
Fixes#10858, though for a complete solution we likely need some way to tell `<svelte:element>` the namespace at runtime through a special attribute. Maybe we can use `xmlns` for that like we do in the static case
* support dynamic svelte:element namespace through xmlns attribute
* fix
- take into account that template could consist of a single script tag, for which querySelectorAll('script') would yield false negatives
- add test to ensure that we don't execute script tags inside `@html` tags next to static script tags
fixes#11082
* replace transition code
* get rid of some stuff
* simplify
* remove some junk
* not sure how we solved this before, but i guess this makes sense
* oh hey i don't think we need this
* make elseif transparent for transition purposes
* oops
* edge case
* fix
* do not want
* rename
* transition out ecah blocks when emptying
* baby steps
* hydration fix
* tidy up
* tidy up
* tidy up
* fallbacks
* man i love deleting code
* tidy up
* note to self
* why was this an effect
* tidy up
* tidy up
* key blocks
* temporary
* fix
* WIP
* fix
* simplify
* emit events
* delete delete delete
* destroy child effects
* simplify helper
* simplify helper
* fix
* remove commented out code
* fix wonky test
* fix test
* fix test
* fix test
* dynamic components
* fix test
* await
* tidy up
* fix
* fix
* fix test
* tidy up
* we dont need to reconcile during hydration
* simplify
* tidy up
* fix
* reduce indentation
* simplify
* remove some junk
* remove some junk
* simplify
* tidy up
* prefer while over do-while (this appears to have the same behaviour)
* group fast paths
* rename
* unused import
* unused exports
* try this
* simplify
* simplify
* simplify
* simplify
* tidy up
* simplify
* simplify
* tidy up
* simplify
* simplify
* more compact names
* simplify
* better comments
* simplify
* tidy up
* we don't actually gain anything from this
* fix binding group order bug (revealed by previous commit, but exists separately from it)
* tidy up
* simplify
* tidy up
* remove some junk
* simplify
* note to self
* tidy up
* revert this bit
* tidy up
* simplify
* simplify
* simplify
* symmetry
* tidy up
* var
* rename some stuff
* tidy up
* simplify
* keyed each transitions
* make elements inert
* deferred transitions
* fix
* fix test
* fix some tests
* simplify
* fix
* fix test
* fix
* eh that'll do for now
* fix
* revert all these random changes
* fix
* fix
* simplify
* tidy up
* simplify
* simplify
* tidy up
* tidy up
* tidy up
* WIP
* WIP
* working
* tidy up
* fix
* tidy up
* tidy up
* lerp
* tidy up
* rename
* rename
* almost everything working
* tidy up
* ALL TESTS PASSING
* fix treeshaking
* Apply suggestions from code review
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* comment
* explain elseif locality
* explain flushSync
* comments
* this is accounted for
* add some comments
* remove outdated comment
* add comment
* add comments
* rename
* a few naming tweaks
* explain each_item_block stuff
* remove unused arg
* optimise
* add some comments
* fix test post-optimisation
* explicit comparisons
* some docs
* fix intro events
* move effect.ran into the bitmask
* docs
* rename run_transitions to should_intro, add explanatory jsdoc
* add some more docs
* remove animation before measuring
* only animate blocks that persist
* note to self
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
pre effects, which also contain `$:` statements, are more controlled in legacy mode and should only run once per tick, in their defined order. Flushing them out of order can result in bugs. Related to #10795 and #10787
* fix: improve element class attribute behaviour
* Update packages/svelte/src/internal/client/dom/elements/class.js
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
The await block scope analysis was flawed because it did not set the scope for the value/error field before visiting those nodes, resulting in the wrong scopes getting references
As a byproduct, this fixes#8141
* follow up to 10846
* lint
* simplify
* don't update value
* rework logic, rely more on mutation observer, fix bug related to select multiple
* fix lazy select options bug
---------
Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
Co-authored-by: brunnerh <brunnerh@users.noreply.github.com>
* fix: invalidate store when mutated inside each block
fixes#10771
* Update packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
- run reactive statements only once per tick, even when they have indirect cyclic dependencies. Made possible by adding an array to the component context, which is filled with identifiers of the reactive statements, and which is cleared after all have run. Reactive statements rerunning before that will bail early if they detect they're still in the list
- part of the solution is to run all reactive statements, and then all render effects, which also fixes#10597
Get more validation tests passing:
- const tag cyclic validation (now runtime, based because of new reactivity system)
- illegal-variable-declaration
- illegal-attribute-character
- remove invalid-reactive-var validation as legacy reactive statements are transformed to functions under the hood, which never escape scope - arguably not completely correct, but will be what the user expects anyway
- invalid-rest-eachblock-binding
- remove edge-case redundant-event-modifier warning because event modifiers are deprecated anyway
- invalid-style-directive-modifier
- invalid-tag-property (now a different error)
- module-script-reactive-declaration
- take comment above script into account when silencing warnings
- invalid-css-declaration
- unused-export-let
- invalid-html-attribute
- illegal-store-subscription
- empty-block
* feat: improve ssr html mismatch validation
* update types
* Update packages/svelte/src/internal/server/index.js
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* Update packages/svelte/src/compiler/validate-options.js
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
* feedback
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>