piral-core 0.15.0-beta.4633 → 0.15.0-beta.4672
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/app.codegen +6 -135
- package/esm/components/ForeignComponentContainer.js +1 -1
- package/esm/components/ForeignComponentContainer.js.map +1 -1
- package/esm/defaults/navigator_v5.d.ts +6 -0
- package/esm/defaults/navigator_v5.js +77 -0
- package/esm/defaults/navigator_v5.js.map +1 -0
- package/esm/defaults/navigator_v6.d.ts +6 -0
- package/esm/defaults/navigator_v6.js +73 -0
- package/esm/defaults/navigator_v6.js.map +1 -0
- package/esm/modules/element.js +46 -2
- package/esm/modules/element.js.map +1 -1
- package/esm/types/navigation.d.ts +6 -2
- package/esm/utils/extension.d.ts +1 -1
- package/esm/utils/extension.js +1 -1
- package/esm/utils/extension.js.map +1 -1
- package/esm/utils/foreign.d.ts +3 -0
- package/esm/utils/foreign.js +5 -2
- package/esm/utils/foreign.js.map +1 -1
- package/lib/components/ForeignComponentContainer.js +1 -1
- package/lib/components/ForeignComponentContainer.js.map +1 -1
- package/lib/defaults/navigator_v5.d.ts +6 -0
- package/lib/defaults/navigator_v5.js +84 -0
- package/lib/defaults/navigator_v5.js.map +1 -0
- package/lib/defaults/navigator_v6.d.ts +6 -0
- package/lib/defaults/navigator_v6.js +80 -0
- package/lib/defaults/navigator_v6.js.map +1 -0
- package/lib/modules/element.js +45 -1
- package/lib/modules/element.js.map +1 -1
- package/lib/types/navigation.d.ts +6 -2
- package/lib/utils/extension.d.ts +1 -1
- package/lib/utils/extension.js +1 -1
- package/lib/utils/extension.js.map +1 -1
- package/lib/utils/foreign.d.ts +3 -0
- package/lib/utils/foreign.js +6 -3
- package/lib/utils/foreign.js.map +1 -1
- package/package.json +5 -4
- package/src/components/ForeignComponentContainer.test.tsx +1 -1
- package/src/components/ForeignComponentContainer.tsx +2 -1
- package/src/defaults/navigator_v5.tsx +96 -0
- package/src/defaults/navigator_v6.tsx +93 -0
- package/src/modules/element.test.ts +0 -10
- package/src/modules/element.ts +60 -2
- package/src/types/api.ts +1 -0
- package/src/types/navigation.ts +6 -2
- package/src/utils/extension.test.tsx +1 -1
- package/src/utils/extension.tsx +3 -2
- package/src/utils/foreign.test.ts +5 -5
- package/src/utils/foreign.ts +6 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNavigation = exports.createRedirect = exports.useCurrentNavigation = exports.useRouterContext = void 0;
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const react_router_1 = require("react-router");
|
|
6
|
+
let _nav;
|
|
7
|
+
const _noop = () => { };
|
|
8
|
+
function useRouterContext() {
|
|
9
|
+
return React.useContext(react_router_1.__RouterContext);
|
|
10
|
+
}
|
|
11
|
+
exports.useRouterContext = useRouterContext;
|
|
12
|
+
function useCurrentNavigation() {
|
|
13
|
+
const ctx = useRouterContext();
|
|
14
|
+
const location = (0, react_router_1.useLocation)();
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
if (_nav) {
|
|
17
|
+
window.dispatchEvent(new CustomEvent('piral-navigate', {
|
|
18
|
+
detail: {
|
|
19
|
+
location,
|
|
20
|
+
},
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
}, [location]);
|
|
24
|
+
React.useEffect(() => {
|
|
25
|
+
_nav = ctx.history;
|
|
26
|
+
return () => {
|
|
27
|
+
_nav = undefined;
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
}
|
|
31
|
+
exports.useCurrentNavigation = useCurrentNavigation;
|
|
32
|
+
function createRedirect(to) {
|
|
33
|
+
return () => React.createElement(react_router_1.Redirect, { to: to });
|
|
34
|
+
}
|
|
35
|
+
exports.createRedirect = createRedirect;
|
|
36
|
+
function createNavigation() {
|
|
37
|
+
const enhance = (location, action) => ({
|
|
38
|
+
action,
|
|
39
|
+
location: Object.assign({ get href() {
|
|
40
|
+
return _nav.createHref(location);
|
|
41
|
+
} }, location),
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
get path() {
|
|
45
|
+
if (_nav) {
|
|
46
|
+
return _nav.location.pathname;
|
|
47
|
+
}
|
|
48
|
+
return location.pathname;
|
|
49
|
+
},
|
|
50
|
+
push(target, state) {
|
|
51
|
+
if (_nav) {
|
|
52
|
+
_nav.push(target, state);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
replace(target, state) {
|
|
56
|
+
if (_nav) {
|
|
57
|
+
_nav.replace(target, state);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
go(n) {
|
|
61
|
+
if (_nav) {
|
|
62
|
+
_nav.go(n);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
block(blocker) {
|
|
66
|
+
if (!_nav) {
|
|
67
|
+
return _noop;
|
|
68
|
+
}
|
|
69
|
+
return _nav.block((location, action) => blocker(enhance(location, action)));
|
|
70
|
+
},
|
|
71
|
+
listen(listener) {
|
|
72
|
+
const handler = (e) => listener(enhance(e.detail, _nav.action));
|
|
73
|
+
window.addEventListener('piral-navigate', handler);
|
|
74
|
+
return () => {
|
|
75
|
+
window.removeEventListener('piral-navigate', handler);
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
router: {
|
|
79
|
+
history: _nav,
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
exports.createNavigation = createNavigation;
|
|
84
|
+
//# sourceMappingURL=navigator_v5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator_v5.js","sourceRoot":"","sources":["../../src/defaults/navigator_v5.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { NavigationApi } from '../types';
|
|
3
|
+
export declare function useRouterContext(): unknown;
|
|
4
|
+
export declare function useCurrentNavigation(): void;
|
|
5
|
+
export declare function createRedirect(to: string): () => JSX.Element;
|
|
6
|
+
export declare function createNavigation(): NavigationApi;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNavigation = exports.createRedirect = exports.useCurrentNavigation = exports.useRouterContext = void 0;
|
|
4
|
+
const React = require("react");
|
|
5
|
+
//@ts-ignore
|
|
6
|
+
const react_router_1 = require("react-router");
|
|
7
|
+
let _nav;
|
|
8
|
+
const _noop = () => { };
|
|
9
|
+
function useRouterContext() {
|
|
10
|
+
return React.useContext(react_router_1.UNSAFE_NavigationContext);
|
|
11
|
+
}
|
|
12
|
+
exports.useRouterContext = useRouterContext;
|
|
13
|
+
function useCurrentNavigation() {
|
|
14
|
+
const ctx = useRouterContext();
|
|
15
|
+
const location = (0, react_router_1.useLocation)();
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (_nav) {
|
|
18
|
+
window.dispatchEvent(new CustomEvent('piral-navigate', {
|
|
19
|
+
detail: {
|
|
20
|
+
location,
|
|
21
|
+
},
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
}, [location]);
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
_nav = ctx.navigator;
|
|
27
|
+
return () => {
|
|
28
|
+
_nav = undefined;
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
31
|
+
}
|
|
32
|
+
exports.useCurrentNavigation = useCurrentNavigation;
|
|
33
|
+
function createRedirect(to) {
|
|
34
|
+
return () => React.createElement(react_router_1.Navigate, { to: to });
|
|
35
|
+
}
|
|
36
|
+
exports.createRedirect = createRedirect;
|
|
37
|
+
function createNavigation() {
|
|
38
|
+
const enhance = (info) => (Object.assign(Object.assign({}, info), { location: Object.assign({ get href() {
|
|
39
|
+
return _nav.createHref(info.location);
|
|
40
|
+
} }, info.location) }));
|
|
41
|
+
return {
|
|
42
|
+
get path() {
|
|
43
|
+
if (_nav) {
|
|
44
|
+
return _nav.location.pathname;
|
|
45
|
+
}
|
|
46
|
+
return location.pathname;
|
|
47
|
+
},
|
|
48
|
+
push(target, state) {
|
|
49
|
+
if (_nav) {
|
|
50
|
+
_nav.push(target, state);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
replace(target, state) {
|
|
54
|
+
if (_nav) {
|
|
55
|
+
_nav.replace(target, state);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
go(n) {
|
|
59
|
+
if (_nav) {
|
|
60
|
+
_nav.go(n);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
block(blocker) {
|
|
64
|
+
if (!_nav) {
|
|
65
|
+
return _noop;
|
|
66
|
+
}
|
|
67
|
+
return _nav.block((transition) => blocker(enhance(transition)));
|
|
68
|
+
},
|
|
69
|
+
listen(listener) {
|
|
70
|
+
const handler = (e) => listener(enhance(e.detail));
|
|
71
|
+
window.addEventListener('piral-navigate', handler);
|
|
72
|
+
return () => {
|
|
73
|
+
window.removeEventListener('piral-navigate', handler);
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
router: _nav,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
exports.createNavigation = createNavigation;
|
|
80
|
+
//# sourceMappingURL=navigator_v6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator_v6.js","sourceRoot":"","sources":["../../src/defaults/navigator_v6.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,YAAY;AACZ,+CAAgG;AAGhG,IAAI,IAAS,CAAC;AACd,MAAM,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAEvB,SAAgB,gBAAgB;IAC9B,OAAO,KAAK,CAAC,UAAU,CAAC,uCAAa,CAAC,CAAC;AACzC,CAAC;AAFD,4CAEC;AAED,SAAgB,oBAAoB;IAClC,MAAM,GAAG,GAAQ,gBAAgB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAA,0BAAW,GAAE,CAAC;IAE/B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,gBAAgB,EAAE;gBAChC,MAAM,EAAE;oBACN,QAAQ;iBACT;aACF,CAAC,CACH,CAAC;SACH;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAErB,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAvBD,oDAuBC;AAED,SAAgB,cAAc,CAAC,EAAU;IACvC,OAAO,GAAG,EAAE,CAAC,oBAAC,uBAAQ,IAAC,EAAE,EAAE,EAAE,GAAI,CAAC;AACpC,CAAC;AAFD,wCAEC;AAED,SAAgB,gBAAgB;IAC9B,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,iCACrB,IAAI,KACP,QAAQ,kBACN,IAAI,IAAI;gBACN,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC,IACE,IAAI,CAAC,QAAQ,KAElB,CAAC;IAEH,OAAO;QACL,IAAI,IAAI;YACN,IAAI,IAAI,EAAE;gBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;aAC/B;YAED,OAAO,QAAQ,CAAC,QAAQ,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,KAAK;YAChB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aAC1B;QACH,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,KAAK;YACnB,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;aAC7B;QACH,CAAC;QACD,EAAE,CAAC,CAAC;YACF,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACZ;QACH,CAAC;QACD,KAAK,CAAC,OAAO;YACX,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,KAAK,CAAC;aACd;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,CAAC,QAAQ;YACb,MAAM,OAAO,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAEhE,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAEnD,OAAO,GAAG,EAAE;gBACV,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YACxD,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,IAAI;KACb,CAAC;AACJ,CAAC;AAnDD,4CAmDC"}
|
package/lib/modules/element.js
CHANGED
|
@@ -4,6 +4,16 @@ exports.renderElement = void 0;
|
|
|
4
4
|
const components_1 = require("../components");
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
if (typeof window !== 'undefined' && 'customElements' in window) {
|
|
7
|
+
/**
|
|
8
|
+
* This is a nice abstraction allowing anyone to actually use the extension system
|
|
9
|
+
* brought by Piral. Not all props of the extension system are actually exposed.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* <piral-extension name="my-ext-name"></piral-extension>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
7
17
|
class PiralExtension extends HTMLElement {
|
|
8
18
|
constructor() {
|
|
9
19
|
super(...arguments);
|
|
@@ -38,6 +48,7 @@ if (typeof window !== 'undefined' && 'customElements' in window) {
|
|
|
38
48
|
this.update(this.props);
|
|
39
49
|
}
|
|
40
50
|
connectedCallback() {
|
|
51
|
+
this.style.display = 'contents';
|
|
41
52
|
if (this.isConnected) {
|
|
42
53
|
this.dispatchEvent(new CustomEvent('render-html', {
|
|
43
54
|
bubbles: true,
|
|
@@ -67,7 +78,40 @@ if (typeof window !== 'undefined' && 'customElements' in window) {
|
|
|
67
78
|
return ['name', 'params'];
|
|
68
79
|
}
|
|
69
80
|
}
|
|
70
|
-
customElements.define(
|
|
81
|
+
customElements.define(utils_1.extensionName, PiralExtension);
|
|
82
|
+
/**
|
|
83
|
+
* This is a boundary to host elements from other frameworks - effectively vanishing
|
|
84
|
+
* at runtime.
|
|
85
|
+
*
|
|
86
|
+
* Usage:
|
|
87
|
+
*
|
|
88
|
+
* ```
|
|
89
|
+
* <piral-portal pid="host-1234"></piral-portal>
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
class PiralPortal extends HTMLElement {
|
|
93
|
+
connectedCallback() {
|
|
94
|
+
this.style.display = 'contents';
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
customElements.define(utils_1.portalName, PiralPortal);
|
|
98
|
+
/**
|
|
99
|
+
* This is a virtual element to aggregate rendering from other frameworks, mostly
|
|
100
|
+
* used like piral-portal, but without context-hosting capabilities. This would
|
|
101
|
+
* be used exclusively within a foreign framework, not from Piral to initiate.
|
|
102
|
+
*
|
|
103
|
+
* Usage:
|
|
104
|
+
*
|
|
105
|
+
* ```
|
|
106
|
+
* <piral-slot></piral-slot>
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
class PiralSlot extends HTMLElement {
|
|
110
|
+
connectedCallback() {
|
|
111
|
+
this.style.display = 'contents';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
customElements.define(utils_1.slotName, PiralSlot);
|
|
71
115
|
}
|
|
72
116
|
function renderElement(context, element, props) {
|
|
73
117
|
if (typeof window !== 'undefined') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/modules/element.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/modules/element.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export interface NavigationLocation {
|
|
|
34
34
|
* On the initial location, this will be the string default. On all subsequent
|
|
35
35
|
* locations, this string will be a unique identifier.
|
|
36
36
|
*/
|
|
37
|
-
key
|
|
37
|
+
key?: string;
|
|
38
38
|
}
|
|
39
39
|
export interface NavigationListener {
|
|
40
40
|
(update: NavigationUpdate): void;
|
|
@@ -47,7 +47,7 @@ export interface NavigationUpdate {
|
|
|
47
47
|
location: NavigationLocation;
|
|
48
48
|
}
|
|
49
49
|
export interface NavigationTransition extends NavigationUpdate {
|
|
50
|
-
retry(): void;
|
|
50
|
+
retry?(): void;
|
|
51
51
|
}
|
|
52
52
|
export interface NavigationApi {
|
|
53
53
|
/**
|
|
@@ -78,6 +78,10 @@ export interface NavigationApi {
|
|
|
78
78
|
* @returns The disposable for stopping the block.
|
|
79
79
|
*/
|
|
80
80
|
listen(listener: NavigationListener): Disposable;
|
|
81
|
+
/**
|
|
82
|
+
* Gets the current path.
|
|
83
|
+
*/
|
|
84
|
+
path: string;
|
|
81
85
|
/**
|
|
82
86
|
* The original router behind the navigation.
|
|
83
87
|
*/
|
package/lib/utils/extension.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { ExtensionComponentProps, WrappedComponent } from '../types';
|
|
2
|
+
import type { ExtensionComponentProps, WrappedComponent } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Transforms the given component to an extension component.
|
|
5
5
|
* @param Component The component to transform.
|
package/lib/utils/extension.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/utils/extension.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../../src/utils/extension.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAI/B,SAAS,SAAS,CAAC,KAAuB;IACxC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC;AAMD,MAAM,WAAW,GAA+B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAmB,CAAC;IAE7C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;;QACnB,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,OAAO,oCAAY,GAAG,EAAE,IAAI,GAAI,CAAC;KAClC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;GAIG;AACH,SAAgB,WAAW,CAAI,SAAiC;IAC9D,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAC,SAAS,oBAAK,KAAK,CAAC,MAAM,EAAI,CAAC;AACpD,CAAC;AAFD,kCAEC;AAED;;;;;;GAMG;AACH,SAAgB,eAAe,CAAC,UAAiC;IAC/D,MAAM,KAAK,GAAqB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjF,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,oBAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;AACvC,CAAC;AAJD,0CAIC"}
|
package/lib/utils/foreign.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { ComponentType, ReactPortal } from 'react';
|
|
2
2
|
import { GlobalStateContext, ForeignComponent } from '../types';
|
|
3
|
+
export declare const extensionName = "piral-extension";
|
|
4
|
+
export declare const portalName = "piral-portal";
|
|
5
|
+
export declare const slotName = "piral-slot";
|
|
3
6
|
export declare function attachDomPortal<TProps>(id: string, context: GlobalStateContext, element: HTMLElement | ShadowRoot, component: ComponentType<TProps>, props: TProps): [string, ReactPortal];
|
|
4
7
|
export declare function changeDomPortal<TProps>(id: string, current: ReactPortal, context: GlobalStateContext, element: HTMLElement | ShadowRoot, component: ComponentType<TProps>, props: TProps): [string, ReactPortal];
|
|
5
8
|
export declare function convertComponent<T extends {
|
package/lib/utils/foreign.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderInDom = exports.convertComponent = exports.changeDomPortal = exports.attachDomPortal = void 0;
|
|
3
|
+
exports.renderInDom = exports.convertComponent = exports.changeDomPortal = exports.attachDomPortal = exports.slotName = exports.portalName = exports.extensionName = void 0;
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const react_dom_1 = require("react-dom");
|
|
6
|
+
exports.extensionName = 'piral-extension';
|
|
7
|
+
exports.portalName = 'piral-portal';
|
|
8
|
+
exports.slotName = 'piral-slot';
|
|
6
9
|
function attachDomPortal(id, context, element, component, props) {
|
|
7
10
|
const portal = (0, react_dom_1.createPortal)((0, react_1.createElement)(component, props), element);
|
|
8
11
|
context.showPortal(id, portal);
|
|
@@ -23,10 +26,10 @@ function convertComponent(converter, component) {
|
|
|
23
26
|
}
|
|
24
27
|
exports.convertComponent = convertComponent;
|
|
25
28
|
function renderInDom(context, element, component, props) {
|
|
26
|
-
const portalId = '
|
|
29
|
+
const portalId = 'pid';
|
|
27
30
|
let parent = element;
|
|
28
31
|
while (parent) {
|
|
29
|
-
if (parent instanceof Element && parent.hasAttribute(portalId)) {
|
|
32
|
+
if (parent instanceof Element && parent.localName === exports.portalName && parent.hasAttribute(portalId)) {
|
|
30
33
|
const id = parent.getAttribute(portalId);
|
|
31
34
|
return attachDomPortal(id, context, element, component, props);
|
|
32
35
|
}
|
package/lib/utils/foreign.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foreign.js","sourceRoot":"","sources":["../../src/utils/foreign.ts"],"names":[],"mappings":";;;AAAA,iCAAkE;AAClE,yCAAyC;
|
|
1
|
+
{"version":3,"file":"foreign.js","sourceRoot":"","sources":["../../src/utils/foreign.ts"],"names":[],"mappings":";;;AAAA,iCAAkE;AAClE,yCAAyC;AAG5B,QAAA,aAAa,GAAG,iBAAiB,CAAC;AAClC,QAAA,UAAU,GAAG,cAAc,CAAC;AAC5B,QAAA,QAAQ,GAAG,YAAY,CAAC;AAErC,SAAgB,eAAe,CAC7B,EAAU,EACV,OAA2B,EAC3B,OAAiC,EACjC,SAAgC,EAChC,KAAa;IAEb,MAAM,MAAM,GAAG,IAAA,wBAAY,EAAC,IAAA,qBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,EAAE,OAAsB,CAAC,CAAC;IACrF,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACtB,CAAC;AAVD,0CAUC;AAED,SAAgB,eAAe,CAC7B,EAAU,EACV,OAAoB,EACpB,OAA2B,EAC3B,OAAiC,EACjC,SAAgC,EAChC,KAAa;IAEb,MAAM,IAAI,GAAG,IAAA,wBAAY,EAAC,IAAA,qBAAa,EAAC,SAAS,EAAE,KAAK,CAAC,EAAE,OAAsB,CAAC,CAAC;IACnF,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACpB,CAAC;AAXD,0CAWC;AAED,SAAgB,gBAAgB,CAC9B,SAAgD,EAChD,SAAY;IAEZ,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,CAAC,IAAI,eAAe,CAAC,CAAC;KACvF;IAED,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC;AATD,4CASC;AAED,SAAgB,WAAW,CACzB,OAA2B,EAC3B,OAAiC,EACjC,SAAgC,EAChC,KAAa;IAEb,MAAM,QAAQ,GAAG,KAAK,CAAC;IACvB,IAAI,MAAM,GAAS,OAAO,CAAC;IAE3B,OAAO,MAAM,EAAE;QACb,IAAI,MAAM,YAAY,OAAO,IAAI,MAAM,CAAC,SAAS,KAAK,kBAAU,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACjG,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzC,OAAO,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;SAChE;QAED,MAAM,GAAG,MAAM,CAAC,UAAU,IAAK,MAAqB,CAAC,IAAI,CAAC;KAC3D;IAED,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AAnBD,kCAmBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "piral-core",
|
|
3
|
-
"version": "0.15.0-beta.
|
|
3
|
+
"version": "0.15.0-beta.4672",
|
|
4
4
|
"description": "The core library for creating a Piral instance.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"portal",
|
|
@@ -70,8 +70,9 @@
|
|
|
70
70
|
"test": "echo \"Error: run tests from root\" && exit 1"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"
|
|
74
|
-
"piral-
|
|
73
|
+
"enhanced-resolve": "^5.10.0",
|
|
74
|
+
"piral-base": "0.15.0-beta.4672",
|
|
75
|
+
"piral-debug-utils": "0.15.0-beta.4672",
|
|
75
76
|
"zustand": "^3.0.0"
|
|
76
77
|
},
|
|
77
78
|
"peerDependencies": {
|
|
@@ -97,5 +98,5 @@
|
|
|
97
98
|
"react-router-dom",
|
|
98
99
|
"tslib"
|
|
99
100
|
],
|
|
100
|
-
"gitHead": "
|
|
101
|
+
"gitHead": "cd1026b70c90290fa5ba3f9b86c038eb852595be"
|
|
101
102
|
}
|
|
@@ -108,7 +108,7 @@ describe('ForeignComponentContainer component', () => {
|
|
|
108
108
|
);
|
|
109
109
|
await act(resolveAfter);
|
|
110
110
|
expect(mount).toHaveBeenCalled();
|
|
111
|
-
const node = document.querySelector('
|
|
111
|
+
const node = document.querySelector('piral-portal[pid=foo]');
|
|
112
112
|
expect(renderHtmlExtension).not.toHaveBeenCalled();
|
|
113
113
|
node?.dispatchEvent(new CustomEvent('render-html', { detail: {} }));
|
|
114
114
|
await act(resolveAfter);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { isfunc } from 'piral-base';
|
|
3
|
+
import type {} from 'piral-debug-utils';
|
|
3
4
|
import type { ForeignComponent, BaseComponentProps, ComponentContext } from '../types';
|
|
4
5
|
|
|
5
6
|
interface ForeignComponentContainerProps<T> {
|
|
@@ -64,6 +65,6 @@ export class ForeignComponentContainer<T> extends React.Component<ForeignCompone
|
|
|
64
65
|
|
|
65
66
|
render() {
|
|
66
67
|
const { $portalId } = this.props;
|
|
67
|
-
return <
|
|
68
|
+
return <piral-portal pid={$portalId} ref={this.setNode} />;
|
|
68
69
|
}
|
|
69
70
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { History, Location, Action } from 'history';
|
|
3
|
+
import { __RouterContext as RouterContext, Redirect, useLocation } from 'react-router';
|
|
4
|
+
import { NavigationApi } from '../types';
|
|
5
|
+
|
|
6
|
+
let _nav: History;
|
|
7
|
+
const _noop = () => {};
|
|
8
|
+
|
|
9
|
+
export function useRouterContext() {
|
|
10
|
+
return React.useContext(RouterContext);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function useCurrentNavigation() {
|
|
14
|
+
const ctx = useRouterContext();
|
|
15
|
+
const location = useLocation();
|
|
16
|
+
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (_nav) {
|
|
19
|
+
window.dispatchEvent(
|
|
20
|
+
new CustomEvent('piral-navigate', {
|
|
21
|
+
detail: {
|
|
22
|
+
location,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}, [location]);
|
|
28
|
+
|
|
29
|
+
React.useEffect(() => {
|
|
30
|
+
_nav = ctx.history;
|
|
31
|
+
|
|
32
|
+
return () => {
|
|
33
|
+
_nav = undefined;
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function createRedirect(to: string) {
|
|
39
|
+
return () => <Redirect to={to} />;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function createNavigation(): NavigationApi {
|
|
43
|
+
const enhance = (location: Location, action: Action) => ({
|
|
44
|
+
action,
|
|
45
|
+
location: {
|
|
46
|
+
get href() {
|
|
47
|
+
return _nav.createHref(location);
|
|
48
|
+
},
|
|
49
|
+
...location,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
get path() {
|
|
55
|
+
if (_nav) {
|
|
56
|
+
return _nav.location.pathname;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return location.pathname;
|
|
60
|
+
},
|
|
61
|
+
push(target, state) {
|
|
62
|
+
if (_nav) {
|
|
63
|
+
_nav.push(target, state);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
replace(target, state) {
|
|
67
|
+
if (_nav) {
|
|
68
|
+
_nav.replace(target, state);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
go(n) {
|
|
72
|
+
if (_nav) {
|
|
73
|
+
_nav.go(n);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
block(blocker) {
|
|
77
|
+
if (!_nav) {
|
|
78
|
+
return _noop;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return _nav.block((location, action) => blocker(enhance(location, action)));
|
|
82
|
+
},
|
|
83
|
+
listen(listener) {
|
|
84
|
+
const handler = (e: CustomEvent) => listener(enhance(e.detail, _nav.action));
|
|
85
|
+
|
|
86
|
+
window.addEventListener('piral-navigate', handler);
|
|
87
|
+
|
|
88
|
+
return () => {
|
|
89
|
+
window.removeEventListener('piral-navigate', handler);
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
router: {
|
|
93
|
+
history: _nav,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
//@ts-ignore
|
|
3
|
+
import { UNSAFE_NavigationContext as RouterContext, Navigate, useLocation } from 'react-router';
|
|
4
|
+
import { NavigationApi } from '../types';
|
|
5
|
+
|
|
6
|
+
let _nav: any;
|
|
7
|
+
const _noop = () => {};
|
|
8
|
+
|
|
9
|
+
export function useRouterContext() {
|
|
10
|
+
return React.useContext(RouterContext);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function useCurrentNavigation() {
|
|
14
|
+
const ctx: any = useRouterContext();
|
|
15
|
+
const location = useLocation();
|
|
16
|
+
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (_nav) {
|
|
19
|
+
window.dispatchEvent(
|
|
20
|
+
new CustomEvent('piral-navigate', {
|
|
21
|
+
detail: {
|
|
22
|
+
location,
|
|
23
|
+
},
|
|
24
|
+
}),
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
}, [location]);
|
|
28
|
+
|
|
29
|
+
React.useEffect(() => {
|
|
30
|
+
_nav = ctx.navigator;
|
|
31
|
+
|
|
32
|
+
return () => {
|
|
33
|
+
_nav = undefined;
|
|
34
|
+
};
|
|
35
|
+
}, []);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function createRedirect(to: string) {
|
|
39
|
+
return () => <Navigate to={to} />;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function createNavigation(): NavigationApi {
|
|
43
|
+
const enhance = (info) => ({
|
|
44
|
+
...info,
|
|
45
|
+
location: {
|
|
46
|
+
get href() {
|
|
47
|
+
return _nav.createHref(info.location);
|
|
48
|
+
},
|
|
49
|
+
...info.location,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
get path() {
|
|
55
|
+
if (_nav) {
|
|
56
|
+
return _nav.location.pathname;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return location.pathname;
|
|
60
|
+
},
|
|
61
|
+
push(target, state) {
|
|
62
|
+
if (_nav) {
|
|
63
|
+
_nav.push(target, state);
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
replace(target, state) {
|
|
67
|
+
if (_nav) {
|
|
68
|
+
_nav.replace(target, state);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
go(n) {
|
|
72
|
+
if (_nav) {
|
|
73
|
+
_nav.go(n);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
block(blocker) {
|
|
77
|
+
if (!_nav) {
|
|
78
|
+
return _noop;
|
|
79
|
+
}
|
|
80
|
+
return _nav.block((transition) => blocker(enhance(transition)));
|
|
81
|
+
},
|
|
82
|
+
listen(listener) {
|
|
83
|
+
const handler = (e: CustomEvent) => listener(enhance(e.detail));
|
|
84
|
+
|
|
85
|
+
window.addEventListener('piral-navigate', handler);
|
|
86
|
+
|
|
87
|
+
return () => {
|
|
88
|
+
window.removeEventListener('piral-navigate', handler);
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
router: _nav,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -3,16 +3,6 @@ import { createListener } from 'piral-base';
|
|
|
3
3
|
import { createActions } from '../state';
|
|
4
4
|
import { renderElement } from './element';
|
|
5
5
|
|
|
6
|
-
declare global {
|
|
7
|
-
interface HTMLElementTagNameMap {
|
|
8
|
-
"piral-extension": HTMLElement & {
|
|
9
|
-
params: any;
|
|
10
|
-
name: string;
|
|
11
|
-
empty: any;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
6
|
function createMockContext(): [any, any] {
|
|
17
7
|
const state: any = create(() => ({
|
|
18
8
|
portals: {},
|