@thi.ng/rdom 0.13.8 → 0.14.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log
2
2
 
3
- - **Last updated**: 2023-12-19T11:01:47Z
3
+ - **Last updated**: 2023-12-28T23:24:39Z
4
4
  - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
5
 
6
6
  All notable changes to this project will be documented in this file.
@@ -9,6 +9,12 @@ See [Conventional Commits](https://conventionalcommits.org/) for commit guidelin
9
9
  **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
10
10
  and/or version bumps of transitive dependencies.
11
11
 
12
+ ## [0.14.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/rdom@0.14.0) (2023-12-28)
13
+
14
+ #### 🚀 Features
15
+
16
+ - add $lazy() component wrapper ([5ad3856](https://github.com/thi-ng/umbrella/commit/5ad3856))
17
+
12
18
  ### [0.13.4](https://github.com/thi-ng/umbrella/tree/@thi.ng/rdom@0.13.4) (2023-12-11)
13
19
 
14
20
  #### ♻️ Refactoring
package/README.md CHANGED
@@ -172,6 +172,7 @@ code examples:
172
172
 
173
173
  - [$klist](https://docs.thi.ng/umbrella/rdom/functions/_klist.html)
174
174
  - [$list](https://docs.thi.ng/umbrella/rdom/functions/_list.html)
175
+ - [$lazy](https://docs.thi.ng/umbrella/rdom/functions/_lazy.html)
175
176
  - [$object](https://docs.thi.ng/umbrella/rdom/functions/_object-1.html)
176
177
  - [$promise](https://docs.thi.ng/umbrella/rdom/functions/_promise-1.html)
177
178
  - [$refresh](https://docs.thi.ng/umbrella/rdom/functions/_refresh.html)
@@ -179,6 +180,7 @@ code examples:
179
180
  - [$sub](https://docs.thi.ng/umbrella/rdom/functions/_sub-1.html)
180
181
  - [$subObject](https://docs.thi.ng/umbrella/rdom/functions/_subObject.html)
181
182
  - [$switch](https://docs.thi.ng/umbrella/rdom/functions/_switch.html)
183
+ - [$wrapEl](https://docs.thi.ng/umbrella/rdom/functions/_wrapEl.html)
182
184
  - [$wrapHtml](https://docs.thi.ng/umbrella/rdom/functions/_wrapHtml.html)
183
185
  - [$wrapText](https://docs.thi.ng/umbrella/rdom/functions/_wrapText.html)
184
186
 
@@ -279,7 +281,7 @@ For Node.js REPL:
279
281
  const rdom = await import("@thi.ng/rdom");
280
282
  ```
281
283
 
282
- Package sizes (brotli'd, pre-treeshake): ESM: 4.06 KB
284
+ Package sizes (brotli'd, pre-treeshake): ESM: 4.19 KB
283
285
 
284
286
  ## Dependencies
285
287
 
@@ -323,6 +325,7 @@ directory are using this package:
323
325
  | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-dnd.png" width="240"/> | rdom drag & drop example | [Demo](https://demo.thi.ng/umbrella/rdom-dnd/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-dnd) |
324
326
  | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-formgen.jpg" width="240"/> | Basic usage of the declarative rdom-forms generator | [Demo](https://demo.thi.ng/umbrella/rdom-formgen/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-formgen) |
325
327
  | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-key-sequences.jpg" width="240"/> | rstream & transducer-based FSM for converting key event sequences into high-level commands | [Demo](https://demo.thi.ng/umbrella/rdom-key-sequences/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-key-sequences) |
328
+ | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-lazy-load.png" width="240"/> | Lazy loading components via @thi.ng/rdom | [Demo](https://demo.thi.ng/umbrella/rdom-lazy-load/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-lazy-load) |
326
329
  | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-lissajous.png" width="240"/> | rdom & hiccup-canvas interop test | [Demo](https://demo.thi.ng/umbrella/rdom-lissajous/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-lissajous) |
327
330
  | | Full umbrella repo doc string search w/ paginated results | [Demo](https://demo.thi.ng/umbrella/rdom-search-docs/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-search-docs) |
328
331
  | <img src="https://raw.githubusercontent.com/thi-ng/umbrella/develop/assets/examples/rdom-svg-nodes.png" width="240"/> | rdom powered SVG graph with draggable nodes | [Demo](https://demo.thi.ng/umbrella/rdom-svg-nodes/) | [Source](https://github.com/thi-ng/umbrella/tree/develop/examples/rdom-svg-nodes) |
package/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "./dom.js";
6
6
  export * from "./event.js";
7
7
  export * from "./idgen.js";
8
8
  export * from "./klist.js";
9
+ export * from "./lazy.js";
9
10
  export * from "./list.js";
10
11
  export * from "./object.js";
11
12
  export * from "./promise.js";
package/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "./dom.js";
6
6
  export * from "./event.js";
7
7
  export * from "./idgen.js";
8
8
  export * from "./klist.js";
9
+ export * from "./lazy.js";
9
10
  export * from "./list.js";
10
11
  export * from "./object.js";
11
12
  export * from "./promise.js";
package/lazy.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import type { Fn0 } from "@thi.ng/api";
2
+ import type { ComponentLike, IComponent, NumOrElement } from "./api.js";
3
+ import { Component } from "./component.js";
4
+ /**
5
+ * `IntersectionObserver`-based helper component for lazy
6
+ * loading/initialization. Creates an initially empty wrapper element, then only
7
+ * calls the given `inner` component factory function once the wrapper element
8
+ * intersects the viewport (as per provided IntersectionObserver options).
9
+ *
10
+ * @remarks
11
+ * The wrapper element MUST have an associated non-zero height (e.g. via CSS or
12
+ * initial content).
13
+ *
14
+ * @param tag
15
+ * @param attribs
16
+ * @param inner
17
+ * @param opts
18
+ */
19
+ export declare const $lazy: (tag: string, attribs: any, inner: Fn0<Promise<ComponentLike>>, opts?: IntersectionObserverInit) => $Lazy;
20
+ export declare class $Lazy extends Component {
21
+ protected tag: string;
22
+ protected attribs: any;
23
+ protected ctor: Fn0<Promise<ComponentLike>>;
24
+ protected opts?: IntersectionObserverInit | undefined;
25
+ protected observer: IntersectionObserver | undefined;
26
+ protected inner: IComponent | undefined;
27
+ constructor(tag: string, attribs: any, ctor: Fn0<Promise<ComponentLike>>, opts?: IntersectionObserverInit | undefined);
28
+ mount(parent: Element, index?: NumOrElement | undefined): Promise<Element>;
29
+ unmount(): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=lazy.d.ts.map
package/lazy.js ADDED
@@ -0,0 +1,42 @@
1
+ import { Component } from "./component.js";
2
+ const $lazy = (tag, attribs, inner, opts) => new $Lazy(tag, attribs, inner, opts);
3
+ class $Lazy extends Component {
4
+ constructor(tag, attribs, ctor, opts) {
5
+ super();
6
+ this.tag = tag;
7
+ this.attribs = attribs;
8
+ this.ctor = ctor;
9
+ this.opts = opts;
10
+ }
11
+ observer;
12
+ inner;
13
+ async mount(parent, index) {
14
+ this.el = this.$el(this.tag, this.attribs, null, parent, index);
15
+ this.observer = new IntersectionObserver(([item]) => {
16
+ if (item.isIntersecting) {
17
+ this.observer.unobserve(this.el);
18
+ (async () => {
19
+ this.inner = this.$compile(await this.ctor());
20
+ this.inner.mount(this.el, 0);
21
+ })();
22
+ }
23
+ }, this.opts);
24
+ this.observer.observe(this.el);
25
+ return this.el;
26
+ }
27
+ async unmount() {
28
+ if (this.inner) {
29
+ await this.inner.unmount();
30
+ this.inner = void 0;
31
+ }
32
+ if (this.observer) {
33
+ this.observer.disconnect();
34
+ this.observer = void 0;
35
+ super.unmount();
36
+ }
37
+ }
38
+ }
39
+ export {
40
+ $Lazy,
41
+ $lazy
42
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thi.ng/rdom",
3
- "version": "0.13.8",
3
+ "version": "0.14.0",
4
4
  "description": "Lightweight, reactive, VDOM-less UI/DOM components with async lifecycle and @thi.ng/hiccup compatible",
5
5
  "type": "module",
6
6
  "module": "./index.js",
@@ -36,21 +36,21 @@
36
36
  "test": "bun test"
37
37
  },
38
38
  "dependencies": {
39
- "@thi.ng/api": "^8.9.14",
40
- "@thi.ng/checks": "^3.4.14",
41
- "@thi.ng/errors": "^2.4.8",
42
- "@thi.ng/hiccup": "^5.1.3",
43
- "@thi.ng/paths": "^5.1.55",
44
- "@thi.ng/prefixes": "^2.3.0",
45
- "@thi.ng/rstream": "^8.2.17",
46
- "@thi.ng/strings": "^3.7.5"
39
+ "@thi.ng/api": "^8.9.15",
40
+ "@thi.ng/checks": "^3.4.15",
41
+ "@thi.ng/errors": "^2.4.9",
42
+ "@thi.ng/hiccup": "^5.1.4",
43
+ "@thi.ng/paths": "^5.1.56",
44
+ "@thi.ng/prefixes": "^2.3.1",
45
+ "@thi.ng/rstream": "^8.2.18",
46
+ "@thi.ng/strings": "^3.7.6"
47
47
  },
48
48
  "devDependencies": {
49
- "@microsoft/api-extractor": "^7.38.3",
50
- "esbuild": "^0.19.8",
49
+ "@microsoft/api-extractor": "^7.39.0",
50
+ "esbuild": "^0.19.10",
51
51
  "rimraf": "^5.0.5",
52
52
  "typedoc": "^0.25.4",
53
- "typescript": "^5.3.2"
53
+ "typescript": "^5.3.3"
54
54
  },
55
55
  "keywords": [
56
56
  "async",
@@ -107,6 +107,9 @@
107
107
  "./klist": {
108
108
  "default": "./klist.js"
109
109
  },
110
+ "./lazy": {
111
+ "default": "./lazy.js"
112
+ },
110
113
  "./list": {
111
114
  "default": "./list.js"
112
115
  },
@@ -142,5 +145,5 @@
142
145
  ],
143
146
  "year": 2020
144
147
  },
145
- "gitHead": "f156d361a652cce316c36e0b7df7d2ac5c2dbbf8\n"
148
+ "gitHead": "775c664723cd87d6ac5909cedf91195317add287\n"
146
149
  }