@furystack/shades 12.2.5 → 12.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +99 -0
- package/esm/components/lazy-load.d.ts +2 -0
- package/esm/components/lazy-load.d.ts.map +1 -1
- package/esm/components/lazy-load.js +8 -3
- package/esm/components/lazy-load.js.map +1 -1
- package/esm/components/lazy-load.spec.js +59 -1
- package/esm/components/lazy-load.spec.js.map +1 -1
- package/esm/components/nested-router.d.ts +53 -0
- package/esm/components/nested-router.d.ts.map +1 -1
- package/esm/components/nested-router.js +35 -10
- package/esm/components/nested-router.js.map +1 -1
- package/esm/components/nested-router.spec.js +267 -19
- package/esm/components/nested-router.spec.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/services/index.d.ts +2 -0
- package/esm/services/index.d.ts.map +1 -1
- package/esm/services/index.js +2 -0
- package/esm/services/index.js.map +1 -1
- package/esm/services/route-match-service.d.ts +12 -0
- package/esm/services/route-match-service.d.ts.map +1 -0
- package/esm/services/route-match-service.js +24 -0
- package/esm/services/route-match-service.js.map +1 -0
- package/esm/services/route-match-service.spec.d.ts +2 -0
- package/esm/services/route-match-service.spec.d.ts.map +1 -0
- package/esm/services/route-match-service.spec.js +120 -0
- package/esm/services/route-match-service.spec.js.map +1 -0
- package/esm/services/route-meta-utils.d.ts +57 -0
- package/esm/services/route-meta-utils.d.ts.map +1 -0
- package/esm/services/route-meta-utils.js +64 -0
- package/esm/services/route-meta-utils.js.map +1 -0
- package/esm/services/route-meta-utils.spec.d.ts +2 -0
- package/esm/services/route-meta-utils.spec.d.ts.map +1 -0
- package/esm/services/route-meta-utils.spec.js +217 -0
- package/esm/services/route-meta-utils.spec.js.map +1 -0
- package/esm/shade.d.ts.map +1 -1
- package/esm/shade.js +12 -1
- package/esm/shade.js.map +1 -1
- package/esm/shade.spec.js +93 -2
- package/esm/shade.spec.js.map +1 -1
- package/esm/view-transition.d.ts +38 -0
- package/esm/view-transition.d.ts.map +1 -0
- package/esm/view-transition.js +50 -0
- package/esm/view-transition.js.map +1 -0
- package/esm/view-transition.spec.d.ts +2 -0
- package/esm/view-transition.spec.d.ts.map +1 -0
- package/esm/view-transition.spec.js +184 -0
- package/esm/view-transition.spec.js.map +1 -0
- package/package.json +1 -1
- package/src/components/lazy-load.spec.tsx +78 -1
- package/src/components/lazy-load.tsx +10 -3
- package/src/components/nested-router.spec.tsx +389 -35
- package/src/components/nested-router.tsx +93 -10
- package/src/index.ts +1 -0
- package/src/services/index.ts +2 -0
- package/src/services/route-match-service.spec.ts +45 -0
- package/src/services/route-match-service.ts +17 -0
- package/src/services/route-meta-utils.spec.ts +243 -0
- package/src/services/route-meta-utils.ts +85 -0
- package/src/shade.spec.tsx +112 -2
- package/src/shade.ts +11 -1
- package/src/view-transition.spec.ts +218 -0
- package/src/view-transition.ts +66 -0
package/esm/shade.spec.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject';
|
|
2
|
-
import { sleepAsync, usingAsync } from '@furystack/utils';
|
|
3
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { ObservableValue, sleepAsync, usingAsync } from '@furystack/utils';
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
4
|
import { initializeShadeRoot } from './initialize.js';
|
|
5
5
|
import { createComponent } from './shade-component.js';
|
|
6
6
|
import { flushUpdates, Shade } from './shade.js';
|
|
@@ -82,6 +82,97 @@ describe('Shade edge cases', () => {
|
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
|
+
describe('disconnected component should not re-render', () => {
|
|
86
|
+
it('should not re-render when updateComponent is called after removal', async () => {
|
|
87
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
88
|
+
const rootElement = document.getElementById('root');
|
|
89
|
+
const renderCounter = vi.fn();
|
|
90
|
+
const ExampleComponent = Shade({
|
|
91
|
+
shadowDomName: 'shade-no-render-after-disconnect',
|
|
92
|
+
render: () => {
|
|
93
|
+
renderCounter();
|
|
94
|
+
return createComponent("div", null, "content");
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
initializeShadeRoot({
|
|
98
|
+
injector,
|
|
99
|
+
rootElement,
|
|
100
|
+
jsxElement: createComponent(ExampleComponent, null),
|
|
101
|
+
});
|
|
102
|
+
await flushUpdates();
|
|
103
|
+
const element = document.querySelector('shade-no-render-after-disconnect');
|
|
104
|
+
expect(element.getRenderCount()).toBe(1);
|
|
105
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
106
|
+
element.remove();
|
|
107
|
+
await flushUpdates();
|
|
108
|
+
element.updateComponent();
|
|
109
|
+
await flushUpdates();
|
|
110
|
+
expect(element.getRenderCount()).toBe(1);
|
|
111
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
it('should not re-render when updateComponentSync is called after removal', async () => {
|
|
115
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
116
|
+
const rootElement = document.getElementById('root');
|
|
117
|
+
const renderCounter = vi.fn();
|
|
118
|
+
const ExampleComponent = Shade({
|
|
119
|
+
shadowDomName: 'shade-no-sync-render-after-disconnect',
|
|
120
|
+
render: () => {
|
|
121
|
+
renderCounter();
|
|
122
|
+
return createComponent("div", null, "content");
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
initializeShadeRoot({
|
|
126
|
+
injector,
|
|
127
|
+
rootElement,
|
|
128
|
+
jsxElement: createComponent(ExampleComponent, null),
|
|
129
|
+
});
|
|
130
|
+
await flushUpdates();
|
|
131
|
+
const element = document.querySelector('shade-no-sync-render-after-disconnect');
|
|
132
|
+
expect(element.getRenderCount()).toBe(1);
|
|
133
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
134
|
+
element.remove();
|
|
135
|
+
await flushUpdates();
|
|
136
|
+
element.updateComponentSync();
|
|
137
|
+
expect(element.getRenderCount()).toBe(1);
|
|
138
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
it('should not re-render when an observable fires during disposal', async () => {
|
|
142
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
143
|
+
const rootElement = document.getElementById('root');
|
|
144
|
+
const renderCounter = vi.fn();
|
|
145
|
+
const obs = new ObservableValue(0);
|
|
146
|
+
const ExampleComponent = Shade({
|
|
147
|
+
shadowDomName: 'shade-no-render-during-disposal',
|
|
148
|
+
render: ({ useObservable, useDisposable }) => {
|
|
149
|
+
useObservable('obs', obs);
|
|
150
|
+
useDisposable('cleanup', () => ({
|
|
151
|
+
[Symbol.dispose]: () => {
|
|
152
|
+
obs.setValue(999);
|
|
153
|
+
},
|
|
154
|
+
}));
|
|
155
|
+
renderCounter();
|
|
156
|
+
return createComponent("div", null, obs.getValue());
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
initializeShadeRoot({
|
|
160
|
+
injector,
|
|
161
|
+
rootElement,
|
|
162
|
+
jsxElement: createComponent(ExampleComponent, null),
|
|
163
|
+
});
|
|
164
|
+
await flushUpdates();
|
|
165
|
+
const element = document.querySelector('shade-no-render-during-disposal');
|
|
166
|
+
expect(element.getRenderCount()).toBe(1);
|
|
167
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
168
|
+
element.remove();
|
|
169
|
+
await flushUpdates();
|
|
170
|
+
await sleepAsync(10);
|
|
171
|
+
expect(element.getRenderCount()).toBe(1);
|
|
172
|
+
expect(renderCounter).toBeCalledTimes(1);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
85
176
|
describe('BroadcastChannel cross-tab communication', () => {
|
|
86
177
|
it('should update stored state when receiving BroadcastChannel message with matching key', async () => {
|
|
87
178
|
const mockedStorage = new Map();
|
package/esm/shade.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shade.spec.js","sourceRoot":"","sources":["../src/shade.spec.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shade.spec.js","sourceRoot":"","sources":["../src/shade.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for the View Transition API integration.
|
|
3
|
+
* When provided as an object, allows specifying transition types for CSS targeting
|
|
4
|
+
* via the `:active-view-transition-type()` pseudo-class.
|
|
5
|
+
*/
|
|
6
|
+
export type ViewTransitionConfig = {
|
|
7
|
+
types?: string[];
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Wraps a DOM update in `document.startViewTransition()` when the View Transition API
|
|
11
|
+
* is available and `config` is truthy. Falls back to calling `update()` directly otherwise.
|
|
12
|
+
*
|
|
13
|
+
* Returns the `updateCallbackDone` promise when a transition is started, allowing callers
|
|
14
|
+
* that need to wait for the DOM update (e.g. to run lifecycle hooks) to `await` the result.
|
|
15
|
+
* Returns `undefined` when no transition is used (the update runs synchronously).
|
|
16
|
+
*
|
|
17
|
+
* @param config - The view transition configuration (boolean or object with types)
|
|
18
|
+
* @param update - The synchronous DOM update callback
|
|
19
|
+
* @returns A promise that resolves after the update callback completes inside the transition, or `undefined`
|
|
20
|
+
*/
|
|
21
|
+
export declare const maybeViewTransition: (config: boolean | ViewTransitionConfig | undefined, update: () => void) => Promise<void> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Keeps a "displayed" copy of `value` that is updated through a view transition
|
|
24
|
+
* whenever the value changes and `shouldTransition` returns true.
|
|
25
|
+
*
|
|
26
|
+
* When the transition is skipped (config is falsy or `shouldTransition` returns false),
|
|
27
|
+
* the displayed value is updated synchronously without an animation.
|
|
28
|
+
*
|
|
29
|
+
* @param useState - The component's `useState` hook
|
|
30
|
+
* @param key - Unique state key for caching the displayed value
|
|
31
|
+
* @param value - The latest source value (e.g. from `useObservable` or derived from props)
|
|
32
|
+
* @param config - View transition configuration forwarded to `maybeViewTransition`
|
|
33
|
+
* @param shouldTransition - Predicate that decides whether a value change warrants a transition.
|
|
34
|
+
* Defaults to `() => true` (always transition).
|
|
35
|
+
* @returns The currently displayed value
|
|
36
|
+
*/
|
|
37
|
+
export declare const transitionedValue: <T>(useState: <S>(key: string, initialValue: S) => [S, (v: S) => void], key: string, value: T, config: boolean | ViewTransitionConfig | undefined, shouldTransition?: (prev: T, next: T) => boolean) => T;
|
|
38
|
+
//# sourceMappingURL=view-transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-transition.d.ts","sourceRoot":"","sources":["../src/view-transition.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,OAAO,GAAG,oBAAoB,GAAG,SAAS,EAClD,QAAQ,MAAM,IAAI,KACjB,OAAO,CAAC,IAAI,CAAC,GAAG,SAQlB,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,EACjC,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAClE,KAAK,MAAM,EACX,OAAO,CAAC,EACR,QAAQ,OAAO,GAAG,oBAAoB,GAAG,SAAS,EAClD,mBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,OAAoB,KAC3D,CAUF,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wraps a DOM update in `document.startViewTransition()` when the View Transition API
|
|
3
|
+
* is available and `config` is truthy. Falls back to calling `update()` directly otherwise.
|
|
4
|
+
*
|
|
5
|
+
* Returns the `updateCallbackDone` promise when a transition is started, allowing callers
|
|
6
|
+
* that need to wait for the DOM update (e.g. to run lifecycle hooks) to `await` the result.
|
|
7
|
+
* Returns `undefined` when no transition is used (the update runs synchronously).
|
|
8
|
+
*
|
|
9
|
+
* @param config - The view transition configuration (boolean or object with types)
|
|
10
|
+
* @param update - The synchronous DOM update callback
|
|
11
|
+
* @returns A promise that resolves after the update callback completes inside the transition, or `undefined`
|
|
12
|
+
*/
|
|
13
|
+
export const maybeViewTransition = (config, update) => {
|
|
14
|
+
if (config && document.startViewTransition) {
|
|
15
|
+
const types = typeof config === 'object' && config.types?.length ? config.types : undefined;
|
|
16
|
+
const transition = types ? document.startViewTransition({ update, types }) : document.startViewTransition(update);
|
|
17
|
+
return transition.updateCallbackDone;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
update();
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Keeps a "displayed" copy of `value` that is updated through a view transition
|
|
25
|
+
* whenever the value changes and `shouldTransition` returns true.
|
|
26
|
+
*
|
|
27
|
+
* When the transition is skipped (config is falsy or `shouldTransition` returns false),
|
|
28
|
+
* the displayed value is updated synchronously without an animation.
|
|
29
|
+
*
|
|
30
|
+
* @param useState - The component's `useState` hook
|
|
31
|
+
* @param key - Unique state key for caching the displayed value
|
|
32
|
+
* @param value - The latest source value (e.g. from `useObservable` or derived from props)
|
|
33
|
+
* @param config - View transition configuration forwarded to `maybeViewTransition`
|
|
34
|
+
* @param shouldTransition - Predicate that decides whether a value change warrants a transition.
|
|
35
|
+
* Defaults to `() => true` (always transition).
|
|
36
|
+
* @returns The currently displayed value
|
|
37
|
+
*/
|
|
38
|
+
export const transitionedValue = (useState, key, value, config, shouldTransition = () => true) => {
|
|
39
|
+
const [displayed, setDisplayed] = useState(key, value);
|
|
40
|
+
if (value !== displayed) {
|
|
41
|
+
if (shouldTransition(displayed, value)) {
|
|
42
|
+
void maybeViewTransition(config, () => setDisplayed(value));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
setDisplayed(value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return displayed;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=view-transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-transition.js","sourceRoot":"","sources":["../src/view-transition.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAkD,EAClD,MAAkB,EACS,EAAE;IAC7B,IAAI,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QACjH,OAAO,UAAU,CAAC,kBAAkB,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAAkE,EAClE,GAAW,EACX,KAAQ,EACR,MAAkD,EAClD,mBAAkD,GAAG,EAAE,CAAC,IAAI,EACzD,EAAE;IACL,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;YACvC,KAAK,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7D,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-transition.spec.d.ts","sourceRoot":"","sources":["../src/view-transition.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { maybeViewTransition, transitionedValue } from './view-transition.js';
|
|
3
|
+
describe('maybeViewTransition', () => {
|
|
4
|
+
afterEach(() => {
|
|
5
|
+
delete document.startViewTransition;
|
|
6
|
+
});
|
|
7
|
+
const mockStartViewTransition = () => {
|
|
8
|
+
const spy = vi.fn((optionsOrCallback) => {
|
|
9
|
+
const update = typeof optionsOrCallback === 'function' ? optionsOrCallback : optionsOrCallback.update;
|
|
10
|
+
update?.();
|
|
11
|
+
return {
|
|
12
|
+
finished: Promise.resolve(),
|
|
13
|
+
ready: Promise.resolve(),
|
|
14
|
+
updateCallbackDone: Promise.resolve(),
|
|
15
|
+
skipTransition: vi.fn(),
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
document.startViewTransition = spy;
|
|
19
|
+
return spy;
|
|
20
|
+
};
|
|
21
|
+
it('should call update directly when config is undefined', () => {
|
|
22
|
+
const spy = mockStartViewTransition();
|
|
23
|
+
const update = vi.fn();
|
|
24
|
+
const result = maybeViewTransition(undefined, update);
|
|
25
|
+
expect(update).toHaveBeenCalledTimes(1);
|
|
26
|
+
expect(spy).not.toHaveBeenCalled();
|
|
27
|
+
expect(result).toBeUndefined();
|
|
28
|
+
});
|
|
29
|
+
it('should call update directly when config is false', () => {
|
|
30
|
+
const spy = mockStartViewTransition();
|
|
31
|
+
const update = vi.fn();
|
|
32
|
+
const result = maybeViewTransition(false, update);
|
|
33
|
+
expect(update).toHaveBeenCalledTimes(1);
|
|
34
|
+
expect(spy).not.toHaveBeenCalled();
|
|
35
|
+
expect(result).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
it('should call update directly when startViewTransition is not available', () => {
|
|
38
|
+
const update = vi.fn();
|
|
39
|
+
const result = maybeViewTransition(true, update);
|
|
40
|
+
expect(update).toHaveBeenCalledTimes(1);
|
|
41
|
+
expect(result).toBeUndefined();
|
|
42
|
+
});
|
|
43
|
+
it('should call startViewTransition when config is true and API is available', () => {
|
|
44
|
+
const spy = mockStartViewTransition();
|
|
45
|
+
const update = vi.fn();
|
|
46
|
+
const result = maybeViewTransition(true, update);
|
|
47
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
48
|
+
expect(update).toHaveBeenCalledTimes(1);
|
|
49
|
+
expect(result).toBeInstanceOf(Promise);
|
|
50
|
+
});
|
|
51
|
+
it('should use callback form when config is true', () => {
|
|
52
|
+
const spy = mockStartViewTransition();
|
|
53
|
+
const update = vi.fn();
|
|
54
|
+
void maybeViewTransition(true, update);
|
|
55
|
+
expect(spy).toHaveBeenCalledWith(update);
|
|
56
|
+
});
|
|
57
|
+
it('should pass types when config is an object with types', () => {
|
|
58
|
+
const spy = mockStartViewTransition();
|
|
59
|
+
const update = vi.fn();
|
|
60
|
+
const config = { types: ['slide', 'fade'] };
|
|
61
|
+
void maybeViewTransition(config, update);
|
|
62
|
+
expect(spy).toHaveBeenCalledWith({ update, types: ['slide', 'fade'] });
|
|
63
|
+
});
|
|
64
|
+
it('should use callback form when config object has empty types array', () => {
|
|
65
|
+
const spy = mockStartViewTransition();
|
|
66
|
+
const update = vi.fn();
|
|
67
|
+
const config = { types: [] };
|
|
68
|
+
void maybeViewTransition(config, update);
|
|
69
|
+
expect(spy).toHaveBeenCalledWith(update);
|
|
70
|
+
});
|
|
71
|
+
it('should use callback form when config object has no types', () => {
|
|
72
|
+
const spy = mockStartViewTransition();
|
|
73
|
+
const update = vi.fn();
|
|
74
|
+
const config = {};
|
|
75
|
+
void maybeViewTransition(config, update);
|
|
76
|
+
expect(spy).toHaveBeenCalledWith(update);
|
|
77
|
+
});
|
|
78
|
+
it('should return updateCallbackDone promise when transition is started', async () => {
|
|
79
|
+
mockStartViewTransition();
|
|
80
|
+
const update = vi.fn();
|
|
81
|
+
const result = maybeViewTransition(true, update);
|
|
82
|
+
expect(result).toBeInstanceOf(Promise);
|
|
83
|
+
await expect(result).resolves.toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('transitionedValue', () => {
|
|
87
|
+
afterEach(() => {
|
|
88
|
+
delete document.startViewTransition;
|
|
89
|
+
});
|
|
90
|
+
const mockStartViewTransition = () => {
|
|
91
|
+
const spy = vi.fn((optionsOrCallback) => {
|
|
92
|
+
const update = typeof optionsOrCallback === 'function' ? optionsOrCallback : optionsOrCallback.update;
|
|
93
|
+
update?.();
|
|
94
|
+
return {
|
|
95
|
+
finished: Promise.resolve(),
|
|
96
|
+
ready: Promise.resolve(),
|
|
97
|
+
updateCallbackDone: Promise.resolve(),
|
|
98
|
+
skipTransition: vi.fn(),
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
document.startViewTransition = spy;
|
|
102
|
+
return spy;
|
|
103
|
+
};
|
|
104
|
+
const createMockUseState = () => {
|
|
105
|
+
const store = new Map();
|
|
106
|
+
const setters = new Map();
|
|
107
|
+
const mockUseState = (key, initialValue) => {
|
|
108
|
+
if (!store.has(key)) {
|
|
109
|
+
store.set(key, initialValue);
|
|
110
|
+
}
|
|
111
|
+
const setValue = (v) => {
|
|
112
|
+
store.set(key, v);
|
|
113
|
+
};
|
|
114
|
+
setters.set(key, setValue);
|
|
115
|
+
return [store.get(key), setValue];
|
|
116
|
+
};
|
|
117
|
+
return { mockUseState, store };
|
|
118
|
+
};
|
|
119
|
+
it('should return the value when it equals the displayed value', () => {
|
|
120
|
+
const { mockUseState } = createMockUseState();
|
|
121
|
+
const result = transitionedValue(mockUseState, 'key', 'hello', true);
|
|
122
|
+
expect(result).toBe('hello');
|
|
123
|
+
});
|
|
124
|
+
it('should not call startViewTransition when value has not changed', () => {
|
|
125
|
+
const spy = mockStartViewTransition();
|
|
126
|
+
const { mockUseState } = createMockUseState();
|
|
127
|
+
transitionedValue(mockUseState, 'key', 'hello', true);
|
|
128
|
+
expect(spy).not.toHaveBeenCalled();
|
|
129
|
+
});
|
|
130
|
+
it('should call startViewTransition when value changes and config is truthy', () => {
|
|
131
|
+
const spy = mockStartViewTransition();
|
|
132
|
+
const { mockUseState, store } = createMockUseState();
|
|
133
|
+
transitionedValue(mockUseState, 'key', 'initial', true);
|
|
134
|
+
store.set('key', 'initial');
|
|
135
|
+
transitionedValue(mockUseState, 'key', 'updated', true);
|
|
136
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
137
|
+
expect(store.get('key')).toBe('updated');
|
|
138
|
+
});
|
|
139
|
+
it('should not call startViewTransition when config is falsy', () => {
|
|
140
|
+
const spy = mockStartViewTransition();
|
|
141
|
+
const { mockUseState, store } = createMockUseState();
|
|
142
|
+
transitionedValue(mockUseState, 'key', 'initial', undefined);
|
|
143
|
+
store.set('key', 'initial');
|
|
144
|
+
transitionedValue(mockUseState, 'key', 'updated', undefined);
|
|
145
|
+
expect(spy).not.toHaveBeenCalled();
|
|
146
|
+
expect(store.get('key')).toBe('updated');
|
|
147
|
+
});
|
|
148
|
+
it('should not call startViewTransition when shouldTransition returns false', () => {
|
|
149
|
+
const spy = mockStartViewTransition();
|
|
150
|
+
const { mockUseState, store } = createMockUseState();
|
|
151
|
+
transitionedValue(mockUseState, 'key', 'initial', true, () => false);
|
|
152
|
+
store.set('key', 'initial');
|
|
153
|
+
transitionedValue(mockUseState, 'key', 'updated', true, () => false);
|
|
154
|
+
expect(spy).not.toHaveBeenCalled();
|
|
155
|
+
expect(store.get('key')).toBe('updated');
|
|
156
|
+
});
|
|
157
|
+
it('should call startViewTransition when shouldTransition returns true', () => {
|
|
158
|
+
const spy = mockStartViewTransition();
|
|
159
|
+
const { mockUseState, store } = createMockUseState();
|
|
160
|
+
transitionedValue(mockUseState, 'key', 'initial', true, () => true);
|
|
161
|
+
store.set('key', 'initial');
|
|
162
|
+
transitionedValue(mockUseState, 'key', 'updated', true, () => true);
|
|
163
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
164
|
+
expect(store.get('key')).toBe('updated');
|
|
165
|
+
});
|
|
166
|
+
it('should pass prev and next values to shouldTransition', () => {
|
|
167
|
+
mockStartViewTransition();
|
|
168
|
+
const { mockUseState, store } = createMockUseState();
|
|
169
|
+
const shouldTransition = vi.fn(() => true);
|
|
170
|
+
transitionedValue(mockUseState, 'key', 'initial', true, shouldTransition);
|
|
171
|
+
store.set('key', 'initial');
|
|
172
|
+
transitionedValue(mockUseState, 'key', 'updated', true, shouldTransition);
|
|
173
|
+
expect(shouldTransition).toHaveBeenCalledWith('initial', 'updated');
|
|
174
|
+
});
|
|
175
|
+
it('should default shouldTransition to always true', () => {
|
|
176
|
+
const spy = mockStartViewTransition();
|
|
177
|
+
const { mockUseState, store } = createMockUseState();
|
|
178
|
+
transitionedValue(mockUseState, 'key', 'a', true);
|
|
179
|
+
store.set('key', 'a');
|
|
180
|
+
transitionedValue(mockUseState, 'key', 'b', true);
|
|
181
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=view-transition.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-transition.spec.js","sourceRoot":"","sources":["../src/view-transition.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -13,6 +13,7 @@ describe('Lazy Load', () => {
|
|
|
13
13
|
})
|
|
14
14
|
afterEach(() => {
|
|
15
15
|
document.body.innerHTML = ''
|
|
16
|
+
delete (document as unknown as Record<string, unknown>).startViewTransition
|
|
16
17
|
})
|
|
17
18
|
|
|
18
19
|
it('Shuld display the loader and completed state', async () => {
|
|
@@ -72,7 +73,7 @@ describe('Lazy Load', () => {
|
|
|
72
73
|
})
|
|
73
74
|
})
|
|
74
75
|
|
|
75
|
-
it('
|
|
76
|
+
it('Should succeed on retry after initial failure', async () => {
|
|
76
77
|
await usingAsync(new Injector(), async (injector) => {
|
|
77
78
|
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
78
79
|
let counter = 0
|
|
@@ -111,4 +112,80 @@ describe('Lazy Load', () => {
|
|
|
111
112
|
expect(document.body.innerHTML).toBe('<div id="root"><lazy-load><div>success</div></lazy-load></div>')
|
|
112
113
|
})
|
|
113
114
|
})
|
|
115
|
+
|
|
116
|
+
it('should call startViewTransition when viewTransition is enabled and component loads', async () => {
|
|
117
|
+
const startViewTransitionSpy = vi.fn((optionsOrCallback: StartViewTransitionOptions | (() => void)) => {
|
|
118
|
+
const update = typeof optionsOrCallback === 'function' ? optionsOrCallback : optionsOrCallback.update
|
|
119
|
+
update?.()
|
|
120
|
+
return {
|
|
121
|
+
finished: Promise.resolve(),
|
|
122
|
+
ready: Promise.resolve(),
|
|
123
|
+
updateCallbackDone: Promise.resolve(),
|
|
124
|
+
skipTransition: vi.fn(),
|
|
125
|
+
} as unknown as ViewTransition
|
|
126
|
+
})
|
|
127
|
+
document.startViewTransition = startViewTransitionSpy as typeof document.startViewTransition
|
|
128
|
+
|
|
129
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
130
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
131
|
+
|
|
132
|
+
initializeShadeRoot({
|
|
133
|
+
injector,
|
|
134
|
+
rootElement,
|
|
135
|
+
jsxElement: (
|
|
136
|
+
<LazyLoad
|
|
137
|
+
viewTransition
|
|
138
|
+
loader={<div>Loading...</div>}
|
|
139
|
+
component={async () => {
|
|
140
|
+
await sleepAsync(50)
|
|
141
|
+
return <div>Loaded</div>
|
|
142
|
+
}}
|
|
143
|
+
/>
|
|
144
|
+
),
|
|
145
|
+
})
|
|
146
|
+
await flushUpdates()
|
|
147
|
+
expect(document.body.innerHTML).toContain('Loading...')
|
|
148
|
+
|
|
149
|
+
await sleepAsync(100)
|
|
150
|
+
expect(startViewTransitionSpy).toHaveBeenCalledTimes(1)
|
|
151
|
+
expect(document.body.innerHTML).toContain('Loaded')
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
it('should not call startViewTransition when viewTransition is not set', async () => {
|
|
156
|
+
const startViewTransitionSpy = vi.fn((optionsOrCallback: StartViewTransitionOptions | (() => void)) => {
|
|
157
|
+
const update = typeof optionsOrCallback === 'function' ? optionsOrCallback : optionsOrCallback.update
|
|
158
|
+
update?.()
|
|
159
|
+
return {
|
|
160
|
+
finished: Promise.resolve(),
|
|
161
|
+
ready: Promise.resolve(),
|
|
162
|
+
updateCallbackDone: Promise.resolve(),
|
|
163
|
+
skipTransition: vi.fn(),
|
|
164
|
+
} as unknown as ViewTransition
|
|
165
|
+
})
|
|
166
|
+
document.startViewTransition = startViewTransitionSpy as typeof document.startViewTransition
|
|
167
|
+
|
|
168
|
+
await usingAsync(new Injector(), async (injector) => {
|
|
169
|
+
const rootElement = document.getElementById('root') as HTMLDivElement
|
|
170
|
+
|
|
171
|
+
initializeShadeRoot({
|
|
172
|
+
injector,
|
|
173
|
+
rootElement,
|
|
174
|
+
jsxElement: (
|
|
175
|
+
<LazyLoad
|
|
176
|
+
loader={<div>Loading...</div>}
|
|
177
|
+
component={async () => {
|
|
178
|
+
await sleepAsync(50)
|
|
179
|
+
return <div>Loaded</div>
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
),
|
|
183
|
+
})
|
|
184
|
+
await flushUpdates()
|
|
185
|
+
await sleepAsync(100)
|
|
186
|
+
|
|
187
|
+
expect(startViewTransitionSpy).not.toHaveBeenCalled()
|
|
188
|
+
expect(document.body.innerHTML).toContain('Loaded')
|
|
189
|
+
})
|
|
190
|
+
})
|
|
114
191
|
})
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Shade } from '../shade.js'
|
|
2
|
+
import type { ViewTransitionConfig } from '../view-transition.js'
|
|
3
|
+
import { maybeViewTransition } from '../view-transition.js'
|
|
2
4
|
|
|
3
5
|
export interface LazyLoadProps {
|
|
4
6
|
loader: JSX.Element
|
|
5
7
|
error?: (error: unknown, retry: () => Promise<void>) => JSX.Element
|
|
6
8
|
component: () => Promise<JSX.Element>
|
|
9
|
+
viewTransition?: boolean | ViewTransitionConfig
|
|
7
10
|
}
|
|
8
11
|
|
|
9
12
|
export const LazyLoad = Shade<LazyLoadProps>({
|
|
@@ -36,8 +39,10 @@ export const LazyLoad = Shade<LazyLoadProps>({
|
|
|
36
39
|
factory()
|
|
37
40
|
.then((loaded) => {
|
|
38
41
|
if (tracker.active && tracker.factory === factory) {
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
void maybeViewTransition(props.viewTransition, () => {
|
|
43
|
+
setError(undefined)
|
|
44
|
+
setComponent(loaded)
|
|
45
|
+
})
|
|
41
46
|
}
|
|
42
47
|
})
|
|
43
48
|
.catch((err: unknown) => {
|
|
@@ -60,7 +65,9 @@ export const LazyLoad = Shade<LazyLoadProps>({
|
|
|
60
65
|
setComponent(undefined)
|
|
61
66
|
const loaded = await factory()
|
|
62
67
|
if (tracker.active && tracker.factory === factory) {
|
|
63
|
-
|
|
68
|
+
void maybeViewTransition(props.viewTransition, () => {
|
|
69
|
+
setComponent(loaded)
|
|
70
|
+
})
|
|
64
71
|
}
|
|
65
72
|
} catch (e) {
|
|
66
73
|
if (tracker.active && tracker.factory === factory) {
|