mirror of https://github.com/sveltejs/svelte
commit
a18f745efb
@ -0,0 +1,27 @@
|
|||||||
|
export default {
|
||||||
|
warnings: [
|
||||||
|
{
|
||||||
|
code: 'css-unused-selector',
|
||||||
|
end: {
|
||||||
|
character: 111,
|
||||||
|
column: 21,
|
||||||
|
line: 8
|
||||||
|
},
|
||||||
|
frame: `
|
||||||
|
6: color: red;
|
||||||
|
7: }
|
||||||
|
8: a:global(.foo) > div {
|
||||||
|
^
|
||||||
|
9: color: red;
|
||||||
|
10: }
|
||||||
|
`,
|
||||||
|
message: 'Unused CSS selector "a:global(.foo) > div"',
|
||||||
|
pos: 91,
|
||||||
|
start: {
|
||||||
|
character: 91,
|
||||||
|
column: 1,
|
||||||
|
line: 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
@ -0,0 +1 @@
|
|||||||
|
div>div.svelte-xyz.svelte-xyz{color:red}div.svelte-xyz.foo>div.svelte-xyz{color:red}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
<div class="svelte-xyz">
|
||||||
|
<div class="svelte-xyz"></div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
<style>
|
||||||
|
:global(div) > div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
div:global(.foo) > div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
a:global(.foo) > div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div />
|
||||||
|
</div>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
warnings: []
|
||||||
|
};
|
||||||
@ -0,0 +1 @@
|
|||||||
|
a>b>div.svelte-xyz{color:red}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
<div class="svelte-xyz">
|
||||||
|
<div class="svelte-xyz"></div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
<style>
|
||||||
|
:global(a) > :global(b) > div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div />
|
||||||
|
</div>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
<div class="svelte-xyz">
|
||||||
|
<div class="svelte-xyz"></div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
options: {
|
||||||
|
accessors: true
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
/* generated by Svelte vX.Y.Z */
|
||||||
|
import { SvelteComponent, init, safe_not_equal } from "svelte/internal";
|
||||||
|
|
||||||
|
import { f as f_1, g as g_1 } from './d';
|
||||||
|
import { h as h_1 } from './e';
|
||||||
|
import { i as j } from './f';
|
||||||
|
export { d as e } from './c';
|
||||||
|
export { c } from './b';
|
||||||
|
export { a, b } from './a';
|
||||||
|
|
||||||
|
class Component extends SvelteComponent {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
init(this, options, null, null, safe_not_equal, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
get f() {
|
||||||
|
return f_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get g() {
|
||||||
|
return g_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get h() {
|
||||||
|
return h_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get j() {
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Component;
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script context="module">
|
||||||
|
export { a, b } from './a';
|
||||||
|
export { c } from './b';
|
||||||
|
export { d as e } from './c';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export { f, g } from './d';
|
||||||
|
export { h } from './e';
|
||||||
|
export { i as j } from './f';
|
||||||
|
</script>
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
options: {
|
||||||
|
accessors: true,
|
||||||
|
format: 'cjs'
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
/* generated by Svelte vX.Y.Z */
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const { SvelteComponent, init, safe_not_equal } = require("svelte/internal");
|
||||||
|
const { f: f_1, g: g_1 } = require("./d");
|
||||||
|
const { h: h_1 } = require("./e");
|
||||||
|
const { i: j } = require("./f");
|
||||||
|
exports.e = require("./c").d;
|
||||||
|
exports.c = require("./b").c;
|
||||||
|
exports.a = require("./a").a;
|
||||||
|
exports.b = require("./a").b;
|
||||||
|
|
||||||
|
class Component extends SvelteComponent {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
init(this, options, null, null, safe_not_equal, {});
|
||||||
|
}
|
||||||
|
|
||||||
|
get f() {
|
||||||
|
return f_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get g() {
|
||||||
|
return g_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get h() {
|
||||||
|
return h_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get j() {
|
||||||
|
return j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.default = Component;
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script context="module">
|
||||||
|
export { a, b } from './a';
|
||||||
|
export { c } from './b';
|
||||||
|
export { d as e } from './c';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export { f, g } from './d';
|
||||||
|
export { h } from './e';
|
||||||
|
export { i as j } from './f';
|
||||||
|
</script>
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
/* generated by Svelte vX.Y.Z */
|
||||||
|
import { SvelteComponent, init, safe_not_equal } from "svelte/internal";
|
||||||
|
|
||||||
|
import './d';
|
||||||
|
import './e';
|
||||||
|
import './f';
|
||||||
|
export { d as e } from './c';
|
||||||
|
export { c } from './b';
|
||||||
|
export { a, b } from './a';
|
||||||
|
|
||||||
|
class Component extends SvelteComponent {
|
||||||
|
constructor(options) {
|
||||||
|
super();
|
||||||
|
init(this, options, null, null, safe_not_equal, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Component;
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script context="module">
|
||||||
|
export { a, b } from './a';
|
||||||
|
export { c } from './b';
|
||||||
|
export { d as e } from './c';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export { f, g } from './d';
|
||||||
|
export { h } from './e';
|
||||||
|
export { i as j } from './f';
|
||||||
|
</script>
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
<script context="module">
|
||||||
|
export { a, b } from './B.svelte';
|
||||||
|
export { c as d } from './B.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export { d, e } from './B.svelte';
|
||||||
|
export { f as g } from './B.svelte';
|
||||||
|
let e = 123;
|
||||||
|
let b = 234;
|
||||||
|
function foo() {
|
||||||
|
e = 456;
|
||||||
|
b = 567;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
a: {typeof a}<br />
|
||||||
|
b: {typeof b}<br />
|
||||||
|
c: {typeof c}<br />
|
||||||
|
d: {typeof d}<br />
|
||||||
|
e: {typeof e}<br />
|
||||||
|
f: {typeof f}<br />
|
||||||
|
g: {typeof g}<br />
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<script context="module">
|
||||||
|
export const a = 'a';
|
||||||
|
export const b = 'b';
|
||||||
|
export const c = 'c';
|
||||||
|
export const d = 'd';
|
||||||
|
export const e = 'e';
|
||||||
|
export const f = 'f';
|
||||||
|
</script>
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
a,b,undefined,c
|
||||||
|
<br />
|
||||||
|
a: undefined<br />
|
||||||
|
b: number<br />
|
||||||
|
c: undefined<br />
|
||||||
|
d: undefined<br />
|
||||||
|
e: number<br />
|
||||||
|
f: undefined<br />
|
||||||
|
g: undefined<br />
|
||||||
|
<br />
|
||||||
|
{"d":"d","e":"e","g":"f"}
|
||||||
|
`,
|
||||||
|
ssrHtml: `
|
||||||
|
a,b,undefined,c
|
||||||
|
<br />
|
||||||
|
a: undefined<br />
|
||||||
|
b: number<br />
|
||||||
|
c: undefined<br />
|
||||||
|
d: undefined<br />
|
||||||
|
e: number<br />
|
||||||
|
f: undefined<br />
|
||||||
|
g: undefined<br />
|
||||||
|
<br />
|
||||||
|
{}
|
||||||
|
`
|
||||||
|
};
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
<script>
|
||||||
|
import A, { a, b, c, d } from './A.svelte';
|
||||||
|
import {onMount} from 'svelte';
|
||||||
|
|
||||||
|
let component;
|
||||||
|
let props = {};
|
||||||
|
onMount(() => {
|
||||||
|
props = {
|
||||||
|
d: component.d,
|
||||||
|
e: component.e,
|
||||||
|
f: component.f,
|
||||||
|
g: component.g,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{a},{b},{c},{d}
|
||||||
|
<br />
|
||||||
|
<A bind:this={component} />
|
||||||
|
<br />
|
||||||
|
{JSON.stringify(props)}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>$userName1: user1</div>
|
||||||
|
<div>$userName2: undefined</div>
|
||||||
|
<div>$userName3: undefined</div>
|
||||||
|
<div>$userName4: user4</div>
|
||||||
|
<div>$userName5: undefined</div>
|
||||||
|
<div>$userName6: user6</div>
|
||||||
|
<div>$userName7: undefined</div>
|
||||||
|
`
|
||||||
|
};
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
<script>
|
||||||
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
|
let userName1 = writable('init1');
|
||||||
|
let userName2 = writable('init2');
|
||||||
|
let userName3 = writable('init3');
|
||||||
|
let userName4 = writable('init4');
|
||||||
|
let userName5 = writable('init5');
|
||||||
|
let userName6 = writable('init6');
|
||||||
|
let userName7 = writable('init7');
|
||||||
|
|
||||||
|
let obj = {
|
||||||
|
userName1: 'user1',
|
||||||
|
userName2: 'user2',
|
||||||
|
userName3: 'user3',
|
||||||
|
$userName4: 'user4',
|
||||||
|
userName5: 'user5',
|
||||||
|
$userName6: 'user6',
|
||||||
|
userName7: 'user7',
|
||||||
|
};
|
||||||
|
|
||||||
|
({userName1: $userName1, $userName2 } = obj);
|
||||||
|
({$userName3} = obj);
|
||||||
|
({$userName4} = obj);
|
||||||
|
({$userName5, $userName6, $userName7} = obj);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>$userName1: {$userName1}</div>
|
||||||
|
<div>$userName2: {$userName2}</div>
|
||||||
|
<div>$userName3: {$userName3}</div>
|
||||||
|
<div>$userName4: {$userName4}</div>
|
||||||
|
<div>$userName5: {$userName5}</div>
|
||||||
|
<div>$userName6: {$userName6}</div>
|
||||||
|
<div>$userName7: {$userName7}</div>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script>
|
||||||
|
let name = 'World';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>Hello {name}</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
export default {
|
||||||
|
skip_if_ssr: true,
|
||||||
|
compileOptions: {
|
||||||
|
cssHash: () => 'svelte-xyz'
|
||||||
|
},
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
assert.htmlEqual(
|
||||||
|
window.document.head.innerHTML,
|
||||||
|
'<style id="svelte-xyz">div.svelte-xyz{color:red}</style>'
|
||||||
|
);
|
||||||
|
assert.htmlEqual(
|
||||||
|
component.div.innerHTML,
|
||||||
|
'<div class="svelte-xyz">Hello World</div>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<script>
|
||||||
|
import App from './App.svelte';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
export let div;
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
div = document.createElement('div');
|
||||||
|
|
||||||
|
const app = new App({
|
||||||
|
target: div
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
app.$destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script>
|
||||||
|
let name = 'World';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>Hello {name}</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
export default {
|
||||||
|
skip_if_ssr: true,
|
||||||
|
compileOptions: {
|
||||||
|
cssHash: () => 'svelte-xyz'
|
||||||
|
},
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
assert.htmlEqual(
|
||||||
|
window.document.head.innerHTML,
|
||||||
|
'<style id="svelte-xyz">div.svelte-xyz{color:red}</style>'
|
||||||
|
);
|
||||||
|
assert.htmlEqual(
|
||||||
|
component.div.innerHTML,
|
||||||
|
'<div class="svelte-xyz">Hello World</div>'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
<script>
|
||||||
|
import App from './App.svelte';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
export let div;
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
const app = new App({
|
||||||
|
target: div
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
app.$destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div bind:this={div} />
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script>
|
||||||
|
let name = 'World';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>Hello {name}</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
export default {
|
||||||
|
skip_if_ssr: true,
|
||||||
|
compileOptions: {
|
||||||
|
cssHash: () => 'svelte-xyz'
|
||||||
|
},
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
assert.htmlEqual(window.document.head.innerHTML, '');
|
||||||
|
assert.htmlEqual(component.div.shadowRoot.innerHTML, `
|
||||||
|
<style id="svelte-xyz">div.svelte-xyz{color:red}</style>
|
||||||
|
<div class="svelte-xyz">Hello World</div>
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
import App from './App.svelte';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
export let div;
|
||||||
|
onMount(() => {
|
||||||
|
const root = div.attachShadow({ mode: 'open' });
|
||||||
|
|
||||||
|
const app = new App({
|
||||||
|
target: root
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
app.$destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div bind:this={div} />
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
export default {
|
||||||
|
test({ assert, component, target, window, raf }) {
|
||||||
|
component.visible = true;
|
||||||
|
const div = target.querySelector('div');
|
||||||
|
|
||||||
|
// animation duration of `in` should be 10ms.
|
||||||
|
assert.equal(div.style.animation, '__svelte_1670736059_0 10ms linear 0ms 1 both');
|
||||||
|
|
||||||
|
// animation duration of `out` should be 5ms.
|
||||||
|
component.visible = false;
|
||||||
|
assert.equal(div.style.animation, '__svelte_1670736059_0 10ms linear 0ms 1 both, __svelte_1998461463_0 5ms linear 0ms 1 both');
|
||||||
|
|
||||||
|
// change param
|
||||||
|
raf.tick(1);
|
||||||
|
component.param = true;
|
||||||
|
component.visible = true;
|
||||||
|
|
||||||
|
// animation duration of `in` should be 20ms.
|
||||||
|
assert.equal(div.style.animation, '__svelte_722598827_0 20ms linear 0ms 1 both');
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<script>
|
||||||
|
export let visible = false;
|
||||||
|
export let param = false;
|
||||||
|
|
||||||
|
function getInParam() {
|
||||||
|
return {
|
||||||
|
duration: param ? 20 : 10,
|
||||||
|
css: t => {
|
||||||
|
return `opacity: ${t}`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOutParam() {
|
||||||
|
return {
|
||||||
|
duration: param ? 15 : 5,
|
||||||
|
css: t => {
|
||||||
|
return `opacity: ${t}`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div in:getInParam out:getOutParam></div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let visible;
|
||||||
|
export let slotProps;
|
||||||
|
|
||||||
|
function fade(node) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div transition:fade>
|
||||||
|
<slot {slotProps}></slot>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
// updated props in the middle of transitions
|
||||||
|
// and cancelled the transition halfway
|
||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>outside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
`,
|
||||||
|
props: {
|
||||||
|
props: 'Foo'
|
||||||
|
},
|
||||||
|
|
||||||
|
async test({ assert, component, target, window, raf }) {
|
||||||
|
await component.hide();
|
||||||
|
const [, div] = target.querySelectorAll('div');
|
||||||
|
|
||||||
|
raf.tick(50);
|
||||||
|
assert.equal(div.foo, 0.5);
|
||||||
|
|
||||||
|
component.props = 'Bar';
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
await component.show();
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Bar Bar Bar</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
raf.tick(100);
|
||||||
|
assert.equal(div.foo, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<script>
|
||||||
|
import Nested from './Nested.svelte';
|
||||||
|
|
||||||
|
let visible = true;
|
||||||
|
let state = 'Foo';
|
||||||
|
let slotProps = 'Foo';
|
||||||
|
export let props;
|
||||||
|
|
||||||
|
export function show() {
|
||||||
|
visible = true;
|
||||||
|
}
|
||||||
|
export function hide() {
|
||||||
|
visible = false;
|
||||||
|
state = 'Bar';
|
||||||
|
slotProps = 'Bar';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>outside {state} {props} {slotProps}</div>
|
||||||
|
<Nested {visible} {slotProps} let:slotProps>
|
||||||
|
inside {state} {props} {slotProps}
|
||||||
|
</Nested>
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let visible;
|
||||||
|
export let slotProps;
|
||||||
|
|
||||||
|
function fade(node) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div transition:fade>
|
||||||
|
<slot {slotProps}></slot>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
// updated props in the middle of transitions
|
||||||
|
// and cancelled the transition halfway
|
||||||
|
// + spreaded props + overflow context
|
||||||
|
|
||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>outside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
0
|
||||||
|
`,
|
||||||
|
props: {
|
||||||
|
props: 'Foo'
|
||||||
|
},
|
||||||
|
|
||||||
|
async test({ assert, component, target, window, raf }) {
|
||||||
|
await component.hide();
|
||||||
|
const [, div] = target.querySelectorAll('div');
|
||||||
|
|
||||||
|
raf.tick(50);
|
||||||
|
assert.equal(div.foo, 0.5);
|
||||||
|
|
||||||
|
component.props = 'Bar';
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
0
|
||||||
|
`);
|
||||||
|
|
||||||
|
await component.show();
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Bar Bar Bar</div>
|
||||||
|
0
|
||||||
|
`);
|
||||||
|
|
||||||
|
raf.tick(100);
|
||||||
|
assert.equal(div.foo, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
import Nested from './Nested.svelte';
|
||||||
|
|
||||||
|
export let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;
|
||||||
|
|
||||||
|
let visible = true;
|
||||||
|
let state = 'Foo';
|
||||||
|
let slotProps = 'Foo';
|
||||||
|
export let props;
|
||||||
|
|
||||||
|
export function show() {
|
||||||
|
visible = true;
|
||||||
|
}
|
||||||
|
export function hide() {
|
||||||
|
visible = false;
|
||||||
|
state = 'Bar';
|
||||||
|
slotProps = 'Bar';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>outside {state} {props} {slotProps}</div>
|
||||||
|
|
||||||
|
<Nested {visible} {slotProps} let:slotProps>
|
||||||
|
inside {state} {props} {slotProps}
|
||||||
|
</Nested>
|
||||||
|
|
||||||
|
{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let visible;
|
||||||
|
export let slotProps;
|
||||||
|
|
||||||
|
function fade(node) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div transition:fade>
|
||||||
|
<slot {...slotProps}></slot>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let visible;
|
||||||
|
let slotProps = { slotProps: 'XXX' };
|
||||||
|
|
||||||
|
function fade(node) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div transition:fade>
|
||||||
|
<slot {...slotProps}></slot>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
// updated props in the middle of transitions
|
||||||
|
// and cancelled the transition halfway
|
||||||
|
// with spreaded props
|
||||||
|
|
||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>outside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo XXX</div>
|
||||||
|
`,
|
||||||
|
props: {
|
||||||
|
props: 'Foo'
|
||||||
|
},
|
||||||
|
|
||||||
|
async test({ assert, component, target, window, raf }) {
|
||||||
|
await component.hide();
|
||||||
|
const [, div] = target.querySelectorAll('div');
|
||||||
|
|
||||||
|
raf.tick(50);
|
||||||
|
assert.equal(div.foo, 0.5);
|
||||||
|
|
||||||
|
component.props = 'Bar';
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo XXX</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
await component.show();
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Bar Bar Bar</div>
|
||||||
|
<div>inside Bar Bar XXX</div>
|
||||||
|
`);
|
||||||
|
|
||||||
|
raf.tick(100);
|
||||||
|
assert.equal(div.foo, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<script>
|
||||||
|
import Nested from './Nested.svelte';
|
||||||
|
import Nested2 from './Nested2.svelte';
|
||||||
|
|
||||||
|
let visible = true;
|
||||||
|
let state = 'Foo';
|
||||||
|
let slotProps = { slotProps: 'Foo' };
|
||||||
|
export let props;
|
||||||
|
|
||||||
|
export function show() {
|
||||||
|
visible = true;
|
||||||
|
}
|
||||||
|
export function hide() {
|
||||||
|
visible = false;
|
||||||
|
state = 'Bar';
|
||||||
|
slotProps = { slotProps: 'Bar' };
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>outside {state} {props} {slotProps.slotProps}</div>
|
||||||
|
<Nested {visible} {slotProps} let:slotProps>
|
||||||
|
inside {state} {props} {slotProps}
|
||||||
|
</Nested>
|
||||||
|
<Nested2 {visible} let:slotProps>
|
||||||
|
inside {state} {props} {slotProps}
|
||||||
|
</Nested2>
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
export let visible;
|
||||||
|
export let slotProps;
|
||||||
|
|
||||||
|
function fade(node) {
|
||||||
|
return {
|
||||||
|
duration: 100,
|
||||||
|
tick: t => {
|
||||||
|
node.foo = t;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if visible}
|
||||||
|
<div transition:fade>
|
||||||
|
<slot {...slotProps}></slot>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
// updated props in the middle of transitions
|
||||||
|
// and cancelled the transition halfway
|
||||||
|
// + spreaded props + overflow context
|
||||||
|
|
||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>outside Foo Foo Foo</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
0
|
||||||
|
`,
|
||||||
|
props: {
|
||||||
|
props: 'Foo'
|
||||||
|
},
|
||||||
|
|
||||||
|
async test({ assert, component, target, window, raf }) {
|
||||||
|
await component.hide();
|
||||||
|
const [, div] = target.querySelectorAll('div');
|
||||||
|
|
||||||
|
raf.tick(50);
|
||||||
|
assert.equal(div.foo, 0.5);
|
||||||
|
|
||||||
|
component.props = 'Bar';
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Foo Foo Foo</div>
|
||||||
|
0
|
||||||
|
`);
|
||||||
|
|
||||||
|
await component.show();
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>outside Bar Bar Bar</div>
|
||||||
|
<div>inside Bar Bar Bar</div>
|
||||||
|
0
|
||||||
|
`);
|
||||||
|
|
||||||
|
raf.tick(100);
|
||||||
|
assert.equal(div.foo, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
import Nested from './Nested.svelte';
|
||||||
|
|
||||||
|
export let a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a11=0, a12=0,a13=0,a14=0,a15=0,a16=0,a17=0,a18=0,a19=0,a20=0,a21=0, a22=0,a23=0,a24=0,a25=0,a26=0,a27=0,a28=0,a29=0,a30=0,a31=0,a32=0,a33=0;
|
||||||
|
|
||||||
|
let visible = true;
|
||||||
|
let state = 'Foo';
|
||||||
|
let slotProps = { slotProps: 'Foo' };
|
||||||
|
export let props;
|
||||||
|
|
||||||
|
export function show() {
|
||||||
|
visible = true;
|
||||||
|
}
|
||||||
|
export function hide() {
|
||||||
|
visible = false;
|
||||||
|
state = 'Bar';
|
||||||
|
slotProps = { slotProps: 'Bar' };
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div>outside {state} {props} {slotProps.slotProps}</div>
|
||||||
|
|
||||||
|
<Nested {visible} {slotProps} let:slotProps>
|
||||||
|
inside {state} {props} {slotProps}
|
||||||
|
</Nested>
|
||||||
|
|
||||||
|
{a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21+a22+a23+a24+a25+a26+a27+a28+a29+a30+a31+a32+a33}
|
||||||
Loading…
Reference in new issue