File tree Expand file tree Collapse file tree 4 files changed +88
-2
lines changed
src/compiler/phases/3-transform/client/visitors
tests/runtime-runes/samples/svelte-element-css-hash Expand file tree Collapse file tree 4 files changed +88
-2
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte ' : patch
3
+ ---
4
+
5
+ fix : bug "$0 is not defined" on svelte: element with a function call on class
Original file line number Diff line number Diff line change @@ -83,9 +83,10 @@ export function SvelteElement(node, context) {
83
83
if (
84
84
attributes . length === 1 &&
85
85
attributes [ 0 ] . type === 'Attribute' &&
86
- attributes [ 0 ] . name . toLowerCase ( ) === 'class'
86
+ attributes [ 0 ] . name . toLowerCase ( ) === 'class' &&
87
+ is_text_attribute ( attributes [ 0 ] )
87
88
) {
88
- // special case when there only a class attribute
89
+ // special case when there only a class attribute, without call expression
89
90
let { value, has_state } = build_attribute_value (
90
91
attributes [ 0 ] . value ,
91
92
context ,
Original file line number Diff line number Diff line change
1
+ import { flushSync } from 'svelte' ;
2
+ import { ok , test } from '../../test' ;
3
+
4
+ export default test ( {
5
+ html : `
6
+ <div></div>
7
+ <div class="red svelte-p153w3"></div>
8
+ <div></div>
9
+ <div class="red svelte-p153w3"></div>
10
+ <div class="blue svelte-p153w3"></div>
11
+ <div class="blue svelte-p153w3"></div>
12
+ ` ,
13
+
14
+ async test ( { assert, target, component } ) {
15
+ component . active = true ;
16
+ flushSync ( ) ;
17
+
18
+ assert . htmlEqual (
19
+ target . innerHTML ,
20
+ `
21
+ <div></div>
22
+ <div class="red svelte-p153w3"></div>
23
+ <div class="active"></div>
24
+ <div class="red svelte-p153w3 active"></div>
25
+ <div class="blue svelte-p153w3"></div>
26
+ <div class="blue svelte-p153w3 active"></div>
27
+ `
28
+ ) ;
29
+
30
+ component . tag = 'span' ;
31
+ flushSync ( ) ;
32
+
33
+ assert . htmlEqual (
34
+ target . innerHTML ,
35
+ `
36
+ <span></span>
37
+ <span class="red svelte-p153w3"></span>
38
+ <span class="active"></span>
39
+ <span class="red svelte-p153w3 active"></span>
40
+ <span class="blue svelte-p153w3"></span>
41
+ <span class="blue svelte-p153w3 active"></span>
42
+ `
43
+ ) ;
44
+
45
+ component . active = false ;
46
+ flushSync ( ) ;
47
+
48
+ assert . htmlEqual (
49
+ target . innerHTML ,
50
+ `
51
+ <span></span>
52
+ <span class="red svelte-p153w3"></span>
53
+ <span class=""></span>
54
+ <span class="red svelte-p153w3"></span>
55
+ <span class="blue svelte-p153w3"></span>
56
+ <span class="blue svelte-p153w3"></span>
57
+ `
58
+ ) ;
59
+ }
60
+ } ) ;
Original file line number Diff line number Diff line change
1
+ <script >
2
+ let { tag = " div" , active = false } = $props ();
3
+
4
+ function cn (classname ) {
5
+ return classname;
6
+ }
7
+ </script >
8
+
9
+ <svelte:element this ={tag }></svelte:element >
10
+ <svelte:element this ={tag } class =" red" ></svelte:element >
11
+ <svelte:element this ={tag } class:active ={active }></svelte:element >
12
+ <svelte:element this ={tag } class ="red" class:active ={active }></svelte:element >
13
+ <svelte:element this ={tag } class ={cn (" blue" )}></svelte:element >
14
+ <svelte:element this ={tag } class ={cn (" blue" )} class:active ={active }></svelte:element >
15
+
16
+ <style >
17
+ .red {
18
+ color : red ;
19
+ }
20
+ </style >
You can’t perform that action at this time.
0 commit comments