@mittwald/react-tunnel 0.2.0-alpha.63 → 0.2.0-alpha.630

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/index.js CHANGED
@@ -1,67 +1,85 @@
1
1
  "use client"
2
2
  /* */
3
- var m = Object.defineProperty;
4
- var g = (s, e, r) => e in s ? m(s, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : s[e] = r;
5
- var c = (s, e, r) => g(s, typeof e != "symbol" ? e + "" : e, r);
6
- import { jsx as C } from "react/jsx-runtime";
7
- import { useState as b, createContext as E, useContext as f, useId as v, useRef as w, useEffect as x } from "react";
8
- import { observable as a, makeObservable as y, action as p } from "mobx";
9
- import { observer as T } from "mobx-react-lite";
3
+ import { jsx as f } from "react/jsx-runtime";
4
+ import { useState as m, createContext as g, useContext as x, useId as E, useRef as v, useEffect as a } from "react";
5
+ import { observable as p, makeObservable as b, action as C } from "mobx";
6
+ import { observer as w } from "mobx-react-lite";
10
7
  const l = "default";
11
8
  class o {
9
+ children = p.map(
10
+ {},
11
+ {
12
+ deep: !1
13
+ }
14
+ );
15
+ preparedChildren = /* @__PURE__ */ new Map();
16
+ nextIndex = 0;
12
17
  constructor() {
13
- c(this, "children", a.map(
14
- {},
15
- {
16
- deep: !1
17
- }
18
- ));
19
- c(this, "preparedChildren", /* @__PURE__ */ new Map());
20
- y(this, {
21
- deleteChildren: p.bound,
22
- setChildren: p.bound
18
+ b(this, {
19
+ deleteChildren: C.bound,
20
+ setChildren: C.bound
23
21
  });
24
22
  }
25
23
  static useNew() {
26
- return b(() => new o())[0];
24
+ const e = m(() => new o())[0];
25
+ return e.resetIndex(), e;
27
26
  }
28
- setChildren(e = l, r, n) {
29
- var i;
30
- const t = this.children.get(e) ?? a.map({}, { deep: !1 });
31
- t.set(r, n), (i = this.preparedChildren.get(e)) == null || i.delete(r), this.children.set(e, t);
27
+ resetIndex() {
28
+ this.nextIndex = 0;
32
29
  }
33
- prepareChildren(e = l, r, n) {
34
- const t = this.preparedChildren.get(e) ?? /* @__PURE__ */ new Map();
35
- t.set(r, n), this.preparedChildren.set(e, t);
30
+ getIndex() {
31
+ return this.nextIndex++;
36
32
  }
37
- deleteChildren(e = l, r) {
38
- var n, t;
39
- (n = this.children.get(e)) == null || n.delete(r), (t = this.preparedChildren.get(e)) == null || t.delete(r);
33
+ setChildren(e = l, t, r, n) {
34
+ const i = {
35
+ id: t,
36
+ index: r,
37
+ children: n
38
+ }, s = this.children.get(e) ?? p.map({}, { deep: !1 });
39
+ s.set(t, i), this.preparedChildren.get(e)?.delete(t), this.children.set(e, s);
40
40
  }
41
- getChildren(e = l) {
42
- var n, t;
43
- const r = ((n = this.children.get(e)) == null ? void 0 : n.entries()) ?? ((t = this.preparedChildren.get(e)) == null ? void 0 : t.entries());
44
- if (r)
45
- return Array.from(r);
41
+ prepareChildren(e = l, t, r, n) {
42
+ const i = {
43
+ id: t,
44
+ index: r,
45
+ children: n
46
+ }, s = this.preparedChildren.get(e) ?? /* @__PURE__ */ new Map();
47
+ s.set(t, i), this.preparedChildren.set(e, s);
48
+ }
49
+ deleteChildrenFromMap(e, t, r) {
50
+ const n = e.get(t);
51
+ n?.delete(r), n?.size === 0 && e.delete(t);
52
+ }
53
+ deleteChildren(e = l, t) {
54
+ this.deleteChildrenFromMap(this.children, e, t), this.deleteChildrenFromMap(this.preparedChildren, e, t);
55
+ }
56
+ getEntries(e = l) {
57
+ const t = this.children.get(e)?.values() ?? this.preparedChildren.get(e)?.values();
58
+ if (t)
59
+ return Array.from(t).sort(
60
+ (r, n) => r.index - n.index
61
+ );
46
62
  }
47
63
  }
48
- const h = E(new o()), A = (s) => {
49
- const { children: e } = s;
50
- return /* @__PURE__ */ C(h.Provider, { value: o.useNew(), children: e });
51
- }, O = (s) => {
52
- const { children: e, id: r, staticEntryId: n } = s, t = f(h), i = v(), d = n ?? i, u = w(!1);
53
- return u.current || t.prepareChildren(r, d, e), x(() => (u.current = !0, t.setChildren(r, d, e), () => {
54
- t.deleteChildren(r, d);
55
- }), [e, r, d]), null;
56
- }, M = (s) => {
57
- const { children: e } = s;
64
+ const h = g(new o()), I = (d) => {
65
+ const { children: e } = d;
66
+ return /* @__PURE__ */ f(h.Provider, { value: o.useNew(), children: e });
67
+ }, N = (d) => {
68
+ const { children: e, id: t, staticEntryId: r } = d, n = x(h), i = E(), s = r ?? i, c = n.getIndex(), u = v(!1);
69
+ return u.current || n.prepareChildren(t, s, c, e), a(() => {
70
+ u.current = !0, n.setChildren(t, s, c, e);
71
+ }, [e, t, s, c]), a(() => () => {
72
+ n.deleteChildren(t, s);
73
+ }, [t, s]), null;
74
+ }, M = (d) => {
75
+ const { children: e } = d;
58
76
  return typeof e == "function" ? e() : e;
59
- }, S = T((s) => {
60
- const { children: e, id: r } = s, n = f(h).getChildren(r);
61
- return n ? n.map(([t, i]) => /* @__PURE__ */ C(M, { children: i }, t)) : e;
77
+ }, P = w((d) => {
78
+ const { children: e, id: t } = d, r = x(h).getEntries(t), n = r ? r.map((i) => /* @__PURE__ */ f(M, { children: i.children }, i.id)) : null;
79
+ return typeof e == "function" ? e(n) : n ?? e;
62
80
  });
63
81
  export {
64
- O as TunnelEntry,
65
- S as TunnelExit,
66
- A as TunnelProvider
82
+ N as TunnelEntry,
83
+ P as TunnelExit,
84
+ I as TunnelProvider
67
85
  };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Tunnel.browser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tunnel.browser.test.d.ts","sourceRoot":"","sources":["../../src/Tunnel.browser.test.tsx"],"names":[],"mappings":""}
@@ -1,13 +1,24 @@
1
+ import { ReactNode } from 'react';
1
2
  import { ObservableMap } from 'mobx';
2
- import { TunnelChildren } from './types';
3
+ export type TunnelChildren = ReactNode | undefined | ((tunnelChildren?: ReactNode | undefined) => ReactNode | undefined);
4
+ interface TunnelEntryState {
5
+ index: number;
6
+ id: string;
7
+ children: TunnelChildren;
8
+ }
3
9
  export declare class TunnelState {
4
- readonly children: ObservableMap<string, ObservableMap<string, TunnelChildren>>;
10
+ readonly children: ObservableMap<string, ObservableMap<string, TunnelEntryState>>;
5
11
  private readonly preparedChildren;
12
+ private nextIndex;
6
13
  constructor();
7
14
  static useNew(): TunnelState;
8
- setChildren(tunnelId: string | undefined, entryId: string, children: TunnelChildren): void;
9
- prepareChildren(tunnelId: string | undefined, entryId: string, children: TunnelChildren): void;
15
+ resetIndex(): void;
16
+ getIndex(): number;
17
+ setChildren(tunnelId: string | undefined, entryId: string, index: number, children: TunnelChildren): void;
18
+ prepareChildren(tunnelId: string | undefined, entryId: string, index: number, children: TunnelChildren): void;
19
+ private deleteChildrenFromMap;
10
20
  deleteChildren(tunnelId: string | undefined, entryId: string): void;
11
- getChildren(tunnelId?: string): [string, TunnelChildren][] | undefined;
21
+ getEntries(tunnelId?: string): TunnelEntryState[] | undefined;
12
22
  }
23
+ export {};
13
24
  //# sourceMappingURL=TunnelState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TunnelState.d.ts","sourceRoot":"","sources":["../../src/TunnelState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,qBAAa,WAAW;IACtB,SAAgB,QAAQ,+DAQtB;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG7B;;WASU,MAAM,IAAI,WAAW;IAI5B,WAAW,CAChB,QAAQ,EAAE,MAAM,YAAY,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB,IAAI;IAWA,eAAe,CACpB,QAAQ,EAAE,MAAM,YAAY,EAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,cAAc,GACvB,IAAI;IASA,cAAc,CAAC,QAAQ,EAAE,MAAM,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnE,WAAW,CAChB,QAAQ,GAAE,MAAkB,GAC3B,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG,SAAS;CAQ1C"}
1
+ {"version":3,"file":"TunnelState.d.ts","sourceRoot":"","sources":["../../src/TunnelState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAK1C,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,CAAC,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,CAAC,CAAC;AAExE,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,qBAAa,WAAW;IACtB,SAAgB,QAAQ,iEAQtB;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAG7B;IAEJ,OAAO,CAAC,SAAS,CAAK;;WASR,MAAM,IAAI,WAAW;IAM5B,UAAU;IAIV,QAAQ;IAIR,WAAW,CAChB,QAAQ,EAAE,MAAM,YAAY,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,IAAI;IAiBA,eAAe,CACpB,QAAQ,EAAE,MAAM,YAAY,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,GACvB,IAAI;IAgBP,OAAO,CAAC,qBAAqB;IAYtB,cAAc,CAAC,QAAQ,EAAE,MAAM,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnE,UAAU,CACf,QAAQ,GAAE,MAAkB,GAC3B,gBAAgB,EAAE,GAAG,SAAS;CAUlC"}
@@ -1,11 +1,11 @@
1
- import { FC } from 'react';
2
- import { TunnelChildren } from '../types';
3
- interface Props {
1
+ import { FC, ReactNode } from 'react';
2
+ export type TunnelEntryChildren = ReactNode | undefined | (() => ReactNode | undefined);
3
+ export interface TunnelEntryProps {
4
4
  id?: string;
5
- children?: TunnelChildren;
5
+ children?: TunnelEntryChildren;
6
6
  /** Static entry ID instead of generated ID by `useId` */
7
7
  staticEntryId?: string;
8
8
  }
9
- export declare const TunnelEntry: FC<Props>;
9
+ export declare const TunnelEntry: FC<TunnelEntryProps>;
10
10
  export default TunnelEntry;
11
11
  //# sourceMappingURL=TunnelEntry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TunnelEntry.d.ts","sourceRoot":"","sources":["../../../src/components/TunnelEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU,KAAK;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,KAAK,CAqBjC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"TunnelEntry.d.ts","sourceRoot":"","sources":["../../../src/components/TunnelEntry.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3C,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,SAAS,GACT,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC;AAElC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA+B5C,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,7 +1,10 @@
1
- import { FC, PropsWithChildren } from 'react';
2
- interface Props extends PropsWithChildren {
1
+ import { FC } from 'react';
2
+ import { TunnelChildren } from '../TunnelState';
3
+ export type TunnelExitChildren = TunnelChildren;
4
+ export interface TunnelExitProps {
3
5
  id?: string;
6
+ children?: TunnelExitChildren;
4
7
  }
5
- export declare const TunnelExit: FC<Props>;
8
+ export declare const TunnelExit: FC<TunnelExitProps>;
6
9
  export default TunnelExit;
7
10
  //# sourceMappingURL=TunnelExit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TunnelExit.d.ts","sourceRoot":"","sources":["../../../src/components/TunnelExit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAOnD,UAAU,KAAM,SAAQ,iBAAiB;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAOD,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,KAAK,CAU/B,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"TunnelExit.d.ts","sourceRoot":"","sources":["../../../src/components/TunnelExit.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAOD,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAezC,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
- export { TunnelProvider } from './components/TunnelProvider';
2
- export { TunnelEntry } from './components/TunnelEntry';
3
- export { TunnelExit } from './components/TunnelExit';
1
+ export * from './components/TunnelProvider';
2
+ export * from './components/TunnelEntry';
3
+ export * from './components/TunnelExit';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/react-tunnel",
3
- "version": "0.2.0-alpha.63",
3
+ "version": "0.2.0-alpha.630",
4
4
  "type": "module",
5
5
  "description": "It's like a Portal – but with React components",
6
6
  "keywords": [
@@ -25,40 +25,40 @@
25
25
  "scripts": {
26
26
  "build": "vite build --config vite.build.config.ts",
27
27
  "clean": "rimraf dist",
28
- "test": "exit 0",
29
- "test:compile": "tsc --noEmit",
30
- "test:unit": "vitest run"
28
+ "test:browser": "vitest run --project=browser --browser.headless",
29
+ "test:browser:dev": "vitest dev --project=browser",
30
+ "test:compile": "tsc --noEmit"
31
31
  },
32
32
  "dependencies": {
33
- "mobx": "^6.13.6",
34
- "mobx-react-lite": "^4.1.0"
33
+ "mobx": "^6.15.0",
34
+ "mobx-react-lite": "^4.1.1"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@mittwald/typescript-config": "workspace:*",
38
- "@testing-library/dom": "^10.4.0",
39
- "@testing-library/react": "^16.2.0",
40
- "@types/node": "^22.13.4",
41
- "@types/react": "^19.0.10",
42
- "@types/react-dom": "^19.0.4",
43
- "@vitejs/plugin-react": "^4.3.4",
44
- "@vitest/coverage-v8": "^2.1.9",
45
- "happy-dom": "^16.8.1",
46
- "nx": "^20.4.5",
47
- "prettier": "^3.5.1",
48
- "react": "^19.0.0",
49
- "react-dom": "^19.0.0",
50
- "rimraf": "^6.0.1",
51
- "typescript": "^5.7.3",
52
- "vite": "^6.1.1",
53
- "vite-plugin-banner": "^0.8.0",
54
- "vite-plugin-checker": "^0.8.0",
55
- "vite-plugin-dts": "^4.5.0",
56
- "vite-plugin-externalize-deps": "^0.9.0",
57
- "vitest": "^2.1.9"
38
+ "@types/node": "^24.10.1",
39
+ "@types/react": "^19.2.7",
40
+ "@types/react-dom": "^19.2",
41
+ "@vitejs/plugin-react": "^5.1.2",
42
+ "@vitest/browser-playwright": "^4.0.15",
43
+ "@vitest/coverage-v8": "^4.0.15",
44
+ "nx": "^22.1.0",
45
+ "playwright": "^1.57.0",
46
+ "prettier": "^3.6.2",
47
+ "react": "^19.2.0",
48
+ "react-dom": "^19.2.0",
49
+ "rimraf": "^6.1.2",
50
+ "typescript": "^5.9.3",
51
+ "vite": "^7.2.7",
52
+ "vite-plugin-banner": "^0.8.1",
53
+ "vite-plugin-checker": "^0.11.0",
54
+ "vite-plugin-dts": "^4.5.4",
55
+ "vite-plugin-externalize-deps": "^0.10.0",
56
+ "vitest": "^4.0.15",
57
+ "vitest-browser-react": "^2.0.2"
58
58
  },
59
59
  "peerDependencies": {
60
- "react": "^19",
61
- "react-dom": "^19"
60
+ "react": "^19.2.0",
61
+ "react-dom": "^19.2.0"
62
62
  },
63
- "gitHead": "e2ec875a4616bd7eb0ad3437d2ebe6261cad43ce"
63
+ "gitHead": "323dbd9108df78ecabe3de46bb19c8c006e546c0"
64
64
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Tunnel.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tunnel.test.d.ts","sourceRoot":"","sources":["../../src/Tunnel.test.tsx"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import { ReactNode } from 'react';
2
- export type TunnelChildren = ReactNode | undefined | (() => ReactNode | undefined);
3
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC"}