pixi-solid 0.0.3 → 0.0.5
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/dist/pixi-application.js +2 -4
- package/dist/pixi-application.js.map +1 -1
- package/dist/pixi-canvas.js +3 -13
- package/dist/pixi-canvas.js.map +1 -1
- package/dist/renderer.js +1 -1
- package/dist/types/pixi-application.d.ts +2 -2
- package/package.json +1 -1
- package/dist/universal.js +0 -204
- package/dist/universal.js.map +0 -1
package/dist/pixi-application.js
CHANGED
|
@@ -36,14 +36,13 @@ const usePixiApp = () => {
|
|
|
36
36
|
* This component should only be used once in your application.
|
|
37
37
|
*
|
|
38
38
|
* @param props The properties to configure the Pixi.js Application.
|
|
39
|
-
*
|
|
39
|
+
*
|
|
40
40
|
* **Example**
|
|
41
41
|
* {@includeCode ./examples/PixiApplication.example.tsx}
|
|
42
42
|
*/
|
|
43
43
|
const PixiApplication = (props) => {
|
|
44
44
|
const [_solidProps, initialisationProps] = splitProps(props, ["ref", "children"]);
|
|
45
45
|
const [appResource] = createResource(async () => {
|
|
46
|
-
if (globalThis.__PIXI_DEVTOOLS__) throw new Error("Only one PixiApplication can be active at a time. Multiple instances detected.");
|
|
47
46
|
const app = new Application();
|
|
48
47
|
await app.init({
|
|
49
48
|
autoDensity: true,
|
|
@@ -56,13 +55,12 @@ const PixiApplication = (props) => {
|
|
|
56
55
|
createEffect(() => {
|
|
57
56
|
const app = appResource();
|
|
58
57
|
if (app) {
|
|
59
|
-
if (props.ref) props.ref(app
|
|
58
|
+
if (props.ref) props.ref(app);
|
|
60
59
|
app.ticker.autoStart = false;
|
|
61
60
|
app.ticker.start();
|
|
62
61
|
globalThis.__PIXI_DEVTOOLS__ = { app };
|
|
63
62
|
onCleanup(() => {
|
|
64
63
|
app.destroy(true, { children: true });
|
|
65
|
-
globalThis.__PIXI_DEVTOOLS__ = void 0;
|
|
66
64
|
});
|
|
67
65
|
}
|
|
68
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixi-application.js","names":["ApplicationOptions","
|
|
1
|
+
{"version":3,"file":"pixi-application.js","names":["ApplicationOptions","Application","JSX","Ref","createContext","createEffect","createResource","onCleanup","Show","splitProps","useContext","PixiAppContext","usePixiApp","app","Error","PixiApplicationProps","Partial","Omit","ref","children","Element","PixiApplication","props","_solidProps","initialisationProps","appResource","init","autoDensity","resolution","Math","min","window","devicePixelRatio","sharedTicker","arg","ticker","autoStart","start","globalThis","__PIXI_DEVTOOLS__","destroy","_$createComponent","when","Provider","value"],"sources":["../src/pixi-application.tsx"],"sourcesContent":["import type { ApplicationOptions } from \"pixi.js\";\nimport { Application } from \"pixi.js\";\nimport type { JSX, Ref } from \"solid-js\";\nimport {\n createContext,\n createEffect,\n createResource,\n onCleanup,\n Show,\n splitProps,\n useContext,\n} from \"solid-js\";\n\nconst PixiAppContext = createContext<Application>();\n\n/**\n * A custom SolidJS hook to access the root PIXI.Application instance.\n * This hook must be called from a component that is a descendant of `PixiApplication`.\n *\n * @returns The PIXI.Application instance provided by the `PixiApplication` component.\n * @throws Will throw an error if used outside of a `PixiApplication` context provider.\n * @example\n * ```tsx\n * const MyComponent = () => {\n * const app = usePixiApp();\n *\n * createEffect(() => {\n * console.log('App resolution:', app.renderer.resolution);\n * });\n *\n * return <Sprite texture={Texture.WHITE} />;\n * };\n * ```\n */\nexport const usePixiApp = () => {\n const app = useContext(PixiAppContext);\n if (!app) {\n throw new Error(\"usePixiApp must be used within a PixiApplication\");\n }\n return app;\n};\n\n/**\n * Props for the `PixiApplication` component. It extends the PIXI.ApplicationOptions\n * to allow passing configuration directly to the Pixi.js Application constructor,\n * but omits properties that are handled by the component itself.\n */\nexport type PixiApplicationProps = Partial<\n Omit<ApplicationOptions, \"children\" | \"resizeTo\" | \"view\">\n> & {\n ref?: Ref<Application>;\n children?: JSX.Element;\n};\n\n/**\n * A SolidJS component that creates and manages a PIXI.Application instance.\n * It provides the application instance through context to be used by child components\n * and custom hooks like `usePixiApp`, `useTick`, and `useTicker`.\n *\n * This component should only be used once in your application.\n *\n * @param props The properties to configure the Pixi.js Application.\n *\n * **Example**\n * {@includeCode ./examples/PixiApplication.example.tsx}\n */\nexport const PixiApplication = (props: PixiApplicationProps) => {\n const [_solidProps, initialisationProps] = splitProps(props, [\"ref\", \"children\"]);\n\n // TODO: Reinitialise the pixi app if any of the initialisationProps change that we can't set at runtime\n\n const [appResource] = createResource(async () => {\n const app = new Application();\n await app.init({\n autoDensity: true,\n resolution: Math.min(window.devicePixelRatio, 2),\n sharedTicker: true,\n ...initialisationProps,\n });\n\n return app;\n });\n\n createEffect(() => {\n const app = appResource();\n if (app) {\n if (props.ref) {\n // Solid converts the ref prop to a callback function\n (props.ref as unknown as (arg: any) => void)(app);\n }\n\n // TODO: Go through the other props that can be set at runtime and apply them here\n // e.g. backgroundColor => app.renderer.backgroundColor, etc.\n\n app.ticker.autoStart = false;\n app.ticker.start();\n\n // @ts-expect-error\n globalThis.__PIXI_DEVTOOLS__ = {\n app,\n };\n\n onCleanup(() => {\n app.destroy(true, { children: true });\n });\n }\n });\n\n return (\n <Show when={appResource()}>\n {(app) => <PixiAppContext.Provider value={app()}>{props.children}</PixiAppContext.Provider>}\n </Show>\n );\n};\n"],"mappings":";;;;;AAaA,IAAMW,iBAAiBP,eAA4B;;;;;;;;;;;;;;;;;;;;AAqBnD,MAAaQ,mBAAmB;CAC9B,MAAMC,MAAMH,WAAWC,eAAe;AACtC,KAAI,CAACE,IACH,OAAM,IAAIC,MAAM,mDAAmD;AAErE,QAAOD;;;;;;;;;;;;;;AA2BT,MAAaQ,mBAAmBC,UAAgC;CAC9D,MAAM,CAACC,aAAaC,uBAAuBf,WAAWa,OAAO,CAAC,OAAO,WAAW,CAAC;CAIjF,MAAM,CAACG,eAAenB,eAAe,YAAY;EAC/C,MAAMO,MAAM,IAAIZ,aAAa;AAC7B,QAAMY,IAAIa,KAAK;GACbC,aAAa;GACbC,YAAYC,KAAKC,IAAIC,OAAOC,kBAAkB,EAAE;GAChDC,cAAc;GACd,GAAGT;GACJ,CAAC;AAEF,SAAOX;GACP;AAEFR,oBAAmB;EACjB,MAAMQ,MAAMY,aAAa;AACzB,MAAIZ,KAAK;AACP,OAAIS,MAAMJ,IAEPI,OAAMJ,IAAsCL,IAAI;AAMnDA,OAAIsB,OAAOC,YAAY;AACvBvB,OAAIsB,OAAOE,OAAO;AAGlBC,cAAWC,oBAAoB,EAC7B1B,KACD;AAEDN,mBAAgB;AACdM,QAAI2B,QAAQ,MAAM,EAAErB,UAAU,MAAM,CAAC;KACrC;;GAEJ;AAEF,QAAAsB,gBACGjC,MAAI;EAAA,IAACkC,OAAI;AAAA,UAAEjB,aAAa;;EAAAN,WACrBN,QAAG4B,gBAAM9B,eAAegC,UAAQ;GAAA,IAACC,QAAK;AAAA,WAAE/B,KAAK;;GAAA,IAAAM,WAAA;AAAA,WAAGG,MAAMH;;GAAQ,CAAA;EAA2B,CAAA"}
|
package/dist/pixi-canvas.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { usePixiApp } from "./pixi-application.js";
|
|
2
|
-
import {
|
|
2
|
+
import { className, effect, insert, style, template, use } from "solid-js/web";
|
|
3
3
|
import { createRenderEffect, onCleanup, onMount } from "solid-js";
|
|
4
4
|
|
|
5
5
|
//#region src/pixi-canvas.tsx
|
|
@@ -25,11 +25,6 @@ const PixiCanvas = (props) => {
|
|
|
25
25
|
let canvasWrapElement;
|
|
26
26
|
const pixiApp = usePixiApp();
|
|
27
27
|
pixiApp.canvas.style.display = "block";
|
|
28
|
-
pixiApp.canvas.style.position = "absolute";
|
|
29
|
-
pixiApp.canvas.style.top = "0";
|
|
30
|
-
pixiApp.canvas.style.left = "0";
|
|
31
|
-
pixiApp.canvas.style.width = "100%";
|
|
32
|
-
pixiApp.canvas.style.height = "100%";
|
|
33
28
|
createRenderEffect(() => {
|
|
34
29
|
if (props.children === void 0) throw new Error("PixiCanvas requires the `PixiStage` component to render.");
|
|
35
30
|
});
|
|
@@ -57,14 +52,9 @@ const PixiCanvas = (props) => {
|
|
|
57
52
|
typeof _ref$ === "function" ? use(_ref$, _el$) : canvasWrapElement = _el$;
|
|
58
53
|
insert(_el$, () => pixiApp.canvas);
|
|
59
54
|
effect((_p$) => {
|
|
60
|
-
var _v$ = {
|
|
61
|
-
position: "relative",
|
|
62
|
-
flex: 1,
|
|
63
|
-
display: "block",
|
|
64
|
-
...typeof props.style === "object" ? props.style : {}
|
|
65
|
-
}, _v$2 = { [props.className || ""]: props.className !== void 0 };
|
|
55
|
+
var _v$ = { ...typeof props.style === "object" ? props.style : {} }, _v$2 = props.className;
|
|
66
56
|
_p$.e = style(_el$, _v$, _p$.e);
|
|
67
|
-
_p$.t
|
|
57
|
+
_v$2 !== _p$.t && className(_el$, _p$.t = _v$2);
|
|
68
58
|
return _p$;
|
|
69
59
|
}, {
|
|
70
60
|
e: void 0,
|
package/dist/pixi-canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pixi-canvas.js","names":["JSX","createRenderEffect","onCleanup","onMount","usePixiApp","PixiCanvas","props","children","Element","style","CSSProperties","className","canvasWrapElement","HTMLDivElement","pixiApp","canvas","display","
|
|
1
|
+
{"version":3,"file":"pixi-canvas.js","names":["JSX","createRenderEffect","onCleanup","onMount","usePixiApp","PixiCanvas","props","children","Element","style","CSSProperties","className","canvasWrapElement","HTMLDivElement","pixiApp","canvas","display","undefined","Error","previousResizeTo","resizeTo","resizeObserver","ResizeObserver","queueResize","observe","disconnect","_el$","_tmpl$","_ref$","_$use","_$insert","_$effect","_p$","_v$","_v$2","e","_$style","t","_$className"],"sources":["../src/pixi-canvas.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport { createRenderEffect, onCleanup, onMount } from \"solid-js\";\nimport { usePixiApp } from \"./pixi-application\";\n\n/**\n * PixiCanvas\n *\n * A small wrapper that mounts the PIXI application's canvas element into the DOM\n * and automatically resizes it.\n *\n * - Requires a surrounding `PixiApplication` (accessed via `usePixiApp`).\n * - Requires a `PixiStage` component as a child.\n *\n * Props:\n * @param props.children - JSX content to render inside the canvas wrapper. Use\n * `PixiStage` as the only child.\n *\n * **Example**\n * {@includeCode ./examples/PixiCanvas.example.tsx}\n *\n */\n\nexport const PixiCanvas = (props: {\n children: JSX.Element;\n style?: JSX.CSSProperties | undefined;\n className?: string;\n}): JSX.Element => {\n let canvasWrapElement: HTMLDivElement | undefined;\n\n const pixiApp = usePixiApp();\n pixiApp.canvas.style.display = \"block\";\n\n createRenderEffect(() => {\n if (props.children === undefined) {\n throw new Error(\"PixiCanvas requires the `PixiStage` component to render.\");\n }\n });\n\n let previousResizeTo: typeof pixiApp.resizeTo;\n let resizeObserver: ResizeObserver | undefined;\n\n onMount(() => {\n if (!canvasWrapElement) return;\n previousResizeTo = pixiApp.resizeTo;\n pixiApp.resizeTo = canvasWrapElement;\n pixiApp.queueResize();\n resizeObserver = new ResizeObserver(() => {\n pixiApp.queueResize();\n });\n resizeObserver.observe(canvasWrapElement);\n });\n\n onCleanup(() => {\n if (!canvasWrapElement) return;\n pixiApp.resizeTo = previousResizeTo;\n resizeObserver?.disconnect();\n resizeObserver = undefined;\n });\n\n return (\n <div\n ref={canvasWrapElement}\n style={{\n ...(typeof props.style === \"object\" ? props.style : {}),\n }}\n class={props.className}\n >\n {pixiApp.canvas}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAaK,cAAcC,UAIR;CACjB,IAAIM;CAEJ,MAAME,UAAUV,YAAY;AAC5BU,SAAQC,OAAON,MAAMO,UAAU;AAE/Bf,0BAAyB;AACvB,MAAIK,MAAMC,aAAaU,OACrB,OAAM,IAAIC,MAAM,2DAA2D;GAE7E;CAEF,IAAIC;CACJ,IAAIE;AAEJlB,eAAc;AACZ,MAAI,CAACS,kBAAmB;AACxBO,qBAAmBL,QAAQM;AAC3BN,UAAQM,WAAWR;AACnBE,UAAQS,aAAa;AACrBF,mBAAiB,IAAIC,qBAAqB;AACxCR,WAAQS,aAAa;IACrB;AACFF,iBAAeG,QAAQZ,kBAAkB;GACzC;AAEFV,iBAAgB;AACd,MAAI,CAACU,kBAAmB;AACxBE,UAAQM,WAAWD;AACnBE,kBAAgBI,YAAY;AAC5BJ,mBAAiBJ;GACjB;AAEF,eAAA;EAAA,IAAAS,OAAAC,QAAA;EAAA,IAAAC,QAEShB;AAAiB,SAAAgB,UAAA,aAAAC,IAAAD,OAAAF,KAAA,GAAjBd,oBAAiBc;AAAAI,SAAAJ,YAMrBZ,QAAQC,OAAM;AAAAgB,UAAAC,QAAA;GAAA,IAAAC,MALR,EACL,GAAI,OAAO3B,MAAMG,UAAU,WAAWH,MAAMG,QAAQ,EAAE,EACvD,EAAAyB,OACM5B,MAAMK;AAASqB,OAAAG,IAAAC,MAAAV,MAAAO,KAAAD,IAAAG,EAAA;AAAAD,YAAAF,IAAAK,KAAAC,UAAAZ,MAAAM,IAAAK,IAAAH,KAAA;AAAA,UAAAF;KAAA;GAAAG,GAAAlB;GAAAoB,GAAApB;GAAA,CAAA;AAAA,SAAAS;KAAA"}
|
package/dist/renderer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PIXI_EVENT_HANDLER_NAME_SET } from "./pixi-events.js";
|
|
2
|
-
import { createRenderer } from "./universal.js";
|
|
3
2
|
import { Text } from "pixi.js";
|
|
3
|
+
import { createRenderer } from "solid-js/universal";
|
|
4
4
|
|
|
5
5
|
//#region src/renderer.tsx
|
|
6
6
|
const { effect, memo, createComponent, createElement, createTextNode, insertNode, insert, setProp, mergeProps, use, render, spread } = createRenderer({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ApplicationOptions
|
|
1
|
+
import type { ApplicationOptions } from "pixi.js";
|
|
2
2
|
import { Application } from "pixi.js";
|
|
3
3
|
import type { JSX, Ref } from "solid-js";
|
|
4
4
|
/**
|
|
@@ -27,7 +27,7 @@ export declare const usePixiApp: () => Application<import("pixi.js").Renderer>;
|
|
|
27
27
|
* but omits properties that are handled by the component itself.
|
|
28
28
|
*/
|
|
29
29
|
export type PixiApplicationProps = Partial<Omit<ApplicationOptions, "children" | "resizeTo" | "view">> & {
|
|
30
|
-
ref?: Ref<
|
|
30
|
+
ref?: Ref<Application>;
|
|
31
31
|
children?: JSX.Element;
|
|
32
32
|
};
|
|
33
33
|
/**
|
package/package.json
CHANGED
package/dist/universal.js
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { createComponent, createMemo, createRenderEffect, createRoot, mergeProps, untrack } from "solid-js";
|
|
2
|
-
|
|
3
|
-
//#region node_modules/solid-js/universal/dist/universal.js
|
|
4
|
-
var memo = (fn) => createMemo(() => fn());
|
|
5
|
-
function createRenderer$1({ createElement, createTextNode, isTextNode, replaceText, insertNode, removeNode, setProperty, getParentNode, getFirstChild, getNextSibling }) {
|
|
6
|
-
function insert(parent, accessor, marker, initial) {
|
|
7
|
-
if (marker !== void 0 && !initial) initial = [];
|
|
8
|
-
if (typeof accessor !== "function") return insertExpression(parent, accessor, initial, marker);
|
|
9
|
-
createRenderEffect((current) => insertExpression(parent, accessor(), current, marker), initial);
|
|
10
|
-
}
|
|
11
|
-
function insertExpression(parent, value, current, marker, unwrapArray) {
|
|
12
|
-
while (typeof current === "function") current = current();
|
|
13
|
-
if (value === current) return current;
|
|
14
|
-
const t = typeof value, multi = marker !== void 0;
|
|
15
|
-
if (t === "string" || t === "number") {
|
|
16
|
-
if (t === "number") value = value.toString();
|
|
17
|
-
if (multi) {
|
|
18
|
-
let node = current[0];
|
|
19
|
-
if (node && isTextNode(node)) replaceText(node, value);
|
|
20
|
-
else node = createTextNode(value);
|
|
21
|
-
current = cleanChildren(parent, current, marker, node);
|
|
22
|
-
} else if (current !== "" && typeof current === "string") replaceText(getFirstChild(parent), current = value);
|
|
23
|
-
else {
|
|
24
|
-
cleanChildren(parent, current, marker, createTextNode(value));
|
|
25
|
-
current = value;
|
|
26
|
-
}
|
|
27
|
-
} else if (value == null || t === "boolean") current = cleanChildren(parent, current, marker);
|
|
28
|
-
else if (t === "function") {
|
|
29
|
-
createRenderEffect(() => {
|
|
30
|
-
let v = value();
|
|
31
|
-
while (typeof v === "function") v = v();
|
|
32
|
-
current = insertExpression(parent, v, current, marker);
|
|
33
|
-
});
|
|
34
|
-
return () => current;
|
|
35
|
-
} else if (Array.isArray(value)) {
|
|
36
|
-
const array = [];
|
|
37
|
-
if (normalizeIncomingArray(array, value, unwrapArray)) {
|
|
38
|
-
createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));
|
|
39
|
-
return () => current;
|
|
40
|
-
}
|
|
41
|
-
if (array.length === 0) {
|
|
42
|
-
const replacement = cleanChildren(parent, current, marker);
|
|
43
|
-
if (multi) return current = replacement;
|
|
44
|
-
} else if (Array.isArray(current)) if (current.length === 0) appendNodes(parent, array, marker);
|
|
45
|
-
else reconcileArrays(parent, current, array);
|
|
46
|
-
else if (current == null || current === "") appendNodes(parent, array);
|
|
47
|
-
else reconcileArrays(parent, multi && current || [getFirstChild(parent)], array);
|
|
48
|
-
current = array;
|
|
49
|
-
} else {
|
|
50
|
-
if (Array.isArray(current)) {
|
|
51
|
-
if (multi) return current = cleanChildren(parent, current, marker, value);
|
|
52
|
-
cleanChildren(parent, current, null, value);
|
|
53
|
-
} else if (current == null || current === "" || !getFirstChild(parent)) insertNode(parent, value);
|
|
54
|
-
else replaceNode(parent, value, getFirstChild(parent));
|
|
55
|
-
current = value;
|
|
56
|
-
}
|
|
57
|
-
return current;
|
|
58
|
-
}
|
|
59
|
-
function normalizeIncomingArray(normalized, array, unwrap) {
|
|
60
|
-
let dynamic = false;
|
|
61
|
-
for (let i = 0, len = array.length; i < len; i++) {
|
|
62
|
-
let item = array[i], t;
|
|
63
|
-
if (item == null || item === true || item === false);
|
|
64
|
-
else if (Array.isArray(item)) dynamic = normalizeIncomingArray(normalized, item) || dynamic;
|
|
65
|
-
else if ((t = typeof item) === "string" || t === "number") normalized.push(createTextNode(item));
|
|
66
|
-
else if (t === "function") if (unwrap) {
|
|
67
|
-
while (typeof item === "function") item = item();
|
|
68
|
-
dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item]) || dynamic;
|
|
69
|
-
} else {
|
|
70
|
-
normalized.push(item);
|
|
71
|
-
dynamic = true;
|
|
72
|
-
}
|
|
73
|
-
else normalized.push(item);
|
|
74
|
-
}
|
|
75
|
-
return dynamic;
|
|
76
|
-
}
|
|
77
|
-
function reconcileArrays(parentNode, a, b) {
|
|
78
|
-
let bLength = b.length, aEnd = a.length, bEnd = bLength, aStart = 0, bStart = 0, after = getNextSibling(a[aEnd - 1]), map = null;
|
|
79
|
-
while (aStart < aEnd || bStart < bEnd) {
|
|
80
|
-
if (a[aStart] === b[bStart]) {
|
|
81
|
-
aStart++;
|
|
82
|
-
bStart++;
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
while (a[aEnd - 1] === b[bEnd - 1]) {
|
|
86
|
-
aEnd--;
|
|
87
|
-
bEnd--;
|
|
88
|
-
}
|
|
89
|
-
if (aEnd === aStart) {
|
|
90
|
-
const node = bEnd < bLength ? bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart] : after;
|
|
91
|
-
while (bStart < bEnd) insertNode(parentNode, b[bStart++], node);
|
|
92
|
-
} else if (bEnd === bStart) while (aStart < aEnd) {
|
|
93
|
-
if (!map || !map.has(a[aStart])) removeNode(parentNode, a[aStart]);
|
|
94
|
-
aStart++;
|
|
95
|
-
}
|
|
96
|
-
else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
97
|
-
const node = getNextSibling(a[--aEnd]);
|
|
98
|
-
insertNode(parentNode, b[bStart++], getNextSibling(a[aStart++]));
|
|
99
|
-
insertNode(parentNode, b[--bEnd], node);
|
|
100
|
-
a[aEnd] = b[bEnd];
|
|
101
|
-
} else {
|
|
102
|
-
if (!map) {
|
|
103
|
-
map = /* @__PURE__ */ new Map();
|
|
104
|
-
let i = bStart;
|
|
105
|
-
while (i < bEnd) map.set(b[i], i++);
|
|
106
|
-
}
|
|
107
|
-
const index = map.get(a[aStart]);
|
|
108
|
-
if (index != null) if (bStart < index && index < bEnd) {
|
|
109
|
-
let i = aStart, sequence = 1, t;
|
|
110
|
-
while (++i < aEnd && i < bEnd) {
|
|
111
|
-
if ((t = map.get(a[i])) == null || t !== index + sequence) break;
|
|
112
|
-
sequence++;
|
|
113
|
-
}
|
|
114
|
-
if (sequence > index - bStart) {
|
|
115
|
-
const node = a[aStart];
|
|
116
|
-
while (bStart < index) insertNode(parentNode, b[bStart++], node);
|
|
117
|
-
} else replaceNode(parentNode, b[bStart++], a[aStart++]);
|
|
118
|
-
} else aStart++;
|
|
119
|
-
else removeNode(parentNode, a[aStart++]);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
function cleanChildren(parent, current, marker, replacement) {
|
|
124
|
-
if (marker === void 0) {
|
|
125
|
-
let removed;
|
|
126
|
-
while (removed = getFirstChild(parent)) removeNode(parent, removed);
|
|
127
|
-
replacement && insertNode(parent, replacement);
|
|
128
|
-
return "";
|
|
129
|
-
}
|
|
130
|
-
const node = replacement || createTextNode("");
|
|
131
|
-
if (current.length) {
|
|
132
|
-
let inserted = false;
|
|
133
|
-
for (let i = current.length - 1; i >= 0; i--) {
|
|
134
|
-
const el = current[i];
|
|
135
|
-
if (node !== el) {
|
|
136
|
-
const isParent = getParentNode(el) === parent;
|
|
137
|
-
if (!inserted && !i) isParent ? replaceNode(parent, node, el) : insertNode(parent, node, marker);
|
|
138
|
-
else isParent && removeNode(parent, el);
|
|
139
|
-
} else inserted = true;
|
|
140
|
-
}
|
|
141
|
-
} else insertNode(parent, node, marker);
|
|
142
|
-
return [node];
|
|
143
|
-
}
|
|
144
|
-
function appendNodes(parent, array, marker) {
|
|
145
|
-
for (let i = 0, len = array.length; i < len; i++) insertNode(parent, array[i], marker);
|
|
146
|
-
}
|
|
147
|
-
function replaceNode(parent, newNode, oldNode) {
|
|
148
|
-
insertNode(parent, newNode, oldNode);
|
|
149
|
-
removeNode(parent, oldNode);
|
|
150
|
-
}
|
|
151
|
-
function spreadExpression(node, props, prevProps = {}, skipChildren) {
|
|
152
|
-
props || (props = {});
|
|
153
|
-
if (!skipChildren) createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));
|
|
154
|
-
createRenderEffect(() => props.ref && props.ref(node));
|
|
155
|
-
createRenderEffect(() => {
|
|
156
|
-
for (const prop in props) {
|
|
157
|
-
if (prop === "children" || prop === "ref") continue;
|
|
158
|
-
const value = props[prop];
|
|
159
|
-
if (value === prevProps[prop]) continue;
|
|
160
|
-
setProperty(node, prop, value, prevProps[prop]);
|
|
161
|
-
prevProps[prop] = value;
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
return prevProps;
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
render(code, element) {
|
|
168
|
-
let disposer;
|
|
169
|
-
createRoot((dispose) => {
|
|
170
|
-
disposer = dispose;
|
|
171
|
-
insert(element, code());
|
|
172
|
-
});
|
|
173
|
-
return disposer;
|
|
174
|
-
},
|
|
175
|
-
insert,
|
|
176
|
-
spread(node, accessor, skipChildren) {
|
|
177
|
-
if (typeof accessor === "function") createRenderEffect((current) => spreadExpression(node, accessor(), current, skipChildren));
|
|
178
|
-
else spreadExpression(node, accessor, void 0, skipChildren);
|
|
179
|
-
},
|
|
180
|
-
createElement,
|
|
181
|
-
createTextNode,
|
|
182
|
-
insertNode,
|
|
183
|
-
setProp(node, name, value, prev) {
|
|
184
|
-
setProperty(node, name, value, prev);
|
|
185
|
-
return value;
|
|
186
|
-
},
|
|
187
|
-
mergeProps,
|
|
188
|
-
effect: createRenderEffect,
|
|
189
|
-
memo,
|
|
190
|
-
createComponent,
|
|
191
|
-
use(fn, element, arg) {
|
|
192
|
-
return untrack(() => fn(element, arg));
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
function createRenderer(options) {
|
|
197
|
-
const renderer = createRenderer$1(options);
|
|
198
|
-
renderer.mergeProps = mergeProps;
|
|
199
|
-
return renderer;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
//#endregion
|
|
203
|
-
export { createRenderer };
|
|
204
|
-
//# sourceMappingURL=universal.js.map
|
package/dist/universal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"universal.js","names":[],"sources":["../node_modules/solid-js/universal/dist/universal.js"],"sourcesContent":["import { createMemo, createRoot, createRenderEffect, mergeProps, createComponent, untrack } from 'solid-js';\n\nconst memo = fn => createMemo(() => fn());\n\nfunction createRenderer$1({\n createElement,\n createTextNode,\n isTextNode,\n replaceText,\n insertNode,\n removeNode,\n setProperty,\n getParentNode,\n getFirstChild,\n getNextSibling\n}) {\n function insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n }\n function insertExpression(parent, value, current, marker, unwrapArray) {\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n if (t === \"string\" || t === \"number\") {\n if (t === \"number\") value = value.toString();\n if (multi) {\n let node = current[0];\n if (node && isTextNode(node)) {\n replaceText(node, value);\n } else node = createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n replaceText(getFirstChild(parent), current = value);\n } else {\n cleanChildren(parent, current, marker, createTextNode(value));\n current = value;\n }\n }\n } else if (value == null || t === \"boolean\") {\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n if (normalizeIncomingArray(array, value, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (array.length === 0) {\n const replacement = cleanChildren(parent, current, marker);\n if (multi) return current = replacement;\n } else {\n if (Array.isArray(current)) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else if (current == null || current === \"\") {\n appendNodes(parent, array);\n } else {\n reconcileArrays(parent, multi && current || [getFirstChild(parent)], array);\n }\n }\n current = array;\n } else {\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !getFirstChild(parent)) {\n insertNode(parent, value);\n } else replaceNode(parent, value, getFirstChild(parent));\n current = value;\n }\n return current;\n }\n function normalizeIncomingArray(normalized, array, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n t;\n if (item == null || item === true || item === false) ; else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item) || dynamic;\n } else if ((t = typeof item) === \"string\" || t === \"number\") {\n normalized.push(createTextNode(item));\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else normalized.push(item);\n }\n return dynamic;\n }\n function reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = getNextSibling(a[aEnd - 1]),\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart] : after;\n while (bStart < bEnd) insertNode(parentNode, b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) removeNode(parentNode, a[aStart]);\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = getNextSibling(a[--aEnd]);\n insertNode(parentNode, b[bStart++], getNextSibling(a[aStart++]));\n insertNode(parentNode, b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) insertNode(parentNode, b[bStart++], node);\n } else replaceNode(parentNode, b[bStart++], a[aStart++]);\n } else aStart++;\n } else removeNode(parentNode, a[aStart++]);\n }\n }\n }\n function cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) {\n let removed;\n while (removed = getFirstChild(parent)) removeNode(parent, removed);\n replacement && insertNode(parent, replacement);\n return \"\";\n }\n const node = replacement || createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = getParentNode(el) === parent;\n if (!inserted && !i) isParent ? replaceNode(parent, node, el) : insertNode(parent, node, marker);else isParent && removeNode(parent, el);\n } else inserted = true;\n }\n } else insertNode(parent, node, marker);\n return [node];\n }\n function appendNodes(parent, array, marker) {\n for (let i = 0, len = array.length; i < len; i++) insertNode(parent, array[i], marker);\n }\n function replaceNode(parent, newNode, oldNode) {\n insertNode(parent, newNode, oldNode);\n removeNode(parent, oldNode);\n }\n function spreadExpression(node, props, prevProps = {}, skipChildren) {\n props || (props = {});\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => props.ref && props.ref(node));\n createRenderEffect(() => {\n for (const prop in props) {\n if (prop === \"children\" || prop === \"ref\") continue;\n const value = props[prop];\n if (value === prevProps[prop]) continue;\n setProperty(node, prop, value, prevProps[prop]);\n prevProps[prop] = value;\n }\n });\n return prevProps;\n }\n return {\n render(code, element) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n insert(element, code());\n });\n return disposer;\n },\n insert,\n spread(node, accessor, skipChildren) {\n if (typeof accessor === \"function\") {\n createRenderEffect(current => spreadExpression(node, accessor(), current, skipChildren));\n } else spreadExpression(node, accessor, undefined, skipChildren);\n },\n createElement,\n createTextNode,\n insertNode,\n setProp(node, name, value, prev) {\n setProperty(node, name, value, prev);\n return value;\n },\n mergeProps,\n effect: createRenderEffect,\n memo,\n createComponent,\n use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n }\n };\n}\n\nfunction createRenderer(options) {\n const renderer = createRenderer$1(options);\n renderer.mergeProps = mergeProps;\n return renderer;\n}\n\nexport { createRenderer };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|