mirror of https://github.com/sveltejs/svelte
async-another-try-pt-2
async-another-try-pt-1
changeset-release/main
main
async-another-try
custom-condition
add-custom-renderer-flag
fix-interleaving
svelte-custom-renderer
await-sourcemaps
bump-devalue-patch
bump-devalue
goodbye-acorn
key-note-best-practices
ts-6
snippet-param-duplicate
teemingc-isolate-custom-element-runtime
migrate-keep-assignment
migrate-line-bounds
dependabot/npm_and_yarn/baseline-browser-mapping-2.11.0
dependabot/npm_and_yarn/vitest-4.1.11
entangle-batches-3
teardown-props-robustness
state-onchange-verified-links
message-box
teardown-value-fix
18704-preserve-locations
entangle-batches-2
portals
svelte0/svelte-15053-fix-stop-currenttime-binding-updates-during-outros
dependabot/npm_and_yarn/immutable-4.3.9
oxfmt2
incremental-batches
incremental-batches-perf-attempt
dedupe-hydratables
remove-invariant-2
rolldown
svelte-custom-renderer-single-type-argument
elliott/test-target-again
elliott/test-target
test-annoying-store-behaviour
entangle-batches
batch-branches-fix
elliott/dom-clobbering-fix
remove-invariant
tweak-parser
fragmentless-branches
incremental-batches-was-marked
fork-never-write-to-v
agent-driven-perf-investigation
paoloricciuti/issue-17720-print-parse-code-produces-broken-code-ae5d2b
const-await-blockers-fix
async-svelte-map
async-svelte-set
async-blocking-and-merging
async-derived-coordinate-batches
config
runes-mode
stale-batch
always-populate-batch-values
async-svelte-set-alternative
eager-bind-this-teardown
freeze-destroyed-consts
eager-effect-rework
unified-async
best-practices-doc
version-packages-ecosystem-ci
defer-effects-in-pending-boundary
allow-recursive-derived
effect-active
ssr-error-boundary-class
oxlint
bindable-not-updated
hydrate-await-html
object-blockers
beforemount-callback
better-blockers
dependencies-set
elliott/break-out-css-parser
customizable-select-skip-hydration
gh-17393
clear-batch-between-runs
partial-components
allow-state-as-derived-init
hydratable-thenable
dedupe-stack-stuff
fork-methods
elliott/resources
async-each-fix
resource-type
remove-unowned-check
derived-reactivity-loss-fix-alt
gh-17012
state-eager-derived-block
customizable-select
parallelize-async-work
Rich-Harris-patch-1
boundary-batch-first-run
elliott/boundary-issues
elliott/effect-pending-correct-boundary
developer-guide
boundary-batch-nullpointer-fix-alt
legacy-api-hmr-bug
fix-15337
async-fixes-2
1000-reading-derived-effects
binding-fix-2
derived-reactions-maybe-dirty-marked
state-onchange
gh-16365
more-efficient-effect-schedule
source-to-state-in-class-belt-and-braces
warn-read-just-created-state
using-dispose
using
elliott/13891
thunkify-deriveds-on-server
fix-each-legacy-leak
same-fn-attachments
destructure-non-iterators
svelte-4
warn-attachments-legacy-member-access
attach-runes-mode
flush-sync
feat/devtool
binding-evt-without-context
state-onchange-roots
onframe
custom-render-shim-dom
elliott/create-reactive-function
host-docs
invalid-html-structure-error
svelte-element-element
read-old-values-in-teardown
props-id-hydration-markers
fix-props-wrong-value-onunmount
props-id-anywhere
async-changeset
async-fork
aa-coordination-resource
async-abort-signal
aa-coordination
aa
aa-fork
const-rune-usage-error
aaa
attachments-2
tracked
deps-tweak
dont-hoist-snippet-binding-group
ownership-function-bindings
docs-derived-memoized
event-delegation-fixes
fix-inspect-trace
fix-untrack-expose-unsafe
fix-pre-backslash-n
svelte-html
yield
opaque-rune
title-removal-fix
reactivity-boundary-docs
broken-slot-pruning
legacy-conditional-template
hydratable-flag
class-directive-enhancements
gh-14204
ts-strip-fix
migrate-conflict-runes
warning-message
update-store-docs
revert-13651-compile-warning
disclaimer
transition-out-effect-tracking
cleanup-non-render-effects-in-blocks
annotate-notes
migrate-svelte-component
css-migrate-blank
fix-import-run-space
gh-13270
gh-13256
table-td-autoopen
better-docs-for-css-injected
revert-13158-valid-ssr
derived-by-current-value
custom-formatter
gh-12624
omit-trailing-sibling-calls
gh-12084
state-link-fix
readonly-props
gh-12896
migrate-member-assignment
animation-params
feat/support-modern-ast-flag-on-repl
nolyfill
svelte-5-docs-proposal-wip
fix-memory-leak-
chore/bump-deps
snippet-work-cont
effect-active-derived-allow-unowned
runes-in-constructor
some-cleanup
fix-playground
better-snapshot
object-freeze-fix
context-ownership
props-bindable
effect-docs-2
blockless
remove-readonly-check
ttf-fix
remove-ttf-hack
derived-consumer-fix
compile-return-ast
rm-bytes
hoist-unmodified-var
puru/try-jsdelivr
benmccann-patch-2
elliott/add-variadic-snippets
proxied-state-set
dynamic-component-types
proxied-state-each-blocks
baseballyama-docs/string-event
tidy-up-analysis
svelte-4-base
fix-symlink
quicker-redirects
introducing-runes
versioned-docs
raw-hydration-mismatch
fix-stale-await-ctx
parse-regexp-no-paren
fix-dyn-component-test
ce-tick
feat/orama
parser-let-destructure
version-3
sites-examples
gh-3780
v2
svelte@5.57.1
svelte@5.57.0
svelte@5.56.10
svelte@5.56.9
svelte@5.56.8
svelte@5.56.7
svelte@5.56.6
svelte@5.56.5
svelte@5.56.4
svelte@5.56.3
svelte@5.56.2
svelte@5.56.1
svelte@5.56.0
svelte@5.55.10
svelte@5.55.9
svelte@5.55.8
svelte@5.55.7
svelte@5.55.6
svelte@5.55.5
svelte@5.55.4
svelte@5.55.3
svelte@5.55.2
svelte@5.55.1
svelte@5.55.0
svelte@5.54.1
svelte@5.54.0
svelte@5.53.13
svelte@5.53.12
svelte@5.53.11
svelte@5.53.10
svelte@5.53.9
svelte@5.53.8
svelte@5.53.7
svelte@5.53.6
svelte@5.53.5
svelte@5.53.4
svelte@5.53.3
svelte@5.53.2
svelte@5.53.1
svelte@5.53.0
svelte@5.52.0
svelte@5.51.5
svelte@5.51.4
svelte@5.51.3
svelte@5.51.2
svelte@5.51.1
svelte@5.51.0
svelte@5.50.3
svelte@5.50.2
svelte@5.50.1
svelte@5.50.0
svelte@5.49.2
svelte@5.49.1
svelte@5.49.0
svelte@5.48.5
svelte@5.48.4
svelte@5.48.3
svelte@5.48.2
svelte@5.48.1
svelte@5.48.0
svelte@5.47.1
svelte@5.47.0
svelte@5.46.4
svelte@5.46.3
svelte@5.46.1
svelte@5.46.0
svelte@5.45.10
svelte@5.45.9
svelte@5.45.8
svelte@5.45.7
svelte@5.45.6
svelte@5.45.5
svelte@5.45.4
svelte@5.45.3
svelte@5.45.2
svelte@5.45.1
svelte@5.45.0
svelte@5.44.1
svelte@5.44.0
svelte@5.43.15
svelte@5.43.14
svelte@5.43.13
svelte@5.43.12
svelte@5.43.11
svelte@5.43.10
svelte@5.43.9
svelte@5.43.8
svelte@5.43.7
svelte@5.43.6
svelte@5.43.5
svelte@5.43.4
svelte@5.43.3
svelte@5.43.2
svelte@5.43.1
svelte@5.43.0
svelte@5.42.3
svelte@5.42.2
svelte@5.42.1
svelte@5.42.0
svelte@5.41.4
svelte@5.41.3
svelte@5.41.2
svelte@5.41.1
svelte@5.41.0
svelte@5.40.2
svelte@5.40.1
svelte@5.40.0
svelte@5.39.13
svelte@5.39.12
svelte@5.39.11
svelte@5.39.10
svelte@5.39.9
svelte@5.39.8
svelte@5.39.7
svelte@5.39.6
svelte@5.39.5
svelte@5.39.4
svelte@5.39.3
svelte@5.39.2
svelte@5.39.1
svelte@5.39.0
svelte@5.38.10
svelte@5.38.9
svelte@5.38.8
svelte@5.38.7
svelte@5.38.6
svelte@5.38.5
svelte@5.38.3
svelte@5.38.2
svelte@5.38.1
svelte@5.38.0
svelte@5.37.3
svelte@5.37.2
svelte@5.37.1
svelte@5.37.0
svelte@5.36.17
svelte@5.36.16
svelte@5.36.15
svelte@5.36.14
svelte@5.36.13
svelte@5.36.12
svelte@5.36.10
svelte@5.36.9
svelte@5.36.8
svelte@5.36.7
svelte@5.36.6
svelte@5.36.5
svelte@5.36.4
svelte@5.36.3
svelte@5.36.2
svelte@5.36.1
svelte@5.36.0
svelte@5.35.7
svelte@5.35.6
svelte@5.35.5
svelte@5.35.4
svelte@5.35.3
svelte@5.35.2
svelte@5.35.1
svelte@5.35.0
svelte@5.34.9
svelte@5.34.8
svelte@5.34.7
svelte@5.34.6
svelte@5.34.5
svelte@5.34.4
svelte@5.34.3
svelte@5.34.2
svelte@5.34.1
svelte@5.34.0
svelte@5.33.19
svelte@5.33.18
svelte@5.33.17
svelte@5.33.16
svelte@5.33.15
svelte@5.33.14
svelte@5.33.13
svelte@5.33.12
svelte@5.33.11
svelte@5.33.10
svelte@5.33.9
svelte@5.33.8
svelte@5.33.7
svelte@5.33.6
svelte@5.33.5
svelte@5.33.4
svelte@5.33.3
svelte@5.33.2
svelte@5.33.1
svelte@5.33.0
svelte@5.32.2
svelte@5.32.1
svelte@4.2.20
svelte@5.32.0
svelte@5.31.1
svelte@5.31.0
svelte@5.30.2
svelte@5.30.1
svelte@5.30.0
svelte@5.29.0
svelte@5.28.7
svelte@5.28.6
svelte@5.28.5
svelte@5.28.4
svelte@5.28.3
svelte@5.28.2
svelte@5.28.1
svelte@5.28.0
svelte@5.27.3
svelte@5.27.2
svelte@5.27.1
svelte@5.27.0
svelte@5.26.3
svelte@5.26.2
svelte@5.26.1
svelte@5.26.0
svelte@5.25.12
svelte@5.25.11
svelte@5.25.10
svelte@5.25.9
svelte@5.25.8
svelte@5.25.7
svelte@5.25.6
svelte@5.25.5
svelte@5.25.4
svelte@5.25.3
svelte@5.25.2
svelte@5.25.1
svelte@5.25.0
svelte@5.24.1
svelte@5.24.0
svelte@5.23.2
svelte@5.23.1
svelte@5.23.0
svelte@5.22.6
svelte@5.22.5
svelte@5.22.4
svelte@5.22.3
svelte@5.22.2
svelte@5.22.1
svelte@5.22.0
svelte@5.21.0
svelte@5.20.5
svelte@5.20.4
svelte@5.20.3
svelte@5.20.2
svelte@5.20.1
svelte@5.20.0
svelte@5.19.10
svelte@5.19.9
svelte@5.19.8
svelte@5.19.7
svelte@5.19.6
svelte@5.19.5
svelte@5.19.4
svelte@5.19.3
svelte@5.19.2
svelte@5.19.1
svelte@5.19.0
svelte@5.18.0
svelte@5.17.5
svelte@5.17.4
svelte@5.17.3
svelte@5.17.2
svelte@5.17.1
svelte@5.17.0
svelte@5.16.6
svelte@5.16.5
svelte@5.16.4
svelte@5.16.3
svelte@5.16.2
svelte@5.16.1
svelte@5.16.0
svelte@5.15.0
svelte@5.14.6
svelte@5.14.5
svelte@5.14.4
svelte@5.14.3
svelte@5.14.2
svelte@5.14.1
svelte@5.14.0
svelte@5.13.0
svelte@5.12.0
svelte@5.11.3
svelte@5.11.2
svelte@5.11.1
svelte@5.11.0
svelte@5.10.1
svelte@5.10.0
svelte@5.9.1
svelte@5.9.0
svelte@5.8.1
svelte@5.8.0
svelte@5.7.1
svelte@5.7.0
svelte@5.6.2
svelte@5.6.1
svelte@5.6.0
svelte@5.5.4
svelte@5.5.3
svelte@5.5.2
svelte@5.5.0
svelte@5.4.0
svelte@5.3.2
svelte@5.3.1
svelte@5.3.0
svelte@5.2.12
svelte@5.2.11
svelte@5.2.10
svelte@5.2.9
svelte@5.2.8
svelte@5.2.7
svelte@5.2.6
svelte@5.2.5
svelte@5.2.4
svelte@5.2.3
svelte@5.2.2
svelte@5.2.1
svelte@5.2.0
svelte@5.1.17
svelte@5.1.16
svelte@5.1.15
svelte@5.1.14
svelte@5.1.13
svelte@5.1.12
svelte@5.1.11
svelte@5.1.10
svelte@5.1.9
svelte@5.1.8
svelte@5.1.7
svelte@5.1.6
svelte@5.1.5
svelte@5.1.4
svelte@5.1.3
svelte@5.1.2
svelte@5.1.1
svelte@5.1.0
svelte@5.0.5
svelte@5.0.4
svelte@5.0.3
svelte@5.0.2
svelte@5.0.1
svelte@5.0.0
svelte@5.0.0-next.272
svelte@5.0.0-next.271
svelte@5.0.0-next.270
svelte@5.0.0-next.269
svelte@5.0.0-next.268
svelte@5.0.0-next.267
svelte@5.0.0-next.266
svelte@5.0.0-next.265
svelte@5.0.0-next.264
svelte@5.0.0-next.263
svelte@5.0.0-next.262
svelte@5.0.0-next.260
svelte@5.0.0-next.259
svelte@5.0.0-next.258
svelte@5.0.0-next.257
svelte@5.0.0-next.256
svelte@5.0.0-next.255
svelte@5.0.0-next.254
svelte@5.0.0-next.253
svelte@5.0.0-next.252
svelte@5.0.0-next.251
svelte@5.0.0-next.250
svelte@5.0.0-next.249
svelte@5.0.0-next.248
svelte@5.0.0-next.247
svelte@5.0.0-next.246
svelte@5.0.0-next.245
svelte@5.0.0-next.244
svelte@5.0.0-next.243
svelte@5.0.0-next.242
svelte@5.0.0-next.241
svelte@5.0.0-next.240
svelte@5.0.0-next.239
svelte@5.0.0-next.238
svelte@5.0.0-next.237
svelte@5.0.0-next.236
svelte@4.2.19
svelte@5.0.0-next.235
svelte@5.0.0-next.234
svelte@5.0.0-next.233
svelte@5.0.0-next.232
svelte@5.0.0-next.231
svelte@5.0.0-next.230
svelte@5.0.0-next.229
svelte@5.0.0-next.228
svelte@5.0.0-next.227
svelte@5.0.0-next.226
svelte@5.0.0-next.225
svelte@5.0.0-next.224
svelte@5.0.0-next.223
svelte@5.0.0-next.222
svelte@5.0.0-next.221
svelte@5.0.0-next.220
svelte@5.0.0-next.219
svelte@5.0.0-next.218
svelte@5.0.0-next.217
svelte@5.0.0-next.216
svelte@5.0.0-next.215
svelte@5.0.0-next.214
svelte@5.0.0-next.213
svelte@5.0.0-next.212
svelte@5.0.0-next.211
svelte@5.0.0-next.210
svelte@5.0.0-next.208
svelte@5.0.0-next.207
svelte@5.0.0-next.206
svelte@5.0.0-next.205
svelte@5.0.0-next.204
svelte@5.0.0-next.203
svelte@5.0.0-next.202
svelte@5.0.0-next.201
svelte@5.0.0-next.200
svelte@5.0.0-next.199
svelte@5.0.0-next.198
svelte@5.0.0-next.197
svelte@5.0.0-next.196
svelte@5.0.0-next.195
svelte@5.0.0-next.194
svelte@5.0.0-next.193
svelte@5.0.0-next.192
svelte@5.0.0-next.191
svelte@5.0.0-next.190
svelte@5.0.0-next.189
svelte@5.0.0-next.188
svelte@5.0.0-next.187
svelte@5.0.0-next.186
svelte@5.0.0-next.185
svelte@5.0.0-next.184
svelte@5.0.0-next.183
svelte@5.0.0-next.182
svelte@5.0.0-next.181
svelte@5.0.0-next.180
svelte@5.0.0-next.179
svelte@5.0.0-next.178
svelte@5.0.0-next.177
svelte@5.0.0-next.176
svelte@5.0.0-next.175
svelte@5.0.0-next.174
svelte@5.0.0-next.173
svelte@5.0.0-next.172
svelte@5.0.0-next.171
svelte@5.0.0-next.170
svelte@5.0.0-next.169
svelte@5.0.0-next.168
svelte@5.0.0-next.167
svelte@5.0.0-next.166
svelte@5.0.0-next.165
svelte@5.0.0-next.164
svelte@5.0.0-next.163
svelte@5.0.0-next.160
svelte@5.0.0-next.159
svelte@5.0.0-next.158
svelte@5.0.0-next.157
svelte@5.0.0-next.155
svelte@5.0.0-next.154
svelte@5.0.0-next.153
svelte@5.0.0-next.152
svelte@5.0.0-next.151
svelte@4.2.18
svelte@5.0.0-next.150
svelte@5.0.0-next.149
svelte@5.0.0-next.148
svelte@5.0.0-next.147
svelte@5.0.0-next.144
svelte@5.0.0-next.143
svelte@5.0.0-next.142
svelte@5.0.0-next.141
svelte@5.0.0-next.140
svelte@5.0.0-next.139
svelte@5.0.0-next.138
svelte@5.0.0-next.137
svelte@5.0.0-next.136
svelte@5.0.0-next.135
svelte@5.0.0-next.134
svelte@5.0.0-next.133
svelte@5.0.0-next.132
svelte@4.2.17
svelte@5.0.0-next.131
svelte@5.0.0-next.130
svelte@5.0.0-next.129
svelte@5.0.0-next.128
svelte@5.0.0-next.127
svelte@5.0.0-next.126
svelte@5.0.0-next.125
svelte@4.2.16
svelte@5.0.0-next.123
svelte@5.0.0-next.121
svelte@5.0.0-next.120
svelte@5.0.0-next.119
svelte@5.0.0-next.118
svelte@5.0.0-next.117
svelte@5.0.0-next.116
svelte@5.0.0-next.115
svelte@5.0.0-next.114
svelte@5.0.0-next.113
svelte@5.0.0-next.112
svelte@5.0.0-next.111
svelte@5.0.0-next.110
svelte@5.0.0-next.109
svelte@5.0.0-next.108
svelte@4.2.15
svelte@5.0.0-next.107
svelte@5.0.0-next.106
svelte@5.0.0-next.105
svelte@5.0.0-next.104
svelte@5.0.0-next.103
svelte@5.0.0-next.102
svelte@4.2.14
svelte@5.0.0-next.101
svelte@5.0.0-next.100
svelte@5.0.0-next.99
svelte@5.0.0-next.98
svelte@5.0.0-next.97
svelte@4.2.13
svelte@5.0.0-next.96
svelte@5.0.0-next.95
svelte@5.0.0-next.94
svelte@5.0.0-next.93
svelte@5.0.0-next.92
svelte@5.0.0-next.91
svelte@5.0.0-next.90
svelte@5.0.0-next.89
svelte@5.0.0-next.88
svelte@5.0.0-next.87
svelte@5.0.0-next.86
svelte@5.0.0-next.85
svelte@5.0.0-next.84
svelte@5.0.0-next.83
svelte@5.0.0-next.82
svelte@5.0.0-next.81
svelte@5.0.0-next.80
svelte@5.0.0-next.79
svelte@5.0.0-next.78
svelte@5.0.0-next.77
svelte@5.0.0-next.76
svelte@5.0.0-next.75
svelte@5.0.0-next.74
svelte@5.0.0-next.73
svelte@5.0.0-next.72
svelte@5.0.0-next.71
svelte@5.0.0-next.70
svelte@5.0.0-next.69
svelte@5.0.0-next.68
svelte@5.0.0-next.67
svelte@5.0.0-next.66
svelte@4.2.12
svelte@5.0.0-next.65
svelte@5.0.0-next.64
svelte@5.0.0-next.63
svelte@5.0.0-next.62
svelte@5.0.0-next.61
svelte@5.0.0-next.60
svelte@5.0.0-next.59
svelte@5.0.0-next.58
svelte@5.0.0-next.57
svelte@5.0.0-next.56
svelte@5.0.0-next.55
svelte@4.2.11
svelte@5.0.0-next.54
svelte@5.0.0-next.53
svelte@5.0.0-next.52
svelte@5.0.0-next.51
svelte@5.0.0-next.50
svelte@5.0.0-next.49
svelte@5.0.0-next.48
svelte@5.0.0-next.47
svelte@4.2.10
svelte@5.0.0-next.46
svelte@5.0.0-next.45
svelte@5.0.0-next.44
svelte@5.0.0-next.43
svelte@5.0.0-next.42
svelte@5.0.0-next.41
svelte@5.0.0-next.40
svelte@5.0.0-next.39
svelte@5.0.0-next.38
svelte@5.0.0-next.37
svelte@4.2.9
svelte@5.0.0-next.36
svelte@5.0.0-next.35
svelte@5.0.0-next.34
svelte@5.0.0-next.33
svelte@5.0.0-next.32
svelte@5.0.0-next.31
svelte@5.0.0-next.30
svelte@5.0.0-next.29
svelte@5.0.0-next.28
svelte@5.0.0-next.27
svelte@5.0.0-next.26
svelte@5.0.0-next.25
svelte@5.0.0-next.24
svelte@5.0.0-next.23
svelte@5.0.0-next.22
svelte@5.0.0-next.21
svelte@5.0.0-next.20
svelte@5.0.0-next.19
svelte@5.0.0-next.18
svelte@5.0.0-next.17
svelte@5.0.0-next.16
svelte@4.2.8
svelte@5.0.0-next.15
svelte@5.0.0-next.14
svelte@5.0.0-next.13
svelte@5.0.0-next.12
svelte@5.0.0-next.11
svelte@5.0.0-next.10
svelte@5.0.0-next.9
svelte@4.2.7
svelte@4.2.6
svelte@5.0.0-next.8
svelte@5.0.0-next.7
svelte@5.0.0-next.6
svelte@5.0.0-next.5
svelte@4.2.5
svelte@4.2.4
svelte@5.0.0-next.4
svelte@5.0.0-next.3
svelte@5.0.0-next.2
svelte@5.0.0-next.1
svelte@4.2.3
svelte@4.2.2
svelte@4.2.1
svelte@4.2.0
svelte@4.1.2
svelte@4.1.1
svelte@4.1.0
svelte@4.0.5
svelte@4.0.4
svelte@4.0.3
svelte@4.0.2
svelte@4.0.1
svelte@4.0.0
svelte@4.0.0-next.3
v3.59.2
svelte@4.0.0-next.1
svelte@4.0.0-next.0
v3.59.1
v3.59.0
v3.58.0
v3.57.0
v3.56.0
v3.55.1
v3.55.0
v3.54.0
v3.53.1
v3.53.0
v3.52.0
v3.51.0
v3.50.1
v3.50.0
v3.49.0
v3.48.0
v3.47.0
v3.46.6
v3.46.5
v3.46.4
v3.46.3
v3.46.2
v3.46.1
v3.46.0
v3.45.0
v3.44.3
v3.44.2
v3.44.1
v3.44.0
v3.43.2
v3.43.1
v3.43.0
v3.42.6
v3.42.5
v3.42.4
v3.42.3
v3.42.2
v3.42.1
v3.42.0
v3.41.0
v3.40.3
v3.40.2
v3.40.1
v3.40.0
v3.39.0
v3.38.3
v3.38.2
v3.38.1
v3.38.0
v3.37.0
v3.36.0
v3.35.0
v3.34.0
v3.33.0
v3.32.3
v3.32.2
v3.32.1
v3.32.0
v3.31.2
v3.31.1
v3.31.0
v3.30.1
v3.30.0
v3.29.7
v3.29.6
v3.29.5
v3.29.4
v3.29.3
v3.29.2
v3.29.1
v3.29.0
v3.28.0
v3.27.0
v3.26.0
v3.25.1
v3.25.0
v3.24.1
v3.24.0
v3.23.2
v3.23.1
v3.23.0
v3.22.3
v3.22.2
v3.22.1
v3.22.0
v3.21.0
v3.20.1
v3.20.0
v3.19.2
v3.19.1
v3.19.0
v3.18.2
v3.18.1
v3.18.0
v3.17.3
v3.17.2
v3.17.1
v3.17.0
v3.16.7
v3.16.6
v3.16.5
v3.16.4
v3.16.3
v3.16.2
v3.16.1
v3.16.0
v3.15.0
v3.14.1
v3.14.0
v3.13.0
v3.12.1
v3.12.0
v3.11.0
v3.10.1
v3.10.0
v3.9.2
v3.9.1
v3.9.0
v3.8.1
v3.8.0
v3.7.1
v3.7.0
v3.6.11
v3.6.10
v3.6.9
v3.6.8
v3.6.7
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.0
v3.2.2
v3.2.1
v3.2.0
v3.1.0
v3.0.1
v3.0.0
v3.0.0-beta.24
v2.16.1
v2.16.0
v2.15.4
v2.15.3
v2.15.2
v2.15.1
v2.15.0
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.13.5
v2.13.4
v2.13.3
v2.13.2
v2.13.1
v2.13.0
v2.12.1
v2.12.0
v2.11.0
v2.10.1
v2.10.0
v2.9.11
v2.9.10
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.8.1
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.1
v2.5.0
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.0
v2.2.0
v2.1.1
v2.1.0
v2.0.0
v1.64.1
v1.64.0
v1.63.1
v1.63.0
v1.62.0
v1.61.0
v1.60.3
v1.60.2
v1.60.1
v1.60.0
v1.59.0
v1.58.5
v1.58.4
v1.58.3
v1.58.2
v1.58.1
v1.58.0
v1.57.4
v1.57.3
v1.57.2
v1.57.1
v1.57.0
v1.56.4
v1.56.3
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.2
v1.54.1
v1.54.0
v1.53.0
v1.52.0
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.3
v1.49.2
v1.49.1
v1.49.0
v1.48.0
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.2
v1.44.1
v1.44.0
v1.43.1
v1.43.0
v1.42.1
v1.42.0
v1.41.4
v1.41.3
v1.41.2
v1.41.1
v1.41.0
v1.40.2
v1.40.1
v1.40.0
v1.39.4
v1.39.3
v1.39.2
v1.39.1
v1.39.0
v1.38.0
v1.37.0
v1.36.0
v1.35.0
v1.34.0
v1.33.0
v1.32.0
v1.31.0
v1.30.0
v1.29.3
v1.29.2
v1.29.1
v1.29.0
v1.28.1
v1.28.0
v1.27.0
v1.26.2
v1.26.1
v1.26.0
v1.25.1
v1.25.0
v1.24.0
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.21.0
v1.20.2
v1.20.1
v1.20.0
v1.19.1
v1.19.0
v1.18.2
v1.18.1
v1.18.0
v1.17.2
v1.17.1
v1.17.0
v1.16.0
v1.15.1
v1.15.0
v1.14.1
v1.14.0
v1.13.7
v1.13.6
v1.13.5
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.1
v1.12.0
v1.11.4
v1.11.3
v1.11.2
v1.11.1
v1.11.0
v1.10.2
v1.10.1
v1.10.0
v1.9.1
v1.9.0
v1.8.1
v1.8.0
v1.7.1
v1.7.0
v1.6.11
v1.6.10
v1.6.9
v1.6.8
v1.6.7
v1.6.6
v1.6.5
v1.6.4
v1.6.3
v1.6.2
v1.6.1
v1.6.0
v1.5.0
v1.4.0
v1.3.1
v1.3.0
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.0
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.1
v0.1.0
v0.0.2
${ noResults }
2754 Commits (async-another-try)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
98e547535d
|
fix: flush anything pending before invoking flushSync callback function (#18878)
no new test here but it's necessary for #18861 to work, and we might as well extract it |
1 day ago |
|
|
da2f83343b
|
fix: read batch-local array on each-block commit (#18879)
Another extraction from #18861 which I'm pretty sure you can also construct a buggy reproduction for today, but with #18861 it's strictly necessary so we don't need to come up with one now |
1 day ago |
|
|
38098a9311
|
fix: don't overwrite an unchanged spread `value` (#18864)
Fixes #18862 When a `value` is applied through a spread (`<input {...props} />`), `set_attributes` always writes `element.value`, even if the element already has that value. Writing `value` on a number input clears any incomplete text: typing `250.` makes `input.value` `''` (the text is still visible, but `validity.badInput` is `true`). If the spread `value` then becomes `''` too, writing `''` erases what the user typed. This is what happens with SvelteKit remote forms: `fields.quantity.as('number')` coerces `''` to `undefined`, the spread `value` becomes `''`, and Svelte writes it back to the input. When `.` is typed: - Chromium clears the input in every locale, because `250.` is always incomplete input there. - WebKit/Safari clears it in locales where `.` is not the decimal separator (e.g. `fr-CH`), which is where the reporter saw it. A plain `<input type="number">` never clears. Neither does the same `value` in Svelte without a spread (`value={...}`), because `set_value` already skips writing when `element.value === value`. This PR adds the same check to the spread path. Svelte 3 had this check too (#3426, #3495); it was lost in Svelte 5. The first write still always happens. Writing `value` sets the input's dirty value flag, and without that flag a `defaultValue` applied afterwards would change the current value (covered by `form-default-value-spread`). This also likely affects sveltejs/kit#16270 (same symptom, plus a cursor jump caused by redundant writes). That issue is handled on the kit side in sveltejs/kit#16320; this PR is independent of it. The test runs in a real browser (`runtime-browser`). It types with `document.execCommand('insertText')`, which goes through Chromium's own editing, so `250.` is real incomplete input. The locale is not mocked. The test fails without this change and passes with it. ### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` --------- Co-authored-by: Paolo Ricciuti <ricciutipaolo@gmail.com> |
2 days ago |
|
|
325620ba63
|
fix: bypass error boundaries for hydration recovery (#18841)
Fixes #18840 This PR rethrows the hydration error rather than catching it at the boundaries so that the svelte hydration warning can surface ### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> |
2 days ago |
|
|
803f59b171
|
fix: avoid reinserting dynamic elements during hydration (#18855)
Hydrating a `<svelte:element>` currently removes and reinserts the DOM node that was already claimed from the server-rendered HTML. This can restart CSS animations and disconnect/reconnect custom elements inside it. Keep claimed elements in place while preserving insertion for client-created elements and later tag changes. Capture the hydration state before rendering children, since empty or void elements can temporarily turn hydration off. Fixes #18852. ### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` Validation: - The real Chromium regression fails on unchanged `636eaaaa`: hydration removes all four server-rendered dynamic elements. Client mounting and server rendering pass. - The regression checks node removals and custom-element connection callbacks for ordinary, empty, void, and custom dynamic elements, then changes the tags and removes/recreates an element. - A hydration mismatch regression verifies that different client/server child branches recover while retaining the outer element and its following sibling. - `pnpm test hydration runtime-browser`: 219 passed. - Full `CI=true pnpm test`: 34 test files passed, 7,790 tests passed, 55 existing skips. The real-browser suite ran with Chromium. - `pnpm check`: passed, including build, generated type checks, and treeshakeability checks. - `pnpm lint`: passed. AI assistance: This change and its tests were prepared with OpenAI Codex. The PR description is also AI-assisted. --------- Co-authored-by: paoloricciuti <ricciutipaolo@gmail.com> |
3 days ago |
|
|
636eaaaa6f
|
Version Packages (#18750)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.57.1 ### Patch Changes - fix: cancel deferred event listeners during cleanup ([#18749](https://github.com/sveltejs/svelte/pull/18749)) - fix: preserve global CSS in components without scopable elements ([#18793](https://github.com/sveltejs/svelte/pull/18793)) - fix: reduce SSR render result garbage collection ([#18798](https://github.com/sveltejs/svelte/pull/18798)) - fix: resolve the fallback of an each block in the enclosing scope ([#18803](https://github.com/sveltejs/svelte/pull/18803)) - perf: speed up parser interactions with Acorn or avoid them where possible ([#18740](https://github.com/sveltejs/svelte/pull/18740)) - fix: prevent effect tree of batches from interfering with each other ([#18508](https://github.com/sveltejs/svelte/pull/18508)) - fix: serialize input default values during server rendering ([#18733](https://github.com/sveltejs/svelte/pull/18733)) - fix: remove `WAS_MARKED` flag in favor of `Set` ([#18127](https://github.com/sveltejs/svelte/pull/18127)) - fix: throw `set_context_after_init` when `setContext` is called after an `await` during SSR ([#18739](https://github.com/sveltejs/svelte/pull/18739)) - fix: make Object.hasOwn reactive for state proxy ownership changes ([#18838](https://github.com/sveltejs/svelte/pull/18838)) - fix: keep `$state.eager` when used as a variable initializer ([#18809](https://github.com/sveltejs/svelte/pull/18809)) - perf: avoid regex matching in parser where possible ([#18736](https://github.com/sveltejs/svelte/pull/18736)) - fix: in non-async mode, only push variable to current_sources when active_reaction is updating ([#18550](https://github.com/sveltejs/svelte/pull/18550)) - fix: recognise `aria-braillelabel` and `aria-brailleroledescription` as known ARIA attributes ([#18765](https://github.com/sveltejs/svelte/pull/18765)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
7 days ago |
|
|
a72dc8eadb
|
fix: make Object.hasOwn reactive for state proxies (#18838)
Fixes #18837 ### What changed State proxies now establish a per-property reactive dependency when `Object.hasOwn(proxy, prop)` invokes the `getOwnPropertyDescriptor` trap. Property additions and deletions therefore invalidate the expression, consistently with the `prop in proxy` operator. The source creation uses the same eligibility constraints as the existing `has` trap so inherited properties retain their existing semantics. A runtime-runes regression sample covers both adding and deleting the observed property in DOM and hydration modes. ### Tests and linting - `FILTER=object-has-own-reactive pnpm test runtime-runes --reporter=dot` — 4 passed - `pnpm exec vitest run packages/svelte/src/internal/client/proxy.test.ts --reporter=dot` — 8 passed - `pnpm test runtime-runes --reporter=dot` — 2707 passed, 34 skipped - `pnpm test --reporter=dot` — 7786 passed, 55 skipped - `cd packages/svelte && pnpm check` — passed - `pnpm format` — passed - `pnpm lint` — passed Includes a patch changeset for `svelte`. <!-- svelte-triage-bot:feedback-baseline:81ef2357a99a2592312d5483e38be3f6ddeb4be5 --> --------- Co-authored-by: svelte-triage-bot <team@svelte.com> Co-authored-by: Rich Harris <rich.harris@vercel.com> |
1 week ago |
|
|
f2ad10ecd2
|
fix: preserve global CSS without scopable elements (#18793)
## Summary - mark fully global selectors as used without requiring a scopable component element - preserve exact ICSS `:export` rules under the same conditions - keep elements inside `<svelte:head>` excluded from CSS hash injection - add a regression test covering both reported selector forms Fixes #18792 |
2 weeks ago |
|
|
a8a9b02e38
|
fix: reduce SSR render result garbage collection (#18798)
Fixes #18797. ### Problem SSR `render()` is lazy, but the wrapper benchmark discarded its result and therefore measured almost no rendering work. When `.body` was consumed, each render result's own accessor properties caused substantial garbage-collection overhead. ### Fix - Consume `render(App).body` in both the warmup and measured SSR benchmark loops. - Move lazy render-result properties onto a shared `RenderResult` prototype. - Memoize synchronous output and the asynchronous render promise while preserving lazy sync/async API behavior. - Add a regression test ensuring exposed render-result properties are inherited. - Add a patch changeset for `svelte`. The benchmark now deliberately selects the synchronous lazy-render path by reading `.body`, so the process-wide async flag imported by the reactivity benchmarks does not determine this benchmark's render mode. ### Performance on this host | Case | Time | GC time | | --- | ---: | ---: | | main, output discarded | 0.20 ms | 0.00 ms | | main, `.body` consumed before fix | 163.04 ms | 62.68 ms | | `svelte@5.38.10` | 110.05 ms | 1.39 ms | | fixed, `.body` consumed | 104.79 ms | 2.43 ms | ### Tests - `pnpm test packages/svelte/src/internal/server/renderer.test.ts` — 53 passed - `pnpm test server-side-rendering` — 234 passed, 2 skipped - `pnpm test` — 7,771 passed, 55 skipped - `pnpm lint` - `pnpm check` - `pnpm format` - `git diff --check` <!-- svelte-triage-bot:feedback-baseline:116724e3b641c84ed56b2a60d494b6cb2298bbb3 --> Co-authored-by: svelte-triage-bot <team@svelte.com> |
2 weeks ago |
|
|
6be176df2f
|
fix: resolve the fallback of an each block in the enclosing scope (#18803)
In `phases/scope.js`, `EachBlock` visits `node.fallback` with the
block's own scope, so `{:else}` resolves the loop's name to the each
context. With `let item = $state('outer')` outside and `{#each items as
item}…{:else}<button onclick={() => (item = 'changed')}>` the compiler
reports "Cannot reassign or bind to each block argument" for a variable
that is not the block's argument.
The fallback renders when there is nothing to iterate, so it is visited
in the enclosing scope, as an await block's `pending` is.
|
2 weeks ago |
|
|
34b13ac3e4
|
fix: keep `$state.eager` when used as a variable initializer (#18809)
fixes #18808 If you write `let x = $state.eager(...)`, the client compiler used to delete that line and then still read `x`. The page crashed with `x is not defined`. Server rendering kept the binding. Using `$state.eager(...)` directly in the markup already worked. This puts the `let` / `const` form on the same path as `$state.snapshot`. Added a runtime-runes sample that fails without this change. Co-authored-by: Xia Chao <236466140+bun-unsafe@users.noreply.github.com> |
2 weeks ago |
|
|
ce89035ecb
|
fix: prevent effect tree of batches from interfering with each other (#18508)
While working on another Svelte feature I noticed a bug that boils down to batches interfering with each other through the effect tree: If batch A schedules an effect, it is walked up to the root (possibly). Now if in the meantime batch B also wants to schedule effects, it can have unintended consequences. Normally this does not happen, since it's extremely hard to run into this situation. There's basically two cases: Either an unfortunate timing of microtasks, or during flushing effects are scheduling new effects which messes with a `#commit()` right after (the test case does this). To fix this we now defer walking up the tree until the batch is actually processed. That way we set + unset the markers on the branches synchronously so there's no chance of another batch interfering. |
2 weeks ago |
|
|
d16099ef0f
|
fix: remove `WAS_MARKED` flag in favor of `Set` (#18127)
Removes the `WAS_MARKED` logic in favor of a simple `Set` heuristic: If `mark_reactions` goes beyond a certain count, initialize it, otherwise keep it `null`. Balances the common case of not having many transitive dependencies with the edge case of cyclic dependencies as was seen in #16658 (I rechecked that reproduction and it remains fast with this change). I ran the benchmark against this and it doesn't hit the `Seen` heuristic once (i.e. even the benchmark doesn't have this extreme level of dependencies where it becomes noticeable). Fixes #18123, supersedes #18124 --------- Co-authored-by: Rich Harris <rich.harris@vercel.com> |
2 weeks ago |
|
|
5895c637b0
|
fix: recognise `aria-braillelabel` and `aria-brailleroledescription` as known ARIA attributes (#18765)
|
3 weeks ago |
|
|
9e69544238
|
fix: in non-async mode, only push variable to current_sources when active_reaction is updating (#18550)
fix: #16814 in non-async mode, when the derived inside `SvelteDate` is created and evaluated, the `#reaction` is from the `active_reaction` when the `SvelteDate` instance is created, which could possible in NON_UPDATING state, so the derived should not be added to `current_sources` to prevent re-run. --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
3 weeks ago |
|
|
4bf15ae6f3
|
fix: throw when `setContext` is called after an `await` during SSR (#18739)
Fixes #17233. |
4 weeks ago |
|
|
b580455c9c
|
fix: serialize input default values during SSR (#18733)
Alternative to #18452 --------- Co-authored-by: svelte-triage-bot <team@svelte.com> |
4 weeks ago |
|
|
b1142efe96
|
perf: speed up parser a little bit (#18736)
~5% in local benchmarks by avoiding regex in some places |
4 weeks ago |
|
|
34142af3a1
|
perf: build identifier and member chain expressions without acorn (#18740)
After #18738 the biggest thing left in the parser profile was acorn's constructor, `getOptions` and `wordsRegexp` alone were around 12% of parse time. `parseExpressionAt` is `new Parser()` followed by `parseExpression()`, and we call it for every expression in the template. For something like `{name}` the constructor (normalizing options, four keyword regexes, scope state) is about 2 µs while the actual parse is under 1 µs, and components have dozens of these. The fix seemed to belong in acorn, cache the options and regexes so repeated `parseExpressionAt` calls stop redoing them. I lasted about twenty minutes in acorn's constructor... I was way in over my head. The Svelte alternative was one parser per component, reset between expressions, but that means re-initializing acorn's and acorn-typescript's internals by hand and breaking whenever either adds a field. I realized most of the expressions in the test corpus are an identifier or an `a.b.c` chain, and you don't need a JS parser for those. So that's this fix. `read_expression` now scans for that shape, builds the nodes itself in the form acorn would, and hands everything else to acorn like before.No behavior change, verified byte-for-byte against acorn on the test corpus. About 18% faster parsing on typical components on top of #18738. I guess this should be a fix for acorn, rather than here, so I'm not against closing this. --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
4 weeks ago |
|
|
214dd3d005
|
fix: cancel deferred event listener attachment (#18749)
Fixes #18748 |
4 weeks ago |
|
|
7bc0a70fe6
|
Version Packages (#18682)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.57.0 ### Minor Changes - feat: export `RenderOutput`, `SyncRenderOutput`, `Csp` and `Sha256Source` from `svelte/server` ([#18648](https://github.com/sveltejs/svelte/pull/18648)) - feat: add `has` function to `createContext` ([#18472](https://github.com/sveltejs/svelte/pull/18472)) - feat: support `defaultValue` on `<select>` ([#18591](https://github.com/sveltejs/svelte/pull/18591)) - feat: add getOrInsert/getOrInsertComputed to SvelteMap ([#18728](https://github.com/sveltejs/svelte/pull/18728)) ### Patch Changes - fix: block template store subscriptions on the promise that assigns the store ([#18582](https://github.com/sveltejs/svelte/pull/18582)) - fix: route $derived teardown errors through invoke_error_boundary ([#18486](https://github.com/sveltejs/svelte/pull/18486)) - fix: track SvelteDate snapshots in reactions ([#18700](https://github.com/sveltejs/svelte/pull/18700)) - fix: remove `<svelte:head>` anchors on unmount ([#18697](https://github.com/sveltejs/svelte/pull/18697)) - fix: warn on undeclared shorthand event handlers on `<svelte:window>`, `<svelte:document>` and `<svelte:body>` ([#18480](https://github.com/sveltejs/svelte/pull/18480)) - perf: reuse the cached value in the `<option>`/`<select>` value guard ([#18713](https://github.com/sveltejs/svelte/pull/18713)) - fix: prevent malformed AST output for `<select>` with static `value` attribute ([#18449](https://github.com/sveltejs/svelte/pull/18449)) - fix: apply ownership mutation ignores to binding assignments ([#18718](https://github.com/sveltejs/svelte/pull/18718)) - fix: prevent onoutroend from firing twice when compilerOptions.hmr is true ([#18655](https://github.com/sveltejs/svelte/pull/18655)) - fix: preserve whitespace after inline elements when printing ([#18685](https://github.com/sveltejs/svelte/pull/18685)) - perf: fold SSR block-open markers into the branch's first push ([#18712](https://github.com/sveltejs/svelte/pull/18712)) - fix: run `onDestroy` callbacks when a server render throws ([#18585](https://github.com/sveltejs/svelte/pull/18585)) - fix: report `derived_invalid_export` for `export let x = $derived(...)` in runes mode ([#18692](https://github.com/sveltejs/svelte/pull/18692)) - fix: never apply class hash to elements inside `<svelte:head>` ([#18160](https://github.com/sveltejs/svelte/pull/18160)) - fix: keep `defaultChecked` on hydrated radio inputs with spread attributes ([#18701](https://github.com/sveltejs/svelte/pull/18701)) - fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` ([#18689](https://github.com/sveltejs/svelte/pull/18689)) - perf: O(n²)→O(n) Map lookups for legacy `$:` reactive statement ordering ([#18602](https://github.com/sveltejs/svelte/pull/18602)) - fix: distinct memoizer on style/class directives ([#18466](https://github.com/sveltejs/svelte/pull/18466)) - fix: measure nested transitions before applying their starting styles ([#18647](https://github.com/sveltejs/svelte/pull/18647)) - fix: don't turn component instances stored in `$state` into state proxies ([#18646](https://github.com/sveltejs/svelte/pull/18646)) - perf: emit `$.only_child` for elements with a single child ([#18717](https://github.com/sveltejs/svelte/pull/18717)) - fix: omit `bind:focused` from SSR output (it has no HTML attribute) ([#18724](https://github.com/sveltejs/svelte/pull/18724)) - fix: more robust rendering of Svelte custom element slots ([#18710](https://github.com/sveltejs/svelte/pull/18710)) - perf: optimize simple object destructuring in `@const` tags ([#18390](https://github.com/sveltejs/svelte/pull/18390)) - fix: properly apply static textarea value attribute during CSR ([#18727](https://github.com/sveltejs/svelte/pull/18727)) - fix: end a restored reaction context at the end of its synchronous segment ([#18694](https://github.com/sveltejs/svelte/pull/18694)) - fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error ([#18703](https://github.com/sveltejs/svelte/pull/18703)) - fix: don't resurrect outroing elements when an ancestor block is paused and resumed ([#18431](https://github.com/sveltejs/svelte/pull/18431)) - perf: use `$.comment()` for single-comment templates ([#18714](https://github.com/sveltejs/svelte/pull/18714)) - chore: move `@types/trusted-types` to devDependencies ([#18730](https://github.com/sveltejs/svelte/pull/18730)) - perf: store setters cache as `Set` instead of `Array` ([#18251](https://github.com/sveltejs/svelte/pull/18251)) - fix: transform derived assignments and select function bindings correctly during server-side rendering ([#18669](https://github.com/sveltejs/svelte/pull/18669)) - fix: keep boolean attributes with an empty string value when rendering attribute objects on the server ([#18721](https://github.com/sveltejs/svelte/pull/18721)) - fix: sync `SvelteURL` port signal when the protocol setter clears the port ([#18705](https://github.com/sveltejs/svelte/pull/18705)) - fix: block declaration tags and `{@const}` on async values read inside closures ([#18533](https://github.com/sveltejs/svelte/pull/18533)) - fix: avoid css tree-shaking for exported Snippet ([#18540](https://github.com/sveltejs/svelte/pull/18540)) - perf: treat `<img loading>` as a static element again ([#18711](https://github.com/sveltejs/svelte/pull/18711)) - fix: prevent `selectedcontent` mutation from changing the selected option ([#18495](https://github.com/sveltejs/svelte/pull/18495)) - fix: avoid `NaN` keyframe values in `slide` transition for elements without a layout box ([#18430](https://github.com/sveltejs/svelte/pull/18430)) - fix: preserve line feed character references in attribute values ([#18691](https://github.com/sveltejs/svelte/pull/18691)) - fix: decode uppercase-`X` hex numeric character references (`&#X...;`) ([#18708](https://github.com/sveltejs/svelte/pull/18708)) - chore: clarify when `$effect.pre` runs relative to DOM updates ([#18534](https://github.com/sveltejs/svelte/pull/18534)) - fix: scope SSR boundary failed snippets to their boundary ([#18593](https://github.com/sveltejs/svelte/pull/18593)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
4 weeks ago |
|
|
6374a2a0db
|
chore: move `@types/trusted-types` to devDependencies (#18730)
Only referenced by a JSDoc `@import` in `src/internal/client/dom/blocks/html.js`; nothing in the published `types/index.d.ts` uses it, so consumers do not need it installed. |
4 weeks ago |
|
|
4ae5eb3f23
|
feat: add has function to createContext (#18472)
closes #18471. --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
4 weeks ago |
|
|
74197ccbe1
|
feat: add getOrInsert/getOrInsertComputed to SvelteMap (#18728)
Closes #18014 |
4 weeks ago |
|
|
edbe11ebc9
|
fix: properly apply static textarea value attribute during CSR (#18727)
Fixes #18574 Simpler alternative to #18627 - we just special-case this in the "should this be treated as a dynamic attribute" branches so `$.set_value(...)` is always generated. Given how edge-case-y this is (why would you not just write it into the body of the textarea?) this is fine. |
4 weeks ago |
|
|
05b69164d1
|
fix: omit bind:focused from SSR output (#18724)
--------- Co-authored-by: Xia Chao <236466140+bun-unsafe@users.noreply.github.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
4 weeks ago |
|
|
7c6f36aa92
|
fix: keep boolean attributes with an empty string value when rendering attribute objects on the server (#18721)
`<input disabled="" {...props}>` and any other boolean attribute written as `""` now renders on the server the way it does on the client and in plain markup.
|
1 month ago |
|
|
4d5139552d
|
fix: block declaration tags on async values read inside closures (#18533)
Fixes #18469 Declaration tags collect blockers from `metadata.expression.dependencies`, which only sees eager reads, so a `$derived` reading an async declaration inside a closure gets no blocker and evaluates while the value is still `undefined`. Align with template expressions which already collect blockers from `references` --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
0f458d5aba
|
fix: report `derived_invalid_export` for `export let x = $derived(...)` (#18692)
Fixes #15842 Run the more targeted validations first --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
955b701df2
|
fix: measure nested transitions before applying their starting styles (#18647)
Fixes #18421 (regression from #16035, which re-broke the #4784 scenario). Since #16035 the dummy delay animation runs with `fill: 'forwards'`, so an intro's `t = 0` styles (for `slide`, `height: 0`) apply the moment the transition is created and stay applied until the real animation starts a frame later. Transition functions of other elements in the same batch run after that and measure a collapsed DOM. With nested intros (the TreeView from the issue), intro effects run deepest-first, so every ancestor's `slide` captures a height where its children are pinned at 0. On the issue's REPL every `<ul>` animates `0px -> 36px` (the height of a single row) and then jumps to its real size when the animation finishes, which is the "children pop out" behavior from #4784. The fix waits one microtask before applying the initial styles and creating the dummy, the same way deferred transitions (`crossfade`) already work in `animate()`. Everything in the batch measures the DOM first; the microtask still runs before the next paint, so elements never render unstyled and the #14732 behavior is preserved. Verified in a real browser that a delayed intro (`delay: 300`) stays held at `height: 0` for the whole delay, including the first painted frame. Most of the diff is the existing dummy/onfinish block moving into `queue_micro_task`; hiding whitespace shows the actual change. |
1 month ago |
|
|
c7d8233a5c
|
fix: apply ownership mutation ignores to bindings (#18718)
Fixes #18715. Copy ignore comment info to the generated assignment so it's recognized later --------- Co-authored-by: svelte-triage-bot <team@svelte.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
68e7c9b521
|
fix: transform derived assignments and select function bindings correctly during server-side rendering (#18669)
follow-up to the fix in #18607 - there are a two more bugs related to writeable deriveds in that area |
1 month ago |
|
|
14ec75c5fe
|
perf: fold SSR block-open markers into the branch's first push (#18712)
One fewer `$$renderer.push` per rendered branch |
1 month ago |
|
|
c575b07bca
|
feat: support `defaultValue` on `<select>` (#18591)
Closes #18447 --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
b433f3cd87
|
fix: preserve line feed character references in attribute values (#18691)
Fixes #15555 Pass on whether we're in an attribute to not replace the charcode with the whitespace charcode in that case |
1 month ago |
|
|
34489c10df
|
perf: emit `$.only_child` for elements with a single child (#18717)
`<p>{text}</p>` and friends compile to `var x = $.child(p, true);
$.reset(p);`. Across the 4,020 components in `packages/svelte/tests`,
that exact pair occurs 1,885 times, more than any other adjacent
statement pair.
`$.only_child` does both, reducing the number of statements in the compiled output
|
1 month ago |
|
|
6b99f9fb52
|
perf: reuse the cached value in the `<option>`/`<select>` value guard (#18713)
One fewer evaluation of the value expression per update. --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |
|
|
8299cbf11b
|
perf: use `$.comment()` for single comment templates (#18714)
Move the "single comment, we can make this faster" optimization into `transform_template` so all usage locations can benefit (e.g. select/option elements) --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |
|
|
359413f512
|
perf: treat `<img loading>` as a static element again (#18711)
Emits less code and skips two live DOM traversals per instance. `is_static_element` treats `<img>` with a `loading` attribute as non-static. That was added in #14237 so `RegularElement` could emit `$.handle_lazy_img(node_id)`, which needed a reference to the element. #15272 deleted `handle_lazy_img` (replaced by `importNode`) and removed the call site, but left this check behind. --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |
|
|
135f1ec004
|
fix: more robust rendering of Svelte custom element slots (#18710)
Instead of checking the given nodes at startup and only injecting those into the inner Svelte component constructor, we are now detecting (via the `$$host` property) whether or not the component is rendered as a custom element, and in that case create all slots as real slots right away. Fixes #13638 Fixes #8997 (therefore closes #8999) |
1 month ago |
|
|
c894afd8c7
|
fix: sync SvelteURL port when protocol setter clears it (#18705)
Per the WHATWG URL spec, assigning a new protocol can clear the URL's port when the current port equals the new scheme's default port. Therefore also `set` the port when the protocol is updated. |
1 month ago |
|
|
6b16b7f73f
|
fix: keep defaultChecked on hydrated radio inputs with spread attributes (#18701)
radio buttons were missing in the type check - remove the check instead (aligns with how we do it in the compiler, see `has_default_value_attribute`). Strictly speaking not fully correct but pragmatic solution that doesn't have any impact in practise Needed by sveltejs/kit#16926. |
1 month ago |
|
|
1b02aa28c8
|
fix: decode uppercase-X hex numeric character references (#18708)
uppercase X is also valid per the HTML spec |
1 month ago |
|
|
2b740e496e
|
fix: commit a reaction's dependencies even when it throws (#18703)
Fixes #18414 and a second bug with the same cause. `update_reaction` in `runtime.js` commits a reaction's dependencies after `fn()` returns: it swaps in `new_deps`, removes stale reactions and registers the reaction into each new dep's `reactions`. When `fn()` throws, the whole block is skipped. Two things go wrong from that. A derived that the run read for the first time was already set `CONNECTED` in `get` and registered itself into its own deps' `reactions` during `update_derived`, but the throwing reaction never registers as its reader. It sits in its deps' `reactions` with `reactions === null` of its own, `remove_reaction`'s disconnect cascade can never reach it, and it retains its `ctx`, closures and DOM past component destruction and `unmount()`. A derived that throws during its own run ends up with no dependencies at all. It is not in its sources' `reactions`, so a later change to them never re-runs it, and for an unowned derived `update_derived` then marks the error value CLEAN because the derived has no deps. Anything reading it keeps getting the first error forever. The commit block is now `update_dependencies` and the `catch` calls it before `handle_error`, so a failing reaction keeps the deps it read up to the throw. That subscribes it to the inputs that produced the error, and lets the normal disconnect cascade clean up when it is destroyed (`Boundary.#handle_error` destroys the failed effect). Co-authored-by: Randy Murphy <randalmurphal@users.noreply.github.com> |
1 month ago |
|
|
fdb3aa8ba8
|
perf: store setters cache as Set instead of Array (#18251)
--------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |
|
|
b20b2ee85e
|
fix: avoid css tree-shaking for exported Snippet (#18540)
fix #16404 Currently one file can have multiple exports but only one `cssScopeTo` variable, which is hard coded to `default` inside vite-plugin-svelte. Therefore set hasGlobal to `true` in case we export a snippet to not have this scoping enabled in v-p-s --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
6f5dd04a00
|
fix: Fixes error thrown on use of select with no options (#18449)
Fixes #18445. |
1 month ago |
|
|
f2648b3537
|
fix: end a restored reaction context at the end of its synchronous segment (#18694)
When an async expression resumes after a pickled `await`, the thunk returned by `save()` in `reactivity/async.js` calls `restore()` to re-arm `active_reaction` for the rest of the expression, then disarms it with `queue_micro_task(unset_context)`. Any microtask already queued before that one runs inside the restored context. If it writes to a source, `set()` throws `state_unsafe_mutation` in production, since the guard is not dev-only. #18453 introduced the queued disarm and noted this case in review as unavoidable. SvelteKit hits it in practice: its fetch continuations write to internal `$state` (sveltejs/kit#16914), and a user's `$derived((await q()).length)` resuming in the same tick makes that write throw and drops the update signal. The context restored by a `save` thunk now ends with the synchronous segment it was restored in. A `restored` flag is set by the thunk and consumed on entry to `save` and `track_reactivity_loss`, so every suspension ends it; once an expression contains a pickled await, the analysis pickles every later await in it too (`has_pickled_await` on `ExpressionMetadata`), so a trailing await compiles to `$.save` rather than a bare `await`. At the end of the body, `async_thunk` in `3-transform/client/utils.js` wraps the return expression in `$.unsave(...)` when the metadata has a pickled await. If the body throws instead, the context is unset by `async_derived`'s existing `finally`, as before. The queued microtask in `save` is removed. Output is unchanged for expressions that pickle nothing (`$derived(await a)` compiles byte for byte the same). Expressions with a pickled await gain one `$.unsave(` call per body, and their trailing await becomes a `$.save`, 4 to 6 bytes gzipped in the added tests. At runtime a boolean write replaces a queued microtask per resume. `bench:compare` shows no difference outside run-to-run noise. Two runtime tests reproduce the throw without any library involved, one in dev and one with the prod `await` shape, and fail on `main`. --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
1 month ago |
|
|
1be496f0a6
|
fix: accept `onfocusin`/`onfocusout` in `a11y_mouse_events_have_key_events` (#18689)
Fixes #8089 focusin/focusout are the bubble variants of focus/blur --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |
|
|
721244ad3b
|
fix: track SvelteDate snapshots in reactions (#18700)
Read the Date value through `getTime()` before cloning it to get reactive updates from `SvelteDate`. Closes #18698 --------- Co-authored-by: svelte-triage-bot <team@svelte.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
1 month ago |