@furystack/shades 11.1.0 → 12.0.1
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 +312 -0
- package/README.md +13 -13
- package/esm/component-factory.spec.js +13 -5
- package/esm/component-factory.spec.js.map +1 -1
- package/esm/components/index.d.ts +4 -1
- package/esm/components/index.d.ts.map +1 -1
- package/esm/components/index.js +4 -1
- package/esm/components/index.js.map +1 -1
- package/esm/components/lazy-load.d.ts +2 -4
- package/esm/components/lazy-load.d.ts.map +1 -1
- package/esm/components/lazy-load.js +40 -24
- package/esm/components/lazy-load.js.map +1 -1
- package/esm/components/lazy-load.spec.js +57 -50
- package/esm/components/lazy-load.spec.js.map +1 -1
- package/esm/components/link-to-route.d.ts +2 -0
- package/esm/components/link-to-route.d.ts.map +1 -1
- package/esm/components/link-to-route.js +3 -2
- package/esm/components/link-to-route.js.map +1 -1
- package/esm/components/link-to-route.spec.js +13 -9
- package/esm/components/link-to-route.spec.js.map +1 -1
- package/esm/components/nested-route-link.d.ts +62 -0
- package/esm/components/nested-route-link.d.ts.map +1 -0
- package/esm/components/nested-route-link.js +66 -0
- package/esm/components/nested-route-link.js.map +1 -0
- package/esm/components/nested-route-link.spec.d.ts +2 -0
- package/esm/components/nested-route-link.spec.d.ts.map +1 -0
- package/esm/components/nested-route-link.spec.js +179 -0
- package/esm/components/nested-route-link.spec.js.map +1 -0
- package/esm/components/nested-route-types.d.ts +37 -0
- package/esm/components/nested-route-types.d.ts.map +1 -0
- package/esm/components/nested-route-types.js +2 -0
- package/esm/components/nested-route-types.js.map +1 -0
- package/esm/components/nested-router.d.ts +103 -0
- package/esm/components/nested-router.d.ts.map +1 -0
- package/esm/components/nested-router.js +183 -0
- package/esm/components/nested-router.js.map +1 -0
- package/esm/components/nested-router.spec.d.ts +2 -0
- package/esm/components/nested-router.spec.d.ts.map +1 -0
- package/esm/components/nested-router.spec.js +737 -0
- package/esm/components/nested-router.spec.js.map +1 -0
- package/esm/components/route-link.d.ts +4 -0
- package/esm/components/route-link.d.ts.map +1 -1
- package/esm/components/route-link.js +5 -5
- package/esm/components/route-link.js.map +1 -1
- package/esm/components/route-link.spec.js +16 -12
- package/esm/components/route-link.spec.js.map +1 -1
- package/esm/components/router.d.ts +20 -2
- package/esm/components/router.d.ts.map +1 -1
- package/esm/components/router.js +12 -7
- package/esm/components/router.js.map +1 -1
- package/esm/components/router.spec.js +141 -74
- package/esm/components/router.spec.js.map +1 -1
- package/esm/initialize.d.ts +11 -0
- package/esm/initialize.d.ts.map +1 -1
- package/esm/initialize.js +5 -0
- package/esm/initialize.js.map +1 -1
- package/esm/jsx.d.ts +83 -2
- package/esm/jsx.d.ts.map +1 -1
- package/esm/models/children-list.d.ts +5 -1
- package/esm/models/children-list.d.ts.map +1 -1
- package/esm/models/partial-element.d.ts +12 -2
- package/esm/models/partial-element.d.ts.map +1 -1
- package/esm/models/render-options.d.ts +89 -3
- package/esm/models/render-options.d.ts.map +1 -1
- package/esm/models/selection-state.d.ts +4 -0
- package/esm/models/selection-state.d.ts.map +1 -1
- package/esm/services/location-service.d.ts +11 -0
- package/esm/services/location-service.d.ts.map +1 -1
- package/esm/services/location-service.js +11 -0
- package/esm/services/location-service.js.map +1 -1
- package/esm/services/resource-manager.d.ts +24 -0
- package/esm/services/resource-manager.d.ts.map +1 -1
- package/esm/services/resource-manager.js +36 -1
- package/esm/services/resource-manager.js.map +1 -1
- package/esm/services/resource-manager.spec.js +102 -0
- package/esm/services/resource-manager.spec.js.map +1 -1
- package/esm/services/screen-service.d.ts +81 -4
- package/esm/services/screen-service.d.ts.map +1 -1
- package/esm/services/screen-service.js +75 -4
- package/esm/services/screen-service.js.map +1 -1
- package/esm/services/screen-service.spec.js +91 -7
- package/esm/services/screen-service.spec.js.map +1 -1
- package/esm/shade-component.d.ts +17 -4
- package/esm/shade-component.d.ts.map +1 -1
- package/esm/shade-component.js +67 -5
- package/esm/shade-component.js.map +1 -1
- package/esm/shade-host-props-ref.integration.spec.d.ts +2 -0
- package/esm/shade-host-props-ref.integration.spec.d.ts.map +1 -0
- package/esm/shade-host-props-ref.integration.spec.js +381 -0
- package/esm/shade-host-props-ref.integration.spec.js.map +1 -0
- package/esm/shade-resources.integration.spec.js +208 -39
- package/esm/shade-resources.integration.spec.js.map +1 -1
- package/esm/shade.d.ts +20 -17
- package/esm/shade.d.ts.map +1 -1
- package/esm/shade.js +172 -33
- package/esm/shade.js.map +1 -1
- package/esm/shade.spec.js +31 -30
- package/esm/shade.spec.js.map +1 -1
- package/esm/shades.integration.spec.js +135 -72
- package/esm/shades.integration.spec.js.map +1 -1
- package/esm/style-manager.d.ts +2 -2
- package/esm/style-manager.js +2 -2
- package/esm/svg-types.d.ts +389 -0
- package/esm/svg-types.d.ts.map +1 -0
- package/esm/svg-types.js +9 -0
- package/esm/svg-types.js.map +1 -0
- package/esm/svg.d.ts +15 -0
- package/esm/svg.d.ts.map +1 -0
- package/esm/svg.js +76 -0
- package/esm/svg.js.map +1 -0
- package/esm/svg.spec.d.ts +2 -0
- package/esm/svg.spec.d.ts.map +1 -0
- package/esm/svg.spec.js +80 -0
- package/esm/svg.spec.js.map +1 -0
- package/esm/vnode.d.ts +103 -0
- package/esm/vnode.d.ts.map +1 -0
- package/esm/vnode.integration.spec.d.ts +2 -0
- package/esm/vnode.integration.spec.d.ts.map +1 -0
- package/esm/vnode.integration.spec.js +494 -0
- package/esm/vnode.integration.spec.js.map +1 -0
- package/esm/vnode.js +453 -0
- package/esm/vnode.js.map +1 -0
- package/esm/vnode.spec.d.ts +2 -0
- package/esm/vnode.spec.d.ts.map +1 -0
- package/esm/vnode.spec.js +473 -0
- package/esm/vnode.spec.js.map +1 -0
- package/package.json +8 -9
- package/src/component-factory.spec.tsx +18 -5
- package/src/components/index.ts +4 -1
- package/src/components/lazy-load.spec.tsx +82 -75
- package/src/components/lazy-load.tsx +49 -27
- package/src/components/link-to-route.spec.tsx +25 -21
- package/src/components/link-to-route.tsx +4 -2
- package/src/components/nested-route-link.spec.tsx +303 -0
- package/src/components/nested-route-link.tsx +100 -0
- package/src/components/nested-route-types.ts +42 -0
- package/src/components/nested-router.spec.tsx +918 -0
- package/src/components/nested-router.tsx +260 -0
- package/src/components/route-link.spec.tsx +22 -18
- package/src/components/route-link.tsx +6 -5
- package/src/components/router.spec.tsx +196 -108
- package/src/components/router.tsx +21 -8
- package/src/initialize.ts +12 -0
- package/src/jsx.ts +129 -2
- package/src/models/children-list.ts +7 -1
- package/src/models/partial-element.ts +13 -2
- package/src/models/render-options.ts +90 -3
- package/src/models/selection-state.ts +4 -0
- package/src/services/location-service.tsx +11 -0
- package/src/services/resource-manager.spec.ts +128 -0
- package/src/services/resource-manager.ts +36 -1
- package/src/services/screen-service.spec.ts +109 -7
- package/src/services/screen-service.ts +81 -4
- package/src/shade-component.ts +72 -6
- package/src/shade-host-props-ref.integration.spec.tsx +460 -0
- package/src/shade-resources.integration.spec.tsx +276 -52
- package/src/shade.spec.tsx +40 -39
- package/src/shade.ts +186 -58
- package/src/shades.integration.spec.tsx +154 -80
- package/src/style-manager.ts +2 -2
- package/src/svg-types.ts +437 -0
- package/src/svg.spec.ts +89 -0
- package/src/svg.ts +78 -0
- package/src/vnode.integration.spec.tsx +657 -0
- package/src/vnode.spec.ts +579 -0
- package/src/vnode.ts +508 -0
|
@@ -15,6 +15,99 @@ describe('ResourceManager', () => {
|
|
|
15
15
|
expect(o.getObservers().length).toBe(1);
|
|
16
16
|
});
|
|
17
17
|
});
|
|
18
|
+
it('Should switch to a new observable when a different reference is passed for the same key', async () => {
|
|
19
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
20
|
+
const o1 = new ObservableValue(1);
|
|
21
|
+
const o2 = new ObservableValue(42);
|
|
22
|
+
const onChange = vi.fn();
|
|
23
|
+
const [value1] = rm.useObservable('test', o1, onChange);
|
|
24
|
+
expect(value1).toBe(1);
|
|
25
|
+
expect(o1.getObservers().length).toBe(1);
|
|
26
|
+
const [value2] = rm.useObservable('test', o2, onChange);
|
|
27
|
+
expect(value2).toBe(42);
|
|
28
|
+
expect(o1.getObservers().length).toBe(0);
|
|
29
|
+
expect(o2.getObservers().length).toBe(1);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
it('Should subscribe with the new onChange callback when switching observables', async () => {
|
|
33
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
34
|
+
const o1 = new ObservableValue('a');
|
|
35
|
+
const o2 = new ObservableValue('x');
|
|
36
|
+
const onChange1 = vi.fn();
|
|
37
|
+
const onChange2 = vi.fn();
|
|
38
|
+
rm.useObservable('test', o1, onChange1);
|
|
39
|
+
rm.useObservable('test', o2, onChange2);
|
|
40
|
+
o2.setValue('y');
|
|
41
|
+
expect(onChange2).toHaveBeenCalledWith('y');
|
|
42
|
+
expect(onChange1).not.toHaveBeenCalled();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
it('Should not re-subscribe when the same observable reference is passed', async () => {
|
|
46
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
47
|
+
const o = new ObservableValue(1);
|
|
48
|
+
const onChange = vi.fn();
|
|
49
|
+
rm.useObservable('test', o, onChange);
|
|
50
|
+
rm.useObservable('test', o, onChange);
|
|
51
|
+
rm.useObservable('test', o, onChange);
|
|
52
|
+
expect(o.getObservers().length).toBe(1);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it('Should return a setValue bound to the new observable after switching', async () => {
|
|
56
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
57
|
+
const o1 = new ObservableValue(1);
|
|
58
|
+
const o2 = new ObservableValue(10);
|
|
59
|
+
const onChange = vi.fn();
|
|
60
|
+
const [, setValue1] = rm.useObservable('test', o1, onChange);
|
|
61
|
+
setValue1(5);
|
|
62
|
+
expect(o1.getValue()).toBe(5);
|
|
63
|
+
const [, setValue2] = rm.useObservable('test', o2, onChange);
|
|
64
|
+
setValue2(99);
|
|
65
|
+
expect(o2.getValue()).toBe(99);
|
|
66
|
+
expect(o1.getValue()).toBe(5);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
it('Should handle multiple sequential observable switches for the same key', async () => {
|
|
70
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
71
|
+
const o1 = new ObservableValue('a');
|
|
72
|
+
const o2 = new ObservableValue('b');
|
|
73
|
+
const o3 = new ObservableValue('c');
|
|
74
|
+
const onChange = vi.fn();
|
|
75
|
+
const [v1] = rm.useObservable('test', o1, onChange);
|
|
76
|
+
expect(v1).toBe('a');
|
|
77
|
+
const [v2] = rm.useObservable('test', o2, onChange);
|
|
78
|
+
expect(v2).toBe('b');
|
|
79
|
+
expect(o1.getObservers().length).toBe(0);
|
|
80
|
+
const [v3] = rm.useObservable('test', o3, onChange);
|
|
81
|
+
expect(v3).toBe('c');
|
|
82
|
+
expect(o2.getObservers().length).toBe(0);
|
|
83
|
+
expect(o3.getObservers().length).toBe(1);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it('Should not trigger callbacks on the old observable after switching', async () => {
|
|
87
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
88
|
+
const o1 = new ObservableValue(1);
|
|
89
|
+
const o2 = new ObservableValue(2);
|
|
90
|
+
const onChange = vi.fn();
|
|
91
|
+
rm.useObservable('test', o1, onChange);
|
|
92
|
+
rm.useObservable('test', o2, onChange);
|
|
93
|
+
onChange.mockClear();
|
|
94
|
+
o1.setValue(999);
|
|
95
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
96
|
+
o2.setValue(100);
|
|
97
|
+
expect(onChange).toHaveBeenCalledWith(100);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('Should clean up switched observers on dispose', async () => {
|
|
101
|
+
const o1 = new ObservableValue(1);
|
|
102
|
+
const o2 = new ObservableValue(2);
|
|
103
|
+
const onChange = vi.fn();
|
|
104
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
105
|
+
rm.useObservable('test', o1, onChange);
|
|
106
|
+
rm.useObservable('test', o2, onChange);
|
|
107
|
+
expect(o2.getObservers().length).toBe(1);
|
|
108
|
+
});
|
|
109
|
+
expect(o2.getObservers().length).toBe(0);
|
|
110
|
+
});
|
|
18
111
|
it('Should return a disposable from cache', async () => {
|
|
19
112
|
await usingAsync(new ResourceManager(), async (rm) => {
|
|
20
113
|
const factory = vi.fn(() => ({
|
|
@@ -63,6 +156,15 @@ describe('ResourceManager', () => {
|
|
|
63
156
|
})).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: There was an error during disposing 1 stores: Error: Failed to dispose]`);
|
|
64
157
|
expect(disposable[Symbol.dispose]).toHaveBeenCalledTimes(1);
|
|
65
158
|
});
|
|
159
|
+
it('Should silently ignore useState setter calls after disposal', async () => {
|
|
160
|
+
let setValueFn;
|
|
161
|
+
await usingAsync(new ResourceManager(), async (rm) => {
|
|
162
|
+
const [, setValue] = rm.useState('count', 0, vi.fn());
|
|
163
|
+
setValueFn = setValue;
|
|
164
|
+
});
|
|
165
|
+
// After disposal, calling the setter should not throw
|
|
166
|
+
expect(() => setValueFn(42)).not.toThrow();
|
|
167
|
+
});
|
|
66
168
|
it('Should throw an aggregated error when failed to async dispose something', async () => {
|
|
67
169
|
const disposable = {
|
|
68
170
|
[Symbol.asyncDispose]: vi.fn(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-manager.spec.js","sourceRoot":"","sources":["../../src/services/resource-manager.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,94 @@
|
|
|
1
1
|
import { ObservableValue } from '@furystack/utils';
|
|
2
|
+
/**
|
|
3
|
+
* Available screen size breakpoint identifiers, ordered from smallest to largest.
|
|
4
|
+
*/
|
|
2
5
|
export declare const ScreenSizes: readonly ["xs", "sm", "md", "lg", "xl"];
|
|
6
|
+
/**
|
|
7
|
+
* A screen size breakpoint identifier.
|
|
8
|
+
*/
|
|
3
9
|
export type ScreenSize = (typeof ScreenSizes)[number];
|
|
10
|
+
/**
|
|
11
|
+
* Breakpoint definition with name and size constraints.
|
|
12
|
+
*/
|
|
4
13
|
export type Breakpoint = {
|
|
5
14
|
name: ScreenSize;
|
|
6
15
|
minSize: number;
|
|
7
16
|
maxSize?: number;
|
|
8
17
|
};
|
|
9
18
|
/**
|
|
10
|
-
* Service for
|
|
19
|
+
* Service for detecting and subscribing to screen size and orientation changes.
|
|
20
|
+
*
|
|
21
|
+
* This service provides reactive observables for responsive design decisions.
|
|
22
|
+
* Use `screenSize.atLeast[size]` to check if the viewport is at least a certain size.
|
|
23
|
+
*
|
|
24
|
+
* **Breakpoint Thresholds:**
|
|
25
|
+
* - `xs`: 0px+ (all sizes)
|
|
26
|
+
* - `sm`: 600px+ (small tablets and up)
|
|
27
|
+
* - `md`: 960px+ (tablets and up)
|
|
28
|
+
* - `lg`: 1280px+ (desktops and up)
|
|
29
|
+
* - `xl`: 1920px+ (large desktops)
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const screenService = injector.getInstance(ScreenService);
|
|
34
|
+
*
|
|
35
|
+
* // Check if screen is at least medium size
|
|
36
|
+
* if (screenService.screenSize.atLeast.md.getValue()) {
|
|
37
|
+
* // Show desktop layout
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // Subscribe to size changes for responsive behavior
|
|
41
|
+
* screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
|
|
42
|
+
* if (isAtLeastMd) {
|
|
43
|
+
* console.log('Desktop or tablet view');
|
|
44
|
+
* } else {
|
|
45
|
+
* console.log('Mobile view');
|
|
46
|
+
* }
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* // Get current breakpoint by checking from largest to smallest
|
|
50
|
+
* const getCurrentBreakpoint = (): ScreenSize => {
|
|
51
|
+
* if (screenService.screenSize.atLeast.xl.getValue()) return 'xl';
|
|
52
|
+
* if (screenService.screenSize.atLeast.lg.getValue()) return 'lg';
|
|
53
|
+
* if (screenService.screenSize.atLeast.md.getValue()) return 'md';
|
|
54
|
+
* if (screenService.screenSize.atLeast.sm.getValue()) return 'sm';
|
|
55
|
+
* return 'xs';
|
|
56
|
+
* };
|
|
57
|
+
*
|
|
58
|
+
* // Subscribe to orientation changes
|
|
59
|
+
* screenService.orientation.subscribe((orientation) => {
|
|
60
|
+
* console.log(`Screen is now in ${orientation} mode`);
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
11
63
|
*/
|
|
12
64
|
export declare class ScreenService implements Disposable {
|
|
13
65
|
private getOrientation;
|
|
14
66
|
/**
|
|
15
|
-
* The definitions of the
|
|
67
|
+
* The definitions of the breakpoint thresholds in pixels.
|
|
68
|
+
* Each breakpoint represents the minimum width for that size category.
|
|
16
69
|
*/
|
|
17
70
|
readonly breakpoints: {
|
|
18
71
|
[K in ScreenSize]: {
|
|
19
72
|
minSize: number;
|
|
20
73
|
};
|
|
21
74
|
};
|
|
75
|
+
/**
|
|
76
|
+
* Cleans up event listeners when the service is disposed.
|
|
77
|
+
*/
|
|
22
78
|
[Symbol.dispose](): void;
|
|
23
79
|
/**
|
|
24
|
-
*
|
|
80
|
+
* Observable values for checking if the screen is at least a certain size.
|
|
81
|
+
*
|
|
82
|
+
* Each observable emits `true` when the viewport width is >= the breakpoint threshold,
|
|
83
|
+
* and `false` otherwise. Values update automatically on window resize.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Hide sidebar on small screens
|
|
88
|
+
* screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
|
|
89
|
+
* sidebarVisible.setValue(isAtLeastMd);
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
25
92
|
*/
|
|
26
93
|
readonly screenSize: {
|
|
27
94
|
atLeast: {
|
|
@@ -30,7 +97,17 @@ export declare class ScreenService implements Disposable {
|
|
|
30
97
|
};
|
|
31
98
|
private screenSizeAtLeast;
|
|
32
99
|
/**
|
|
33
|
-
* Observable value for tracking the screen orientation
|
|
100
|
+
* Observable value for tracking the screen orientation.
|
|
101
|
+
* Emits 'landscape' or 'portrait' based on the current viewport dimensions.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* screenService.orientation.subscribe((orientation) => {
|
|
106
|
+
* if (orientation === 'landscape') {
|
|
107
|
+
* // Adjust layout for landscape mode
|
|
108
|
+
* }
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
34
111
|
*/
|
|
35
112
|
orientation: ObservableValue<"landscape" | "portrait">;
|
|
36
113
|
private onResizeListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF
|
|
1
|
+
{"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,cAAc,CAA2F;IAEjH;;;OAGG;IACH,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;IAIvB;;;;;;;;;;;;;OAaG;IACH,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIzB;;;;;;;;;;;;OAYG;IACI,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
|
|
@@ -9,14 +9,61 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@furystack/inject';
|
|
11
11
|
import { ObservableValue } from '@furystack/utils';
|
|
12
|
+
/**
|
|
13
|
+
* Available screen size breakpoint identifiers, ordered from smallest to largest.
|
|
14
|
+
*/
|
|
12
15
|
export const ScreenSizes = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
13
16
|
/**
|
|
14
|
-
* Service for
|
|
17
|
+
* Service for detecting and subscribing to screen size and orientation changes.
|
|
18
|
+
*
|
|
19
|
+
* This service provides reactive observables for responsive design decisions.
|
|
20
|
+
* Use `screenSize.atLeast[size]` to check if the viewport is at least a certain size.
|
|
21
|
+
*
|
|
22
|
+
* **Breakpoint Thresholds:**
|
|
23
|
+
* - `xs`: 0px+ (all sizes)
|
|
24
|
+
* - `sm`: 600px+ (small tablets and up)
|
|
25
|
+
* - `md`: 960px+ (tablets and up)
|
|
26
|
+
* - `lg`: 1280px+ (desktops and up)
|
|
27
|
+
* - `xl`: 1920px+ (large desktops)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const screenService = injector.getInstance(ScreenService);
|
|
32
|
+
*
|
|
33
|
+
* // Check if screen is at least medium size
|
|
34
|
+
* if (screenService.screenSize.atLeast.md.getValue()) {
|
|
35
|
+
* // Show desktop layout
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* // Subscribe to size changes for responsive behavior
|
|
39
|
+
* screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
|
|
40
|
+
* if (isAtLeastMd) {
|
|
41
|
+
* console.log('Desktop or tablet view');
|
|
42
|
+
* } else {
|
|
43
|
+
* console.log('Mobile view');
|
|
44
|
+
* }
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* // Get current breakpoint by checking from largest to smallest
|
|
48
|
+
* const getCurrentBreakpoint = (): ScreenSize => {
|
|
49
|
+
* if (screenService.screenSize.atLeast.xl.getValue()) return 'xl';
|
|
50
|
+
* if (screenService.screenSize.atLeast.lg.getValue()) return 'lg';
|
|
51
|
+
* if (screenService.screenSize.atLeast.md.getValue()) return 'md';
|
|
52
|
+
* if (screenService.screenSize.atLeast.sm.getValue()) return 'sm';
|
|
53
|
+
* return 'xs';
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* // Subscribe to orientation changes
|
|
57
|
+
* screenService.orientation.subscribe((orientation) => {
|
|
58
|
+
* console.log(`Screen is now in ${orientation} mode`);
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
15
61
|
*/
|
|
16
62
|
let ScreenService = class ScreenService {
|
|
17
63
|
getOrientation = () => (window.matchMedia?.('(orientation:landscape').matches ? 'landscape' : 'portrait');
|
|
18
64
|
/**
|
|
19
|
-
* The definitions of the
|
|
65
|
+
* The definitions of the breakpoint thresholds in pixels.
|
|
66
|
+
* Each breakpoint represents the minimum width for that size category.
|
|
20
67
|
*/
|
|
21
68
|
breakpoints = {
|
|
22
69
|
xl: { minSize: 1920 },
|
|
@@ -25,11 +72,25 @@ let ScreenService = class ScreenService {
|
|
|
25
72
|
sm: { minSize: 600 },
|
|
26
73
|
xs: { minSize: 0 },
|
|
27
74
|
};
|
|
75
|
+
/**
|
|
76
|
+
* Cleans up event listeners when the service is disposed.
|
|
77
|
+
*/
|
|
28
78
|
[Symbol.dispose]() {
|
|
29
79
|
window.removeEventListener('resize', this.onResizeListener);
|
|
30
80
|
}
|
|
31
81
|
/**
|
|
32
|
-
*
|
|
82
|
+
* Observable values for checking if the screen is at least a certain size.
|
|
83
|
+
*
|
|
84
|
+
* Each observable emits `true` when the viewport width is >= the breakpoint threshold,
|
|
85
|
+
* and `false` otherwise. Values update automatically on window resize.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* // Hide sidebar on small screens
|
|
90
|
+
* screenService.screenSize.atLeast.md.subscribe((isAtLeastMd) => {
|
|
91
|
+
* sidebarVisible.setValue(isAtLeastMd);
|
|
92
|
+
* });
|
|
93
|
+
* ```
|
|
33
94
|
*/
|
|
34
95
|
screenSize = {
|
|
35
96
|
atLeast: {
|
|
@@ -44,7 +105,17 @@ let ScreenService = class ScreenService {
|
|
|
44
105
|
return window.innerWidth >= this.breakpoints[size].minSize;
|
|
45
106
|
}
|
|
46
107
|
/**
|
|
47
|
-
* Observable value for tracking the screen orientation
|
|
108
|
+
* Observable value for tracking the screen orientation.
|
|
109
|
+
* Emits 'landscape' or 'portrait' based on the current viewport dimensions.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* screenService.orientation.subscribe((orientation) => {
|
|
114
|
+
* if (orientation === 'landscape') {
|
|
115
|
+
* // Adjust layout for landscape mode
|
|
116
|
+
* }
|
|
117
|
+
* });
|
|
118
|
+
* ```
|
|
48
119
|
*/
|
|
49
120
|
orientation = new ObservableValue(this.getOrientation());
|
|
50
121
|
onResizeListener = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAYlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAa;IAChB,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAEjH;;;OAGG;IACa,WAAW,GAA+C;QACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;QACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;KACnB,CAAA;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;;;;;;;;;OAaG;IACa,UAAU,GAEtB;QACF,OAAO,EAAE;YACP,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9D,EAAE,EAAE,IAAI,eAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SAC/D;KACF,CAAA;IAEO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,WAAW,GAAG,IAAI,eAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;IAEjF,gBAAgB,GAAG,GAAG,EAAE;QAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAA;IAEO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;QACE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;CACF,CAAA;AAlFY,aAAa;IADzB,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,aAAa,CAkFzB"}
|
|
@@ -1,24 +1,108 @@
|
|
|
1
1
|
import { Injector } from '@furystack/inject';
|
|
2
2
|
import { usingAsync } from '@furystack/utils';
|
|
3
|
-
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
4
|
-
import { ScreenService } from './screen-service.js';
|
|
3
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
+
import { ScreenService, ScreenSizes } from './screen-service.js';
|
|
5
5
|
describe('ScreenService', () => {
|
|
6
6
|
beforeEach(() => {
|
|
7
7
|
document.body.innerHTML = '<div id="root"></div>';
|
|
8
8
|
});
|
|
9
9
|
afterEach(() => {
|
|
10
10
|
document.body.innerHTML = '';
|
|
11
|
+
vi.restoreAllMocks();
|
|
11
12
|
});
|
|
12
|
-
it('
|
|
13
|
+
it('Should be constructed', async () => {
|
|
13
14
|
await usingAsync(new Injector(), async (i) => {
|
|
14
15
|
const s = i.getInstance(ScreenService);
|
|
15
16
|
expect(s).toBeInstanceOf(ScreenService);
|
|
16
17
|
});
|
|
17
18
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
describe('breakpoints', () => {
|
|
20
|
+
it('Should have correct breakpoint definitions', async () => {
|
|
21
|
+
await usingAsync(new Injector(), async (i) => {
|
|
22
|
+
const s = i.getInstance(ScreenService);
|
|
23
|
+
expect(s.breakpoints.xs.minSize).toBe(0);
|
|
24
|
+
expect(s.breakpoints.sm.minSize).toBe(600);
|
|
25
|
+
expect(s.breakpoints.md.minSize).toBe(960);
|
|
26
|
+
expect(s.breakpoints.lg.minSize).toBe(1280);
|
|
27
|
+
expect(s.breakpoints.xl.minSize).toBe(1920);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('screenSize.atLeast', () => {
|
|
32
|
+
it('Should have observable for each screen size', async () => {
|
|
33
|
+
await usingAsync(new Injector(), async (i) => {
|
|
34
|
+
const s = i.getInstance(ScreenService);
|
|
35
|
+
for (const size of ScreenSizes) {
|
|
36
|
+
expect(s.screenSize.atLeast[size]).toBeDefined();
|
|
37
|
+
expect(typeof s.screenSize.atLeast[size].getValue()).toBe('boolean');
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
it('Should return true for xs on any screen size', async () => {
|
|
42
|
+
await usingAsync(new Injector(), async (i) => {
|
|
43
|
+
const s = i.getInstance(ScreenService);
|
|
44
|
+
// xs has minSize 0, so it should always be true
|
|
45
|
+
expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
it('Should update screenSize observables on window resize', async () => {
|
|
49
|
+
await usingAsync(new Injector(), async (i) => {
|
|
50
|
+
const s = i.getInstance(ScreenService);
|
|
51
|
+
// Mock window.innerWidth to simulate a large screen
|
|
52
|
+
vi.spyOn(window, 'innerWidth', 'get').mockReturnValue(1920);
|
|
53
|
+
// Trigger resize event
|
|
54
|
+
window.dispatchEvent(new Event('resize'));
|
|
55
|
+
// All breakpoints should be true for 1920px width
|
|
56
|
+
expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
|
|
57
|
+
expect(s.screenSize.atLeast.sm.getValue()).toBe(true);
|
|
58
|
+
expect(s.screenSize.atLeast.md.getValue()).toBe(true);
|
|
59
|
+
expect(s.screenSize.atLeast.lg.getValue()).toBe(true);
|
|
60
|
+
expect(s.screenSize.atLeast.xl.getValue()).toBe(true);
|
|
61
|
+
// Mock a small screen
|
|
62
|
+
vi.spyOn(window, 'innerWidth', 'get').mockReturnValue(500);
|
|
63
|
+
window.dispatchEvent(new Event('resize'));
|
|
64
|
+
// Only xs should be true for 500px width
|
|
65
|
+
expect(s.screenSize.atLeast.xs.getValue()).toBe(true);
|
|
66
|
+
expect(s.screenSize.atLeast.sm.getValue()).toBe(false);
|
|
67
|
+
expect(s.screenSize.atLeast.md.getValue()).toBe(false);
|
|
68
|
+
expect(s.screenSize.atLeast.lg.getValue()).toBe(false);
|
|
69
|
+
expect(s.screenSize.atLeast.xl.getValue()).toBe(false);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('orientation', () => {
|
|
74
|
+
it('Should have an orientation observable', async () => {
|
|
75
|
+
await usingAsync(new Injector(), async (i) => {
|
|
76
|
+
const s = i.getInstance(ScreenService);
|
|
77
|
+
const orientation = s.orientation.getValue();
|
|
78
|
+
expect(['landscape', 'portrait']).toContain(orientation);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
it('Should update orientation on resize', async () => {
|
|
82
|
+
// Mock matchMedia before creating the service
|
|
83
|
+
const matchMediaMock = vi.fn();
|
|
84
|
+
window.matchMedia = matchMediaMock;
|
|
85
|
+
await usingAsync(new Injector(), async (i) => {
|
|
86
|
+
// Set initial orientation to landscape
|
|
87
|
+
matchMediaMock.mockReturnValue({ matches: true });
|
|
88
|
+
const s = i.getInstance(ScreenService);
|
|
89
|
+
// Verify initial landscape
|
|
90
|
+
window.dispatchEvent(new Event('resize'));
|
|
91
|
+
expect(s.orientation.getValue()).toBe('landscape');
|
|
92
|
+
// Change to portrait
|
|
93
|
+
matchMediaMock.mockReturnValue({ matches: false });
|
|
94
|
+
window.dispatchEvent(new Event('resize'));
|
|
95
|
+
expect(s.orientation.getValue()).toBe('portrait');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('disposal', () => {
|
|
100
|
+
it('Should remove resize event listener on dispose', async () => {
|
|
101
|
+
const removeEventListenerSpy = vi.spyOn(window, 'removeEventListener');
|
|
102
|
+
await usingAsync(new Injector(), async (i) => {
|
|
103
|
+
i.getInstance(ScreenService);
|
|
104
|
+
});
|
|
105
|
+
expect(removeEventListenerSpy).toHaveBeenCalledWith('resize', expect.any(Function));
|
|
22
106
|
});
|
|
23
107
|
});
|
|
24
108
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEhE,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QAC5B,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3C,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC7C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;oBAChD,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;gBACtE,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBACtC,gDAAgD;gBAChD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,oDAAoD;gBACpD,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;gBAE3D,uBAAuB;gBACvB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAEzC,kDAAkD;gBAClD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAErD,sBAAsB;gBACtB,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;gBAC1D,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAEzC,yCAAyC;gBACzC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtD,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACxD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBACtC,MAAM,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;gBAC5C,MAAM,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,8CAA8C;YAC9C,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YAC9B,MAAM,CAAC,UAAU,GAAG,cAAc,CAAA;YAElC,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,uCAAuC;gBACvC,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAoB,CAAC,CAAA;gBACnE,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;gBAEtC,2BAA2B;gBAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAElD,qBAAqB;gBACrB,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAoB,CAAC,CAAA;gBACpE,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,sBAAsB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;YAEtE,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC3C,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAA;YAC9B,CAAC,CAAC,CAAA;YAEF,MAAM,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/esm/shade-component.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { ChildrenList, ShadeComponent } from './models/index.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* When true, the JSX factory produces VNode descriptors instead of real DOM elements.
|
|
4
|
+
* Set to true by `_performUpdate` before calling `render()`, then back to false after.
|
|
5
|
+
*/
|
|
6
|
+
export declare const setRenderMode: (mode: boolean) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Appends a list of items to an element
|
|
4
9
|
* @param el the root element
|
|
5
10
|
* @param children array of items to append
|
|
6
11
|
*/
|
|
7
|
-
export declare const appendChild: (el:
|
|
12
|
+
export declare const appendChild: (el: Element | DocumentFragment, children: ChildrenList) => void;
|
|
8
13
|
export declare const hasStyle: (props: unknown) => props is {
|
|
9
14
|
style: Partial<CSSStyleDeclaration>;
|
|
10
15
|
};
|
|
@@ -20,6 +25,14 @@ export declare const attachDataAttributes: <TProps extends object>(el: HTMLEleme
|
|
|
20
25
|
* @param props The Props to attach
|
|
21
26
|
*/
|
|
22
27
|
export declare const attachProps: <TProps extends object>(el: HTMLElement, props: TProps) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Attaches properties to an SVG element via setAttribute.
|
|
30
|
+
* SVG attributes are XML-based and must be set via setAttribute,
|
|
31
|
+
* not via property assignment like HTML elements.
|
|
32
|
+
* @param el The target SVG element
|
|
33
|
+
* @param props The props to attach
|
|
34
|
+
*/
|
|
35
|
+
export declare const attachSvgProps: <TProps extends object>(el: Element, props: TProps) => void;
|
|
23
36
|
type CreateComponentArgs<TProps> = [
|
|
24
37
|
elementType: string | ShadeComponent<TProps>,
|
|
25
38
|
props: TProps,
|
|
@@ -29,9 +42,9 @@ type CreateComponentArgs<TProps> = [
|
|
|
29
42
|
* Factory method that creates a component. This should be configured as a default JSX Factory in tsconfig.
|
|
30
43
|
* @returns the created JSX element
|
|
31
44
|
*/
|
|
32
|
-
export declare const createComponentInner: <TProps extends object>(...[elementType, props, ...children]: CreateComponentArgs<TProps>) => HTMLElement | undefined;
|
|
45
|
+
export declare const createComponentInner: <TProps extends object>(...[elementType, props, ...children]: CreateComponentArgs<TProps>) => HTMLElement | SVGElement | undefined;
|
|
33
46
|
type CreateFragmentArgs = [props: null, ...children: ChildrenList];
|
|
34
47
|
export declare const createFragmentInner: (...[_props, ...children]: CreateFragmentArgs) => DocumentFragment;
|
|
35
|
-
export declare const createComponent: <TProps extends object>(...args: CreateComponentArgs<TProps> | CreateFragmentArgs) => HTMLElement | DocumentFragment | undefined;
|
|
48
|
+
export declare const createComponent: <TProps extends object>(...args: CreateComponentArgs<TProps> | CreateFragmentArgs) => HTMLElement | SVGElement | DocumentFragment | undefined;
|
|
36
49
|
export {};
|
|
37
50
|
//# sourceMappingURL=shade-component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAWrE;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,KAAG,IAE7C,CAAA;AAMD;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,IAAI,OAAO,GAAG,gBAAgB,EAAE,UAAU,YAAY,SAYjF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI;IAAE,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CAIvF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,IAAI,WAAW,EAAE,OAAO,OAAO,SAS3D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAMzF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,WAAW,EAAE,OAAO,MAAM,SAahF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,MAAM,EAAE,IAAI,OAAO,EAAE,OAAO,MAAM,SAiB/E,CAAA;AAED,KAAK,mBAAmB,CAAC,MAAM,IAAI;IACjC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,MAAM;IACb,GAAG,QAAQ,EAAE,YAAY;CAC1B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,MAAM,EACxD,GAAG,mCAAmC,mBAAmB,CAAC,MAAM,CAAC,yCAsBlE,CAAA;AAED,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAA;AAElE,eAAO,MAAM,mBAAmB,GAAI,GAAG,uBAAuB,kBAAkB,qBAI/E,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,kBAAkB,4DAoB/G,CAAA"}
|