@solidjs/element 2.0.0-experimental.4 → 2.0.0-experimental.6
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/README.md +1 -1
- package/dist/index.d.ts +2 -9
- package/dist/index.js +44 -39
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ This library extends [Solid](https://github.com/solidjs/solid) by adding Custom
|
|
|
8
8
|
|
|
9
9
|
## Example
|
|
10
10
|
|
|
11
|
-
[See here](
|
|
11
|
+
[See here](./sample.jsx) for an example of a webcomponent created by `solid-element`.
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
package/dist/index.d.ts
CHANGED
|
@@ -2,13 +2,6 @@ import { ComponentType as mComponentType, PropsDefinitionInput } from "component
|
|
|
2
2
|
export { hot, getCurrentElement, noShadowDOM } from "component-register";
|
|
3
3
|
export type ComponentType<T> = mComponentType<T>;
|
|
4
4
|
declare function withSolid<T extends object>(ComponentType: ComponentType<T>): ComponentType<T>;
|
|
5
|
-
declare function customElement<T extends object>(
|
|
6
|
-
|
|
7
|
-
ComponentType: ComponentType<T>
|
|
8
|
-
): CustomElementConstructor;
|
|
9
|
-
declare function customElement<T extends object>(
|
|
10
|
-
tag: string,
|
|
11
|
-
props: PropsDefinitionInput<T>,
|
|
12
|
-
ComponentType: ComponentType<T>
|
|
13
|
-
): CustomElementConstructor;
|
|
5
|
+
declare function customElement<T extends object>(tag: string, ComponentType: ComponentType<T>): CustomElementConstructor;
|
|
6
|
+
declare function customElement<T extends object>(tag: string, props: PropsDefinitionInput<T>, ComponentType: ComponentType<T>): CustomElementConstructor;
|
|
14
7
|
export { withSolid, customElement };
|
package/dist/index.js
CHANGED
|
@@ -3,50 +3,55 @@ export { hot, getCurrentElement, noShadowDOM } from "component-register";
|
|
|
3
3
|
import { createRoot, createSignal, runWithOwner } from "solid-js";
|
|
4
4
|
import { insert } from "@solidjs/web";
|
|
5
5
|
function createProps(raw) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
const keys = Object.keys(raw);
|
|
7
|
+
const props = {};
|
|
8
|
+
for (let i = 0; i < keys.length; i++) {
|
|
9
|
+
const [get, set] = createSignal(() => raw[keys[i]]);
|
|
10
|
+
Object.defineProperty(props, keys[i], {
|
|
11
|
+
get,
|
|
12
|
+
set(v) {
|
|
13
|
+
set(() => v);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return props;
|
|
18
18
|
}
|
|
19
19
|
function lookupContext(el) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
next
|
|
24
|
-
|
|
20
|
+
if (el.assignedSlot && el.assignedSlot._$owner)
|
|
21
|
+
return el.assignedSlot._$owner;
|
|
22
|
+
let next = el.parentNode;
|
|
23
|
+
while (next &&
|
|
24
|
+
!next._$owner &&
|
|
25
|
+
!(next.assignedSlot && next.assignedSlot._$owner))
|
|
26
|
+
next = next.parentNode;
|
|
27
|
+
return next && next.assignedSlot
|
|
28
|
+
? next.assignedSlot._$owner
|
|
29
|
+
: el._$owner;
|
|
25
30
|
}
|
|
26
31
|
function withSolid(ComponentType) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
return (rawProps, options) => {
|
|
33
|
+
const { element } = options;
|
|
34
|
+
const owner = lookupContext(element);
|
|
35
|
+
function createComponent() {
|
|
36
|
+
return createRoot((dispose) => {
|
|
37
|
+
const props = createProps(rawProps);
|
|
38
|
+
element.addPropertyChangedCallback((key, val) => (props[key] = val));
|
|
39
|
+
element.addReleaseCallback(() => {
|
|
40
|
+
element.renderRoot.textContent = "";
|
|
41
|
+
dispose();
|
|
42
|
+
});
|
|
43
|
+
const comp = ComponentType(props, options);
|
|
44
|
+
return insert(element.renderRoot, comp);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return owner ? runWithOwner(owner, createComponent) : createComponent();
|
|
48
|
+
};
|
|
44
49
|
}
|
|
45
50
|
function customElement(tag, props, ComponentType) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
if (arguments.length === 2) {
|
|
52
|
+
ComponentType = props;
|
|
53
|
+
props = {};
|
|
54
|
+
}
|
|
55
|
+
return register(tag, props)(withSolid(ComponentType));
|
|
51
56
|
}
|
|
52
57
|
export { withSolid, customElement };
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Webcomponents wrapper for Solid",
|
|
4
4
|
"author": "Ryan Carniato",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "2.0.0-experimental.
|
|
6
|
+
"version": "2.0.0-experimental.6",
|
|
7
7
|
"homepage": "https://github.com/solidjs/solid/blob/main/packages/solid-element#readme",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
"component-register": "^0.8.7"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"solid-js": "^2.0.0-experimental.
|
|
24
|
-
"@solidjs/web": "^2.0.0-experimental.
|
|
23
|
+
"solid-js": "^2.0.0-experimental.6",
|
|
24
|
+
"@solidjs/web": "^2.0.0-experimental.6"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"solid-js": "2.0.0-experimental.
|
|
28
|
-
"@solidjs/web": "2.0.0-experimental.
|
|
27
|
+
"solid-js": "2.0.0-experimental.6",
|
|
28
|
+
"@solidjs/web": "2.0.0-experimental.6"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"clean": "rimraf dist/",
|