elements-kit 0.0.7 → 0.0.9
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 +3 -3
- package/dist/builder/dom.d.mts +1 -1
- package/dist/builder/index.d.mts +1 -1
- package/dist/builder/index.mjs +1 -2
- package/dist/{element-Ddri9UFx.mjs → element-Ddk9YaoE.mjs} +2 -3
- package/dist/{index-BGKVkZ6y.d.mts → index-BtqiEEfc.d.mts} +1 -1
- package/dist/{index-Ukqj0EcT.d.mts → index-CKjDUp1B.d.mts} +1 -1
- package/dist/index.mjs +1 -1
- package/dist/jsx-runtime/index.d.mts +1 -1
- package/dist/jsx-runtime/index.mjs +1 -1
- package/dist/magic-string.es-i62WTP6J.mjs +1011 -0
- package/dist/signals/index.d.mts +1 -1
- package/dist/signals/lib/active-element.d.mts +10 -0
- package/dist/signals/lib/active-element.mjs +20 -0
- package/dist/signals/lib/active-element.test.d.mts +1 -0
- package/dist/signals/lib/active-element.test.mjs +39 -0
- package/dist/signals/lib/animation-frames.d.mts +18 -0
- package/dist/signals/lib/animation-frames.mjs +48 -0
- package/dist/signals/lib/animation-frames.test.d.mts +1 -0
- package/dist/signals/lib/animation-frames.test.mjs +52 -0
- package/dist/signals/lib/async-retry.d.mts +21 -0
- package/dist/signals/lib/async-retry.mjs +57 -0
- package/dist/signals/lib/async-retry.test.d.mts +1 -0
- package/dist/signals/lib/async-retry.test.mjs +57 -0
- package/dist/signals/lib/audio.d.mts +26 -0
- package/dist/signals/lib/audio.mjs +60 -0
- package/dist/signals/lib/audio.test.d.mts +1 -0
- package/dist/signals/lib/audio.test.mjs +54 -0
- package/dist/signals/lib/battery.d.mts +17 -0
- package/dist/signals/lib/battery.mjs +45 -0
- package/dist/signals/lib/battery.test.d.mts +1 -0
- package/dist/signals/lib/battery.test.mjs +38 -0
- package/dist/signals/lib/before-unload.d.mts +11 -0
- package/dist/signals/lib/before-unload.mjs +20 -0
- package/dist/signals/lib/before-unload.test.d.mts +1 -0
- package/dist/signals/lib/before-unload.test.mjs +29 -0
- package/dist/signals/lib/clipboard.d.mts +15 -0
- package/dist/signals/lib/clipboard.mjs +25 -0
- package/dist/signals/lib/clipboard.test.d.mts +1 -0
- package/dist/signals/lib/clipboard.test.mjs +53 -0
- package/dist/signals/lib/counter.d.mts +18 -0
- package/dist/signals/lib/counter.mjs +21 -0
- package/dist/signals/lib/counter.test.d.mts +1 -0
- package/dist/signals/lib/counter.test.mjs +74 -0
- package/dist/signals/lib/debounced.d.mts +12 -0
- package/dist/signals/lib/debounced.mjs +20 -0
- package/dist/signals/lib/debounced.test.d.mts +1 -0
- package/dist/signals/lib/debounced.test.mjs +66 -0
- package/dist/signals/lib/document-title.d.mts +10 -0
- package/dist/signals/lib/document-title.mjs +15 -0
- package/dist/signals/lib/document-title.test.d.mts +1 -0
- package/dist/signals/lib/document-title.test.mjs +33 -0
- package/dist/signals/lib/element-rect.d.mts +21 -0
- package/dist/signals/lib/element-rect.mjs +46 -0
- package/dist/signals/lib/element-rect.test.d.mts +1 -0
- package/dist/signals/lib/element-rect.test.mjs +99 -0
- package/dist/signals/lib/element-size.d.mts +16 -0
- package/dist/signals/lib/element-size.mjs +32 -0
- package/dist/signals/lib/element-size.test.d.mts +1 -0
- package/dist/signals/lib/element-size.test.mjs +86 -0
- package/dist/signals/lib/event-listener.d.mts +14 -0
- package/dist/signals/lib/event-listener.mjs +28 -0
- package/dist/signals/lib/event-listener.test.d.mts +1 -0
- package/dist/signals/lib/event-listener.test.mjs +58 -0
- package/dist/signals/lib/favicon.d.mts +10 -0
- package/dist/signals/lib/favicon.mjs +24 -0
- package/dist/signals/lib/favicon.test.d.mts +1 -0
- package/dist/signals/lib/favicon.test.mjs +28 -0
- package/dist/signals/lib/finite-state-machine.d.mts +22 -0
- package/dist/signals/lib/finite-state-machine.mjs +26 -0
- package/dist/signals/lib/finite-state-machine.test.d.mts +1 -0
- package/dist/signals/lib/finite-state-machine.test.mjs +66 -0
- package/dist/signals/lib/fullscreen.d.mts +15 -0
- package/dist/signals/lib/fullscreen.mjs +26 -0
- package/dist/signals/lib/fullscreen.test.d.mts +1 -0
- package/dist/signals/lib/fullscreen.test.mjs +56 -0
- package/dist/signals/lib/geolocation.d.mts +15 -0
- package/dist/signals/lib/geolocation.mjs +30 -0
- package/dist/signals/lib/geolocation.test.d.mts +1 -0
- package/dist/signals/lib/geolocation.test.mjs +37 -0
- package/dist/signals/lib/hash.d.mts +10 -0
- package/dist/signals/lib/hash.mjs +20 -0
- package/dist/signals/lib/hash.test.d.mts +1 -0
- package/dist/signals/lib/hash.test.mjs +47 -0
- package/dist/signals/lib/hover.d.mts +11 -0
- package/dist/signals/lib/hover.mjs +23 -0
- package/dist/signals/lib/hover.test.d.mts +1 -0
- package/dist/signals/lib/hover.test.mjs +63 -0
- package/dist/signals/lib/intersection-observer.d.mts +8 -0
- package/dist/signals/lib/intersection-observer.mjs +16 -0
- package/dist/signals/lib/intersection-observer.test.d.mts +1 -0
- package/dist/signals/lib/intersection-observer.test.mjs +44 -0
- package/dist/signals/lib/interval.d.mts +18 -0
- package/dist/signals/lib/interval.mjs +38 -0
- package/dist/signals/lib/interval.test.d.mts +1 -0
- package/dist/signals/lib/interval.test.mjs +68 -0
- package/dist/signals/lib/is-document-visible.d.mts +11 -0
- package/dist/signals/lib/is-document-visible.mjs +19 -0
- package/dist/signals/lib/is-document-visible.test.d.mts +1 -0
- package/dist/signals/lib/is-document-visible.test.mjs +58 -0
- package/dist/signals/lib/is-focus-within.d.mts +10 -0
- package/dist/signals/lib/is-focus-within.mjs +28 -0
- package/dist/signals/lib/is-focus-within.test.d.mts +1 -0
- package/dist/signals/lib/is-focus-within.test.mjs +50 -0
- package/dist/signals/lib/is-idle.d.mts +10 -0
- package/dist/signals/lib/is-idle.mjs +37 -0
- package/dist/signals/lib/is-idle.test.d.mts +1 -0
- package/dist/signals/lib/is-idle.test.mjs +50 -0
- package/dist/signals/lib/is-in-viewport.d.mts +10 -0
- package/dist/signals/lib/is-in-viewport.mjs +16 -0
- package/dist/signals/lib/is-in-viewport.test.d.mts +1 -0
- package/dist/signals/lib/is-in-viewport.test.mjs +74 -0
- package/dist/signals/lib/key-press.d.mts +13 -0
- package/dist/signals/lib/key-press.mjs +25 -0
- package/dist/signals/lib/key-press.test.d.mts +1 -0
- package/dist/signals/lib/key-press.test.mjs +52 -0
- package/dist/signals/lib/list.d.mts +19 -0
- package/dist/signals/lib/list.mjs +36 -0
- package/dist/signals/lib/list.test.d.mts +1 -0
- package/dist/signals/lib/list.test.mjs +104 -0
- package/dist/signals/lib/lock-body-scroll.d.mts +8 -0
- package/dist/signals/lib/lock-body-scroll.mjs +17 -0
- package/dist/signals/lib/lock-body-scroll.test.d.mts +1 -0
- package/dist/signals/lib/lock-body-scroll.test.mjs +37 -0
- package/dist/signals/lib/long-press.d.mts +10 -0
- package/dist/signals/lib/long-press.mjs +29 -0
- package/dist/signals/lib/long-press.test.d.mts +1 -0
- package/dist/signals/lib/long-press.test.mjs +52 -0
- package/dist/signals/lib/map.d.mts +18 -0
- package/dist/signals/lib/map.mjs +33 -0
- package/dist/signals/lib/map.test.d.mts +1 -0
- package/dist/signals/lib/map.test.mjs +60 -0
- package/dist/signals/lib/media-devices.d.mts +10 -0
- package/dist/signals/lib/media-devices.mjs +18 -0
- package/dist/signals/lib/media-devices.test.d.mts +1 -0
- package/dist/signals/lib/media-devices.test.mjs +44 -0
- package/dist/signals/lib/media.d.mts +1 -1
- package/dist/signals/lib/motion.d.mts +15 -0
- package/dist/signals/lib/motion.mjs +27 -0
- package/dist/signals/lib/motion.test.d.mts +1 -0
- package/dist/signals/lib/motion.test.mjs +51 -0
- package/dist/signals/lib/mouse-position.d.mts +14 -0
- package/dist/signals/lib/mouse-position.mjs +22 -0
- package/dist/signals/lib/mouse-position.test.d.mts +1 -0
- package/dist/signals/lib/mouse-position.test.mjs +44 -0
- package/dist/signals/lib/mouse-wheel.d.mts +10 -0
- package/dist/signals/lib/mouse-wheel.mjs +17 -0
- package/dist/signals/lib/mouse-wheel.test.d.mts +1 -0
- package/dist/signals/lib/mouse-wheel.test.mjs +38 -0
- package/dist/signals/lib/mutation-observer.d.mts +8 -0
- package/dist/signals/lib/mutation-observer.mjs +16 -0
- package/dist/signals/lib/mutation-observer.test.d.mts +1 -0
- package/dist/signals/lib/mutation-observer.test.mjs +46 -0
- package/dist/signals/lib/network-state.d.mts +17 -0
- package/dist/signals/lib/network-state.mjs +34 -0
- package/dist/signals/lib/network-state.test.d.mts +1 -0
- package/dist/signals/lib/network-state.test.mjs +61 -0
- package/dist/signals/lib/on-click-outside.d.mts +11 -0
- package/dist/signals/lib/on-click-outside.mjs +20 -0
- package/dist/signals/lib/on-click-outside.test.d.mts +1 -0
- package/dist/signals/lib/on-click-outside.test.mjs +54 -0
- package/dist/signals/lib/orientation.d.mts +13 -0
- package/dist/signals/lib/orientation.mjs +21 -0
- package/dist/signals/lib/orientation.test.d.mts +1 -0
- package/dist/signals/lib/orientation.test.mjs +43 -0
- package/dist/signals/lib/page-leave.d.mts +8 -0
- package/dist/signals/lib/page-leave.mjs +12 -0
- package/dist/signals/lib/page-leave.test.d.mts +1 -0
- package/dist/signals/lib/page-leave.test.mjs +29 -0
- package/dist/signals/lib/permission.d.mts +14 -0
- package/dist/signals/lib/permission.mjs +26 -0
- package/dist/signals/lib/permission.test.d.mts +1 -0
- package/dist/signals/lib/permission.test.mjs +50 -0
- package/dist/signals/lib/persisted-state.d.mts +11 -0
- package/dist/signals/lib/persisted-state.mjs +25 -0
- package/dist/signals/lib/persisted-state.test.d.mts +1 -0
- package/dist/signals/lib/persisted-state.test.mjs +70 -0
- package/dist/signals/lib/pressed-keys.d.mts +10 -0
- package/dist/signals/lib/pressed-keys.mjs +32 -0
- package/dist/signals/lib/pressed-keys.test.d.mts +1 -0
- package/dist/signals/lib/pressed-keys.test.mjs +54 -0
- package/dist/signals/lib/previous-distinct.d.mts +10 -0
- package/dist/signals/lib/previous-distinct.mjs +22 -0
- package/dist/signals/lib/previous-distinct.test.d.mts +1 -0
- package/dist/signals/lib/previous-distinct.test.mjs +50 -0
- package/dist/signals/lib/previous.d.mts +10 -0
- package/dist/signals/lib/previous.mjs +18 -0
- package/dist/signals/lib/previous.test.d.mts +1 -0
- package/dist/signals/lib/previous.test.mjs +47 -0
- package/dist/signals/lib/queue.d.mts +17 -0
- package/dist/signals/lib/queue.mjs +28 -0
- package/dist/signals/lib/queue.test.d.mts +1 -0
- package/dist/signals/lib/queue.test.mjs +61 -0
- package/dist/signals/lib/raf.d.mts +17 -0
- package/dist/signals/lib/raf.mjs +38 -0
- package/dist/signals/lib/raf.test.d.mts +1 -0
- package/dist/signals/lib/raf.test.mjs +58 -0
- package/dist/signals/lib/react.d.mts +1 -1
- package/dist/signals/lib/resize-observer.d.mts +8 -0
- package/dist/signals/lib/resize-observer.mjs +16 -0
- package/dist/signals/lib/resize-observer.test.d.mts +1 -0
- package/dist/signals/lib/resize-observer.test.mjs +44 -0
- package/dist/signals/lib/resource.d.mts +23 -0
- package/dist/signals/lib/resource.mjs +43 -0
- package/dist/signals/lib/resource.test.d.mts +1 -0
- package/dist/signals/lib/resource.test.mjs +56 -0
- package/dist/signals/lib/scroll-state.d.mts +19 -0
- package/dist/signals/lib/scroll-state.mjs +46 -0
- package/dist/signals/lib/scroll-state.test.d.mts +1 -0
- package/dist/signals/lib/scroll-state.test.mjs +94 -0
- package/dist/signals/lib/scrolling.d.mts +12 -0
- package/dist/signals/lib/scrolling.mjs +26 -0
- package/dist/signals/lib/scrolling.test.d.mts +1 -0
- package/dist/signals/lib/scrolling.test.mjs +57 -0
- package/dist/signals/lib/search-params.d.mts +16 -0
- package/dist/signals/lib/search-params.mjs +37 -0
- package/dist/signals/lib/search-params.test.d.mts +1 -0
- package/dist/signals/lib/search-params.test.mjs +56 -0
- package/dist/signals/lib/set.d.mts +18 -0
- package/dist/signals/lib/set.mjs +38 -0
- package/dist/signals/lib/set.test.d.mts +1 -0
- package/dist/signals/lib/set.test.mjs +70 -0
- package/dist/signals/lib/start-typing.d.mts +9 -0
- package/dist/signals/lib/start-typing.mjs +39 -0
- package/dist/signals/lib/start-typing.test.d.mts +1 -0
- package/dist/signals/lib/start-typing.test.mjs +64 -0
- package/dist/signals/lib/state-history.d.mts +21 -0
- package/dist/signals/lib/state-history.mjs +61 -0
- package/dist/signals/lib/state-history.test.d.mts +1 -0
- package/dist/signals/lib/state-history.test.mjs +106 -0
- package/dist/signals/lib/state-validator.d.mts +16 -0
- package/dist/signals/lib/state-validator.mjs +21 -0
- package/dist/signals/lib/state-validator.test.d.mts +1 -0
- package/dist/signals/lib/state-validator.test.mjs +41 -0
- package/dist/signals/lib/throttled.d.mts +13 -0
- package/dist/signals/lib/throttled.mjs +45 -0
- package/dist/signals/lib/throttled.test.d.mts +1 -0
- package/dist/signals/lib/throttled.test.mjs +56 -0
- package/dist/signals/lib/timeout.d.mts +16 -0
- package/dist/signals/lib/timeout.mjs +39 -0
- package/dist/signals/lib/timeout.test.d.mts +1 -0
- package/dist/signals/lib/timeout.test.mjs +64 -0
- package/dist/signals/lib/toggle.d.mts +12 -0
- package/dist/signals/lib/toggle.mjs +12 -0
- package/dist/signals/lib/toggle.test.d.mts +1 -0
- package/dist/signals/lib/toggle.test.mjs +43 -0
- package/dist/signals/lib/video.d.mts +25 -0
- package/dist/signals/lib/video.mjs +59 -0
- package/dist/signals/lib/video.test.d.mts +1 -0
- package/dist/signals/lib/video.test.mjs +51 -0
- package/dist/signals/lib/watch.d.mts +16 -0
- package/dist/signals/lib/watch.mjs +31 -0
- package/dist/signals/lib/watch.test.d.mts +1 -0
- package/dist/signals/lib/watch.test.mjs +51 -0
- package/dist/signals/lib/window-size.d.mts +14 -0
- package/dist/signals/lib/window-size.mjs +22 -0
- package/dist/signals/lib/window-size.test.d.mts +1 -0
- package/dist/signals/lib/window-size.test.mjs +50 -0
- package/dist/slot-Cydy7-0L.mjs +180 -0
- package/dist/slot.d.mts +6 -10
- package/dist/slot.mjs +1 -165
- package/dist/test.BmQO5GaM-CR2qjV1t.mjs +13314 -0
- package/package.json +1 -1
- package/dist/lib-DNd01_aS.mjs +0 -15
- /package/dist/{polyfill-BW_B2r6i.d.mts → polyfill-AFIi9kAN.d.mts} +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import "./polyfill-B1lNNcum.mjs";
|
|
2
|
+
//#region src/lib.ts
|
|
3
|
+
var UnsupportedChildError = class extends Error {
|
|
4
|
+
constructor(value) {
|
|
5
|
+
super(`Unsupported child type: ${typeof value}`);
|
|
6
|
+
this.name = "UnsupportedChildError";
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
function resolveNode(c) {
|
|
10
|
+
if (c instanceof Node) return c;
|
|
11
|
+
if (c === null || c === void 0 || typeof c === "boolean") return document.createComment("");
|
|
12
|
+
if (typeof c === "string" || typeof c === "number" || typeof c === "bigint" || typeof c === "symbol" || c instanceof Date || c instanceof RegExp) return document.createTextNode(String(c));
|
|
13
|
+
throw new UnsupportedChildError(c);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/slot.ts
|
|
17
|
+
/**
|
|
18
|
+
* A lightweight slot that reserves a region in the DOM using comment markers.
|
|
19
|
+
* Content between the markers can be replaced dynamically without wrapper elements.
|
|
20
|
+
*/
|
|
21
|
+
var Slot = class Slot {
|
|
22
|
+
start = document.createComment("{");
|
|
23
|
+
end = document.createComment("}");
|
|
24
|
+
#pending;
|
|
25
|
+
/**
|
|
26
|
+
* Render the slot as a DocumentFragment.
|
|
27
|
+
* If not yet mounted, inserts the comment markers and optional default content.
|
|
28
|
+
* If already mounted, extracts and returns the current content WITHOUT disposing
|
|
29
|
+
* it — the caller takes ownership of the returned nodes and is responsible for
|
|
30
|
+
* their disposal.
|
|
31
|
+
*/
|
|
32
|
+
slot(defaultContent) {
|
|
33
|
+
const fragment = document.createDocumentFragment();
|
|
34
|
+
if (this.isMounted()) {
|
|
35
|
+
const range = document.createRange();
|
|
36
|
+
range.setStartAfter(this.start);
|
|
37
|
+
range.setEndBefore(this.end);
|
|
38
|
+
fragment.appendChild(range.extractContents());
|
|
39
|
+
return fragment;
|
|
40
|
+
}
|
|
41
|
+
fragment.appendChild(this.start);
|
|
42
|
+
fragment.appendChild(this.end);
|
|
43
|
+
const initialContent = this.#pending ?? resolveNode(defaultContent);
|
|
44
|
+
if (initialContent) fragment.insertBefore(initialContent, this.end);
|
|
45
|
+
this.#pending = void 0;
|
|
46
|
+
return fragment;
|
|
47
|
+
}
|
|
48
|
+
/** Dispose reactive children and remove all content between the markers. */
|
|
49
|
+
clear() {
|
|
50
|
+
let node = this.start.nextSibling;
|
|
51
|
+
while (node && node !== this.end) {
|
|
52
|
+
const next = node.nextSibling;
|
|
53
|
+
if (node instanceof Element) node[Symbol.dispose]?.();
|
|
54
|
+
node = next;
|
|
55
|
+
}
|
|
56
|
+
const range = document.createRange();
|
|
57
|
+
range.setStartAfter(this.start);
|
|
58
|
+
range.setEndBefore(this.end);
|
|
59
|
+
range.deleteContents();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Replace the slot's content with the given element.
|
|
63
|
+
* No-op if the slot is not mounted or the content is identical.
|
|
64
|
+
*/
|
|
65
|
+
set(element) {
|
|
66
|
+
const parent = this.parent();
|
|
67
|
+
if (!parent) {
|
|
68
|
+
this.#pending = element;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (this.isSame(element)) return;
|
|
72
|
+
this.clear();
|
|
73
|
+
parent.insertBefore(element, this.end);
|
|
74
|
+
this.#pending = void 0;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract and return the current slot content as a DocumentFragment.
|
|
78
|
+
* Returns `null` if the slot is not mounted.
|
|
79
|
+
* Content is NOT disposed — the caller takes ownership and is responsible
|
|
80
|
+
* for disposal.
|
|
81
|
+
*/
|
|
82
|
+
get() {
|
|
83
|
+
if (!this.isMounted()) return null;
|
|
84
|
+
const range = document.createRange();
|
|
85
|
+
range.setStartAfter(this.start);
|
|
86
|
+
range.setEndBefore(this.end);
|
|
87
|
+
return range.extractContents();
|
|
88
|
+
}
|
|
89
|
+
/** Returns the parent node if the slot is mounted, otherwise `null`. */
|
|
90
|
+
parent() {
|
|
91
|
+
return this.isMounted() ? this.start.parentNode : null;
|
|
92
|
+
}
|
|
93
|
+
/** Whether the slot's comment markers are attached to the DOM. */
|
|
94
|
+
isMounted() {
|
|
95
|
+
return this.start.parentNode === this.end.parentNode && !!this.start.parentNode;
|
|
96
|
+
}
|
|
97
|
+
isSame(element) {
|
|
98
|
+
return this.start.nextSibling === element && this.end === element.nextSibling;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a callable slot instance.
|
|
102
|
+
*
|
|
103
|
+
* The returned value is both a function and an object:
|
|
104
|
+
* - Call it to render the slot with optional default content.
|
|
105
|
+
* - Access `.set()`, `.parent()`, `.isMounted()` for slot management.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const slot = createSlot();
|
|
110
|
+
* el.append(slot("default text")); // mount with default
|
|
111
|
+
* slot.set(newElement); // replace content
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
static new() {
|
|
115
|
+
const instance = new Slot();
|
|
116
|
+
return new Proxy(instance.slot.bind(instance), {
|
|
117
|
+
apply(target, _thisArg, argArray) {
|
|
118
|
+
return target(...argArray);
|
|
119
|
+
},
|
|
120
|
+
get(_target, prop) {
|
|
121
|
+
const value = instance[prop];
|
|
122
|
+
return typeof value === "function" ? value.bind(instance) : value;
|
|
123
|
+
},
|
|
124
|
+
getPrototypeOf() {
|
|
125
|
+
return Slot.prototype;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
/** A callable slot — invoke to render, or access `.set()` / `.isMounted()` / `.parent()` for management. */
|
|
131
|
+
/**
|
|
132
|
+
* Symbol key for attaching a `Slots` instance to a custom element instance.
|
|
133
|
+
* This prevent collisions with Element properties and are not meant to be treated as JSX children.
|
|
134
|
+
*/
|
|
135
|
+
const $slots = Symbol("slots");
|
|
136
|
+
const $map = Symbol("map");
|
|
137
|
+
const $keys = Symbol("keys");
|
|
138
|
+
const $has = Symbol("has");
|
|
139
|
+
/**
|
|
140
|
+
* A keyed collection of slot instances.
|
|
141
|
+
* Slots are pre-created from the provided keys and lazily created on first access for unknown keys.
|
|
142
|
+
*/
|
|
143
|
+
var Slots = class Slots {
|
|
144
|
+
[$map] = /* @__PURE__ */ new Map();
|
|
145
|
+
constructor(keys = []) {
|
|
146
|
+
for (const key of keys) this[$map].set(key, Slot.new());
|
|
147
|
+
}
|
|
148
|
+
[Symbol.iterator]() {
|
|
149
|
+
return this[$map][Symbol.iterator]();
|
|
150
|
+
}
|
|
151
|
+
[Symbol.toStringTag]() {
|
|
152
|
+
return "Slots";
|
|
153
|
+
}
|
|
154
|
+
[Symbol.hasInstance](instance) {
|
|
155
|
+
return instance instanceof Slots;
|
|
156
|
+
}
|
|
157
|
+
[$has](key) {
|
|
158
|
+
return this[$map].has(key);
|
|
159
|
+
}
|
|
160
|
+
/** Check whether a slot with the given key exists. */
|
|
161
|
+
static has(slots, key) {
|
|
162
|
+
return slots[$has](key);
|
|
163
|
+
}
|
|
164
|
+
[$keys]() {
|
|
165
|
+
return this[$map].keys();
|
|
166
|
+
}
|
|
167
|
+
/** Iterate over all registered slot keys. */
|
|
168
|
+
static keys(slots) {
|
|
169
|
+
return slots[$keys]();
|
|
170
|
+
}
|
|
171
|
+
static new(keys) {
|
|
172
|
+
const instance = new Slots(keys);
|
|
173
|
+
return new Proxy(instance, { get(target, prop, receiver) {
|
|
174
|
+
if (typeof prop === "string" && target[$map].has(prop)) return target[$map].get(prop);
|
|
175
|
+
return Reflect.get(target, prop, receiver);
|
|
176
|
+
} });
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
//#endregion
|
|
180
|
+
export { resolveNode as i, Slot as n, Slots as r, $slots as t };
|
package/dist/slot.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as PrimitiveNodeType } from "./polyfill-AFIi9kAN.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/slot.d.ts
|
|
4
4
|
/**
|
|
@@ -6,13 +6,9 @@ import { o as ElementBuilder } from "./index-Ukqj0EcT.mjs";
|
|
|
6
6
|
* Content between the markers can be replaced dynamically without wrapper elements.
|
|
7
7
|
*/
|
|
8
8
|
declare class Slot {
|
|
9
|
+
#private;
|
|
9
10
|
private readonly start;
|
|
10
11
|
private readonly end;
|
|
11
|
-
/**
|
|
12
|
-
* Render the slot as a DocumentFragment.
|
|
13
|
-
* If not yet mounted, inserts the comment markers and optional default content.
|
|
14
|
-
* If already mounted, extracts and returns the current content.
|
|
15
|
-
*/
|
|
16
12
|
/**
|
|
17
13
|
* Render the slot as a DocumentFragment.
|
|
18
14
|
* If not yet mounted, inserts the comment markers and optional default content.
|
|
@@ -20,7 +16,7 @@ declare class Slot {
|
|
|
20
16
|
* it — the caller takes ownership of the returned nodes and is responsible for
|
|
21
17
|
* their disposal.
|
|
22
18
|
*/
|
|
23
|
-
slot(defaultContent?:
|
|
19
|
+
slot(defaultContent?: PrimitiveNodeType): DocumentFragment;
|
|
24
20
|
/** Dispose reactive children and remove all content between the markers. */
|
|
25
21
|
clear(): void;
|
|
26
22
|
/**
|
|
@@ -54,7 +50,7 @@ declare class Slot {
|
|
|
54
50
|
* slot.set(newElement); // replace content
|
|
55
51
|
* ```
|
|
56
52
|
*/
|
|
57
|
-
static new(): Slot & ((defaultContent?:
|
|
53
|
+
static new(): Slot & ((defaultContent?: PrimitiveNodeType) => DocumentFragment);
|
|
58
54
|
}
|
|
59
55
|
type SlotInstance = ReturnType<typeof Slot.new>;
|
|
60
56
|
/** A callable slot — invoke to render, or access `.set()` / `.isMounted()` / `.parent()` for management. */
|
|
@@ -71,9 +67,9 @@ declare const $has: unique symbol;
|
|
|
71
67
|
* Slots are pre-created from the provided keys and lazily created on first access for unknown keys.
|
|
72
68
|
*/
|
|
73
69
|
declare class Slots<K extends string> implements Iterable<[K, SlotInstance]> {
|
|
74
|
-
readonly [$map]: Map<K, Slot & ((defaultContent?:
|
|
70
|
+
readonly [$map]: Map<K, Slot & ((defaultContent?: PrimitiveNodeType) => DocumentFragment)>;
|
|
75
71
|
private constructor();
|
|
76
|
-
[Symbol.iterator](): MapIterator<[K, Slot & ((defaultContent?:
|
|
72
|
+
[Symbol.iterator](): MapIterator<[K, Slot & ((defaultContent?: PrimitiveNodeType) => DocumentFragment)]>;
|
|
77
73
|
[Symbol.toStringTag](): string;
|
|
78
74
|
[Symbol.hasInstance](instance: unknown): instance is Slots<any>;
|
|
79
75
|
[$has](key: K): boolean;
|
package/dist/slot.mjs
CHANGED
|
@@ -1,166 +1,2 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
//#region src/slot.ts
|
|
3
|
-
/**
|
|
4
|
-
* A lightweight slot that reserves a region in the DOM using comment markers.
|
|
5
|
-
* Content between the markers can be replaced dynamically without wrapper elements.
|
|
6
|
-
*/
|
|
7
|
-
var Slot = class Slot {
|
|
8
|
-
start = document.createComment("{");
|
|
9
|
-
end = document.createComment("}");
|
|
10
|
-
/**
|
|
11
|
-
* Render the slot as a DocumentFragment.
|
|
12
|
-
* If not yet mounted, inserts the comment markers and optional default content.
|
|
13
|
-
* If already mounted, extracts and returns the current content.
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Render the slot as a DocumentFragment.
|
|
17
|
-
* If not yet mounted, inserts the comment markers and optional default content.
|
|
18
|
-
* If already mounted, extracts and returns the current content WITHOUT disposing
|
|
19
|
-
* it — the caller takes ownership of the returned nodes and is responsible for
|
|
20
|
-
* their disposal.
|
|
21
|
-
*/
|
|
22
|
-
slot(defaultContent) {
|
|
23
|
-
const fragment = document.createDocumentFragment();
|
|
24
|
-
if (this.isMounted()) {
|
|
25
|
-
const range = document.createRange();
|
|
26
|
-
range.setStartAfter(this.start);
|
|
27
|
-
range.setEndBefore(this.end);
|
|
28
|
-
fragment.appendChild(range.extractContents());
|
|
29
|
-
return fragment;
|
|
30
|
-
}
|
|
31
|
-
fragment.appendChild(this.start);
|
|
32
|
-
fragment.appendChild(this.end);
|
|
33
|
-
if (defaultContent) {
|
|
34
|
-
const defaultNode = typeof defaultContent === "string" ? document.createTextNode(defaultContent) : defaultContent instanceof Node ? defaultContent : defaultContent.ref();
|
|
35
|
-
fragment.insertBefore(defaultNode, this.end);
|
|
36
|
-
}
|
|
37
|
-
return fragment;
|
|
38
|
-
}
|
|
39
|
-
/** Dispose reactive children and remove all content between the markers. */
|
|
40
|
-
clear() {
|
|
41
|
-
let node = this.start.nextSibling;
|
|
42
|
-
while (node && node !== this.end) {
|
|
43
|
-
const next = node.nextSibling;
|
|
44
|
-
if (node instanceof Element) node[Symbol.dispose]?.();
|
|
45
|
-
node = next;
|
|
46
|
-
}
|
|
47
|
-
const range = document.createRange();
|
|
48
|
-
range.setStartAfter(this.start);
|
|
49
|
-
range.setEndBefore(this.end);
|
|
50
|
-
range.deleteContents();
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Replace the slot's content with the given element.
|
|
54
|
-
* No-op if the slot is not mounted or the content is identical.
|
|
55
|
-
*/
|
|
56
|
-
set(element) {
|
|
57
|
-
const parent = this.parent();
|
|
58
|
-
if (!parent) return;
|
|
59
|
-
if (this.isSame(element)) return;
|
|
60
|
-
this.clear();
|
|
61
|
-
parent.insertBefore(element, this.end);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Extract and return the current slot content as a DocumentFragment.
|
|
65
|
-
* Returns `null` if the slot is not mounted.
|
|
66
|
-
* Content is NOT disposed — the caller takes ownership and is responsible
|
|
67
|
-
* for disposal.
|
|
68
|
-
*/
|
|
69
|
-
get() {
|
|
70
|
-
if (!this.isMounted()) return null;
|
|
71
|
-
const range = document.createRange();
|
|
72
|
-
range.setStartAfter(this.start);
|
|
73
|
-
range.setEndBefore(this.end);
|
|
74
|
-
return range.extractContents();
|
|
75
|
-
}
|
|
76
|
-
/** Returns the parent node if the slot is mounted, otherwise `null`. */
|
|
77
|
-
parent() {
|
|
78
|
-
return this.isMounted() ? this.start.parentNode : null;
|
|
79
|
-
}
|
|
80
|
-
/** Whether the slot's comment markers are attached to the DOM. */
|
|
81
|
-
isMounted() {
|
|
82
|
-
return this.start.parentNode === this.end.parentNode && !!this.start.parentNode;
|
|
83
|
-
}
|
|
84
|
-
isSame(element) {
|
|
85
|
-
return this.start.nextSibling === element && this.end === element.nextSibling;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Create a callable slot instance.
|
|
89
|
-
*
|
|
90
|
-
* The returned value is both a function and an object:
|
|
91
|
-
* - Call it to render the slot with optional default content.
|
|
92
|
-
* - Access `.set()`, `.parent()`, `.isMounted()` for slot management.
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```ts
|
|
96
|
-
* const slot = createSlot();
|
|
97
|
-
* el.append(slot("default text")); // mount with default
|
|
98
|
-
* slot.set(newElement); // replace content
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
static new() {
|
|
102
|
-
const instance = new Slot();
|
|
103
|
-
return new Proxy(instance.slot.bind(instance), {
|
|
104
|
-
apply(target, _thisArg, argArray) {
|
|
105
|
-
return target(...argArray);
|
|
106
|
-
},
|
|
107
|
-
get(_target, prop) {
|
|
108
|
-
return instance[prop];
|
|
109
|
-
},
|
|
110
|
-
getPrototypeOf() {
|
|
111
|
-
return Slot.prototype;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
/** A callable slot — invoke to render, or access `.set()` / `.isMounted()` / `.parent()` for management. */
|
|
117
|
-
/**
|
|
118
|
-
* Symbol key for attaching a `Slots` instance to a custom element instance.
|
|
119
|
-
* This prevent collisions with Element properties and are not meant to be treated as JSX children.
|
|
120
|
-
*/
|
|
121
|
-
const $slots = Symbol("slots");
|
|
122
|
-
const $map = Symbol("map");
|
|
123
|
-
const $keys = Symbol("keys");
|
|
124
|
-
const $has = Symbol("has");
|
|
125
|
-
/**
|
|
126
|
-
* A keyed collection of slot instances.
|
|
127
|
-
* Slots are pre-created from the provided keys and lazily created on first access for unknown keys.
|
|
128
|
-
*/
|
|
129
|
-
var Slots = class Slots {
|
|
130
|
-
[$map] = /* @__PURE__ */ new Map();
|
|
131
|
-
constructor(keys = []) {
|
|
132
|
-
for (const key of keys) this[$map].set(key, Slot.new());
|
|
133
|
-
}
|
|
134
|
-
[Symbol.iterator]() {
|
|
135
|
-
return this[$map][Symbol.iterator]();
|
|
136
|
-
}
|
|
137
|
-
[Symbol.toStringTag]() {
|
|
138
|
-
return "Slots";
|
|
139
|
-
}
|
|
140
|
-
[Symbol.hasInstance](instance) {
|
|
141
|
-
return instance instanceof Slots;
|
|
142
|
-
}
|
|
143
|
-
[$has](key) {
|
|
144
|
-
return this[$map].has(key);
|
|
145
|
-
}
|
|
146
|
-
/** Check whether a slot with the given key exists. */
|
|
147
|
-
static has(slots, key) {
|
|
148
|
-
return slots[$has](key);
|
|
149
|
-
}
|
|
150
|
-
[$keys]() {
|
|
151
|
-
return this[$map].keys();
|
|
152
|
-
}
|
|
153
|
-
/** Iterate over all registered slot keys. */
|
|
154
|
-
static keys(slots) {
|
|
155
|
-
return slots[$keys]();
|
|
156
|
-
}
|
|
157
|
-
static new(keys) {
|
|
158
|
-
const instance = new Slots(keys);
|
|
159
|
-
return new Proxy(instance, { get(target, prop, receiver) {
|
|
160
|
-
if (typeof prop === "string" && target[$map].has(prop)) return target[$map].get(prop);
|
|
161
|
-
return Reflect.get(target, prop, receiver);
|
|
162
|
-
} });
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
//#endregion
|
|
1
|
+
import { n as Slot, r as Slots, t as $slots } from "./slot-Cydy7-0L.mjs";
|
|
166
2
|
export { $slots, Slot, Slots };
|