octane 0.2.12 → 0.2.13
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 +5 -0
- package/dist/behavior-root.d.ts +13 -3
- package/dist/behavior-root.js +28 -5
- package/dist/cjs/behavior-root.cjs +32 -6
- package/dist/cjs/class-names.cjs +49 -0
- package/dist/cjs/constants.cjs +9 -0
- package/dist/cjs/css.cjs +6 -27
- package/dist/cjs/data-encoding.cjs +160 -0
- package/dist/cjs/dom-binding-handoff.cjs +93 -0
- package/dist/cjs/dom-binding-protocol.cjs +115 -0
- package/dist/cjs/dom-binding-styles.cjs +292 -0
- package/dist/cjs/dom-bindings.cjs +700 -0
- package/dist/cjs/dom-focused-move.cjs +66 -0
- package/dist/cjs/dom-tables.cjs +4 -94
- package/dist/cjs/error-codes.client.generated.cjs +33 -0
- package/dist/cjs/error-codes.server.generated.cjs +19 -0
- package/dist/cjs/hydration/control-capture.cjs +244 -0
- package/dist/cjs/hydration/event-capture.cjs +125 -43
- package/dist/cjs/hydration/interaction-config.cjs +50 -2
- package/dist/cjs/hydration-markers.cjs +37 -0
- package/dist/cjs/independent-hydration-protocol.cjs +106 -0
- package/dist/cjs/index.cjs +6 -0
- package/dist/cjs/runtime.cjs +2791 -215
- package/dist/cjs/runtime.server.cjs +716 -76
- package/dist/cjs/server/early-signals.cjs +45 -0
- package/dist/cjs/server/index.cjs +44 -0
- package/dist/cjs/server/rpc-batch.cjs +149 -0
- package/dist/cjs/server/rpc-stream.cjs +146 -0
- package/dist/cjs/server/rpc.cjs +34 -15
- package/dist/cjs/server/signal-query-observation.cjs +158 -0
- package/dist/cjs/server/streamed-region.cjs +52 -0
- package/dist/cjs/server/streamed-signals.cjs +512 -0
- package/dist/cjs/server-call.cjs +103 -0
- package/dist/cjs/server-rpc-batch-client.cjs +141 -0
- package/dist/cjs/server-rpc-client.cjs +94 -27
- package/dist/cjs/server-rpc-protocol.cjs +141 -0
- package/dist/cjs/server-rpc-stream-client.cjs +118 -0
- package/dist/cjs/signals/actions.cjs +474 -0
- package/dist/cjs/signals/client.cjs +4 -1
- package/dist/cjs/signals/computations.cjs +460 -0
- package/dist/cjs/signals/control-binding.cjs +368 -0
- package/dist/cjs/signals/derived-facade.cjs +50 -0
- package/dist/cjs/signals/document-owner.cjs +71 -0
- package/dist/cjs/signals/early-values.cjs +155 -0
- package/dist/cjs/signals/encoding.cjs +6 -95
- package/dist/cjs/signals/engine.cjs +276 -12
- package/dist/cjs/signals/errors.cjs +18 -0
- package/dist/cjs/signals/facade.cjs +477 -0
- package/dist/cjs/signals/graph.cjs +163 -20
- package/dist/cjs/signals/handle-protocol.cjs +36 -0
- package/dist/cjs/signals/index.cjs +81 -2
- package/dist/cjs/signals/native-read-client.cjs +10 -0
- package/dist/cjs/signals/owner-context.cjs +112 -0
- package/dist/cjs/signals/query-attempt-observer.cjs +68 -0
- package/dist/cjs/signals/query-facade.cjs +72 -0
- package/dist/cjs/signals/read-protocol.cjs +32 -0
- package/dist/cjs/signals/requests.cjs +287 -14
- package/dist/cjs/signals/scalar-computations.cjs +76 -0
- package/dist/cjs/signals/server.cjs +4 -1
- package/dist/cjs/signals/transition-candidate.cjs +567 -0
- package/dist/cjs/signals/transition-state.cjs +106 -0
- package/dist/cjs/signals/types.cjs +50 -0
- package/dist/cjs/stream-protocol.cjs +3 -0
- package/dist/cjs/streamed-signals-protocol.cjs +159 -0
- package/dist/cjs/style-values.cjs +122 -0
- package/dist/cjs/version.cjs +1 -1
- package/dist/class-names.d.ts +5 -0
- package/dist/class-names.js +25 -0
- package/dist/compiler/bundler.js +34 -6
- package/dist/compiler/compile.js +2234 -559
- package/dist/compiler/dom-binding-program.js +935 -0
- package/dist/compiler/dom-binding-request.js +57 -0
- package/dist/compiler/dom-bindings.js +2245 -0
- package/dist/compiler/hook-deps.js +26 -0
- package/dist/compiler/hydrate-boundaries.js +358 -15
- package/dist/compiler/index.d.ts +38 -1
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/native-attribute-reads.js +127 -0
- package/dist/compiler/native-read-diagnostics.js +48 -9
- package/dist/compiler/native-read-types.js +55 -32
- package/dist/compiler/server-context.js +118 -0
- package/dist/compiler/signal-attempt-reads.js +479 -0
- package/dist/compiler/signal-declarations.js +557 -0
- package/dist/compiler/signal-start-reads.js +413 -0
- package/dist/compiler/slot-hooks.js +57 -10
- package/dist/compiler/template-ir.js +200 -0
- package/dist/compiler/typescript.d.ts +2 -0
- package/dist/compiler/typescript.js +2 -0
- package/dist/compiler/vite.d.ts +3 -1
- package/dist/compiler/vite.js +122 -4
- package/dist/compiler/volar.d.ts +6 -1
- package/dist/compiler/volar.js +674 -143
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +10 -0
- package/dist/css.d.ts +2 -5
- package/dist/css.js +2 -23
- package/dist/data-encoding.d.ts +9 -0
- package/dist/data-encoding.js +134 -0
- package/dist/dom-binding-classes.d.ts +15 -0
- package/dist/dom-binding-classes.js +129 -0
- package/dist/dom-binding-controls.d.ts +2 -0
- package/dist/dom-binding-controls.js +6 -0
- package/dist/dom-binding-handoff.d.ts +55 -0
- package/dist/dom-binding-handoff.js +62 -0
- package/dist/dom-binding-program.d.ts +300 -0
- package/dist/dom-binding-program.js +1625 -0
- package/dist/dom-binding-projections.d.ts +15 -0
- package/dist/dom-binding-projections.js +187 -0
- package/dist/dom-binding-protocol.d.ts +13 -0
- package/dist/dom-binding-protocol.js +88 -0
- package/dist/dom-binding-signals.d.ts +21 -0
- package/dist/dom-binding-signals.js +109 -0
- package/dist/dom-binding-styles.d.ts +17 -0
- package/dist/dom-binding-styles.js +272 -0
- package/dist/dom-bindings.d.ts +89 -0
- package/dist/dom-bindings.js +670 -0
- package/dist/dom-focused-move.d.ts +6 -0
- package/dist/dom-focused-move.js +42 -0
- package/dist/dom-tables.d.ts +1 -3
- package/dist/dom-tables.js +1 -91
- package/dist/error-codes.client.generated.d.ts +9 -0
- package/dist/error-codes.client.generated.js +33 -0
- package/dist/error-codes.server.generated.d.ts +5 -0
- package/dist/error-codes.server.generated.js +19 -0
- package/dist/hydration/control-capture.d.ts +62 -0
- package/dist/hydration/control-capture.js +223 -0
- package/dist/hydration/document-lifecycle.d.ts +23 -0
- package/dist/hydration/document-lifecycle.js +80 -0
- package/dist/hydration/event-capture.d.ts +20 -1
- package/dist/hydration/event-capture.js +128 -42
- package/dist/hydration/independent-island.d.ts +45 -0
- package/dist/hydration/independent-island.js +233 -0
- package/dist/hydration/index.d.ts +8 -1
- package/dist/hydration/index.js +55 -1
- package/dist/hydration/interaction-config.d.ts +5 -0
- package/dist/hydration/interaction-config.js +44 -1
- package/dist/hydration/stream-delivery.d.ts +32 -0
- package/dist/hydration/stream-delivery.js +333 -0
- package/dist/hydration/stream-receiver.d.ts +26 -0
- package/dist/hydration/stream-receiver.js +204 -0
- package/dist/hydration/stream-result-receiver.d.ts +70 -0
- package/dist/hydration/stream-result-receiver.js +246 -0
- package/dist/hydration/streamed-signals.d.ts +44 -0
- package/dist/hydration/streamed-signals.js +186 -0
- package/dist/hydration/types.d.ts +6 -0
- package/dist/hydration-markers.d.ts +7 -0
- package/dist/hydration-markers.js +10 -0
- package/dist/independent-hydration-protocol.d.ts +31 -0
- package/dist/independent-hydration-protocol.js +80 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/internal/signal-read.d.ts +1 -0
- package/dist/internal/signal-read.js +4 -0
- package/dist/jsx-runtime.d.ts +45 -6
- package/dist/public-types.d.ts +15 -1
- package/dist/runtime.d.ts +259 -21
- package/dist/runtime.js +2812 -220
- package/dist/runtime.server.d.ts +86 -6
- package/dist/runtime.server.js +712 -76
- package/dist/server/early-signals.d.ts +14 -0
- package/dist/server/early-signals.js +34 -0
- package/dist/server/index.d.ts +10 -2
- package/dist/server/index.js +48 -1
- package/dist/server/rpc-batch.d.ts +17 -0
- package/dist/server/rpc-batch.js +129 -0
- package/dist/server/rpc-stream.d.ts +9 -0
- package/dist/server/rpc-stream.js +125 -0
- package/dist/server/rpc.d.ts +5 -1
- package/dist/server/rpc.js +37 -13
- package/dist/server/signal-query-observation.d.ts +3 -0
- package/dist/server/signal-query-observation.js +134 -0
- package/dist/server/streamed-region.d.ts +15 -0
- package/dist/server/streamed-region.js +30 -0
- package/dist/server/streamed-signals.d.ts +45 -0
- package/dist/server/streamed-signals.js +488 -0
- package/dist/server-call.d.ts +41 -0
- package/dist/server-call.js +75 -0
- package/dist/server-rpc-batch-client.d.ts +7 -0
- package/dist/server-rpc-batch-client.js +119 -0
- package/dist/server-rpc-client.d.ts +3 -1
- package/dist/server-rpc-client.js +99 -27
- package/dist/server-rpc-protocol.d.ts +47 -0
- package/dist/server-rpc-protocol.js +109 -0
- package/dist/server-rpc-stream-client.d.ts +5 -0
- package/dist/server-rpc-stream-client.js +98 -0
- package/dist/signals/actions.d.ts +12 -0
- package/dist/signals/actions.js +466 -0
- package/dist/signals/client.d.ts +2 -0
- package/dist/signals/client.js +1 -0
- package/dist/signals/computations.d.ts +37 -0
- package/dist/signals/computations.js +455 -0
- package/dist/signals/control-binding.d.ts +31 -0
- package/dist/signals/control-binding.js +353 -0
- package/dist/signals/derived-facade.d.ts +3 -0
- package/dist/signals/derived-facade.js +25 -0
- package/dist/signals/document-owner.d.ts +10 -0
- package/dist/signals/document-owner.js +43 -0
- package/dist/signals/early-values.d.ts +24 -0
- package/dist/signals/early-values.js +124 -0
- package/dist/signals/encoding.d.ts +1 -3
- package/dist/signals/encoding.js +3 -93
- package/dist/signals/engine.d.ts +53 -4
- package/dist/signals/engine.js +275 -16
- package/dist/signals/errors.d.ts +7 -0
- package/dist/signals/errors.js +16 -0
- package/dist/signals/facade.d.ts +74 -0
- package/dist/signals/facade.js +452 -0
- package/dist/signals/graph.d.ts +50 -5
- package/dist/signals/graph.js +170 -19
- package/dist/signals/handle-protocol.d.ts +4 -0
- package/dist/signals/handle-protocol.js +11 -0
- package/dist/signals/index.d.ts +12 -3
- package/dist/signals/index.js +71 -2
- package/dist/signals/native-read-client.d.ts +3 -0
- package/dist/signals/native-read-client.js +10 -0
- package/dist/signals/owner-context.d.ts +22 -0
- package/dist/signals/owner-context.js +77 -0
- package/dist/signals/query-attempt-observer.d.ts +49 -0
- package/dist/signals/query-attempt-observer.js +41 -0
- package/dist/signals/query-facade.d.ts +3 -0
- package/dist/signals/query-facade.js +49 -0
- package/dist/signals/read-protocol.d.ts +32 -3
- package/dist/signals/read-protocol.js +26 -0
- package/dist/signals/requests.d.ts +38 -5
- package/dist/signals/requests.js +298 -15
- package/dist/signals/scalar-computations.d.ts +2 -0
- package/dist/signals/scalar-computations.js +60 -0
- package/dist/signals/server.d.ts +2 -0
- package/dist/signals/server.js +1 -0
- package/dist/signals/transition-candidate.d.ts +71 -0
- package/dist/signals/transition-candidate.js +557 -0
- package/dist/signals/transition-state.d.ts +51 -0
- package/dist/signals/transition-state.js +70 -0
- package/dist/signals/types.d.ts +95 -5
- package/dist/signals/types.js +20 -0
- package/dist/stream-protocol.d.ts +0 -5
- package/dist/stream-protocol.js +3 -0
- package/dist/streamed-signals-protocol.d.ts +60 -0
- package/dist/streamed-signals-protocol.js +130 -0
- package/dist/style-values.d.ts +3 -0
- package/dist/style-values.js +96 -0
- package/dist/version.js +1 -1
- package/package.json +37 -1
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { cssStyleValue, hyphenateStyleName } from "./style-values.js";
|
|
2
|
+
import { __writeBinding } from "./dom-bindings.js";
|
|
3
|
+
import { captureSignalOwner, currentSignalOwner } from "./signals/owner-context.js";
|
|
4
|
+
import {
|
|
5
|
+
beginNativeWriteGuard,
|
|
6
|
+
endNativeWriteGuard,
|
|
7
|
+
forwardNativeTransitionConsumer,
|
|
8
|
+
readNativeDomStyle,
|
|
9
|
+
setNativeReadObserver
|
|
10
|
+
} from "./signals/read-protocol.js";
|
|
11
|
+
function __prepareBindingSources(reads, subscriptions, notify, active, run) {
|
|
12
|
+
const previous = new Map(subscriptions);
|
|
13
|
+
const acquired = /* @__PURE__ */ new Map();
|
|
14
|
+
let accepted = false;
|
|
15
|
+
let retired = false;
|
|
16
|
+
let invalid = false;
|
|
17
|
+
try {
|
|
18
|
+
for (const source of reads.keys()) {
|
|
19
|
+
if (previous.has(source)) continue;
|
|
20
|
+
let live = true;
|
|
21
|
+
const stop = run(
|
|
22
|
+
() => source.subscribe(
|
|
23
|
+
forwardNativeTransitionConsumer(notify, () => {
|
|
24
|
+
if (!live || retired || !active()) return;
|
|
25
|
+
if (!accepted) invalid = true;
|
|
26
|
+
else notify();
|
|
27
|
+
})
|
|
28
|
+
)
|
|
29
|
+
);
|
|
30
|
+
acquired.set(source, () => {
|
|
31
|
+
live = false;
|
|
32
|
+
stop();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
} catch (error) {
|
|
36
|
+
for (const stop of acquired.values()) stop();
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
validate: () => !retired && !invalid && active() && subscriptions.size === previous.size && [...previous].every(([source, stop]) => subscriptions.get(source) === stop) && [...reads].every(([source, version]) => source.getVersion() === version),
|
|
41
|
+
commit() {
|
|
42
|
+
if (accepted || retired || !active()) return;
|
|
43
|
+
accepted = true;
|
|
44
|
+
for (const [source, stop] of acquired) subscriptions.set(source, stop);
|
|
45
|
+
for (const [source, stop] of previous) {
|
|
46
|
+
if (reads.has(source)) continue;
|
|
47
|
+
subscriptions.delete(source);
|
|
48
|
+
stop();
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
discard() {
|
|
52
|
+
if (accepted || retired) return;
|
|
53
|
+
retired = true;
|
|
54
|
+
for (const stop of acquired.values()) stop();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function __normalizeBindingStyle(value) {
|
|
59
|
+
if (value == null || value === false || value === "") return null;
|
|
60
|
+
if (typeof value === "string") return value;
|
|
61
|
+
if (typeof value !== "object")
|
|
62
|
+
throw new TypeError("A whole-style DOM binding requires a style object, CSS text or null.");
|
|
63
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
64
|
+
for (const name in value) {
|
|
65
|
+
const property = value[name];
|
|
66
|
+
result[name] = property == null || typeof property === "boolean" ? null : cssStyleValue(name, property);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
function __createBindingStyles() {
|
|
71
|
+
const owner = currentSignalOwner();
|
|
72
|
+
const run = owner === null ? (callback) => callback() : captureSignalOwner(owner);
|
|
73
|
+
return {
|
|
74
|
+
connect(node, notify, restoreStyles = false) {
|
|
75
|
+
let raw;
|
|
76
|
+
let disposed = false;
|
|
77
|
+
const subscriptions = /* @__PURE__ */ new Map();
|
|
78
|
+
let previous = null;
|
|
79
|
+
let firstWrite = true;
|
|
80
|
+
const style = node.style;
|
|
81
|
+
let restorations;
|
|
82
|
+
let baseline;
|
|
83
|
+
let expected;
|
|
84
|
+
let probe;
|
|
85
|
+
const snapshotDOM = () => {
|
|
86
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
87
|
+
for (let i = 0; i < style.length; i++) {
|
|
88
|
+
const name = style.item(i);
|
|
89
|
+
result[name] = style.getPropertyValue(name) + (style.getPropertyPriority(name) ? " !important" : "");
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
};
|
|
93
|
+
previous = snapshotDOM();
|
|
94
|
+
const get = () => {
|
|
95
|
+
if (disposed) return null;
|
|
96
|
+
const reads = /* @__PURE__ */ new Map();
|
|
97
|
+
const previousObserver = setNativeReadObserver(
|
|
98
|
+
(source, version) => reads.set(source, version)
|
|
99
|
+
);
|
|
100
|
+
const guard = beginNativeWriteGuard();
|
|
101
|
+
let value;
|
|
102
|
+
try {
|
|
103
|
+
value = run(() => __normalizeBindingStyle(readNativeDomStyle(raw)));
|
|
104
|
+
} finally {
|
|
105
|
+
endNativeWriteGuard(guard);
|
|
106
|
+
setNativeReadObserver(previousObserver);
|
|
107
|
+
}
|
|
108
|
+
for (const [source, stop] of subscriptions) {
|
|
109
|
+
if (reads.has(source)) continue;
|
|
110
|
+
subscriptions.delete(source);
|
|
111
|
+
stop();
|
|
112
|
+
}
|
|
113
|
+
for (const [source, version] of reads) {
|
|
114
|
+
if (disposed) break;
|
|
115
|
+
if (!subscriptions.has(source)) {
|
|
116
|
+
let active = true;
|
|
117
|
+
const stop = run(
|
|
118
|
+
() => source.subscribe(
|
|
119
|
+
forwardNativeTransitionConsumer(notify, () => {
|
|
120
|
+
if (active && !disposed) notify();
|
|
121
|
+
})
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
if (typeof stop !== "function")
|
|
125
|
+
throw new TypeError("A DOM style subscription must return cleanup.");
|
|
126
|
+
const disposeSource = () => {
|
|
127
|
+
active = false;
|
|
128
|
+
stop();
|
|
129
|
+
};
|
|
130
|
+
if (disposed) disposeSource();
|
|
131
|
+
else subscriptions.set(source, disposeSource);
|
|
132
|
+
}
|
|
133
|
+
if (!disposed && source.getVersion() !== version) notify();
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
};
|
|
137
|
+
const writeProperty = (name, value) => {
|
|
138
|
+
if (disposed) return;
|
|
139
|
+
name = hyphenateStyleName(name);
|
|
140
|
+
const operation = [0, "styleProperty", name];
|
|
141
|
+
if (restoreStyles) {
|
|
142
|
+
if (!baseline) {
|
|
143
|
+
baseline = node.ownerDocument.createElement("i");
|
|
144
|
+
expected = node.ownerDocument.createElement("i");
|
|
145
|
+
baseline.style.cssText = expected.style.cssText = style.cssText;
|
|
146
|
+
restorations = /* @__PURE__ */ new Set();
|
|
147
|
+
}
|
|
148
|
+
restorations.add(name);
|
|
149
|
+
__writeBinding(expected, operation, value);
|
|
150
|
+
}
|
|
151
|
+
__writeBinding(node, operation, value);
|
|
152
|
+
};
|
|
153
|
+
const restore = () => {
|
|
154
|
+
if (!restorations) return;
|
|
155
|
+
const owned = [...restorations].filter(
|
|
156
|
+
(name) => style.getPropertyValue(name) === expected.style.getPropertyValue(name) && style.getPropertyPriority(name) === expected.style.getPropertyPriority(name)
|
|
157
|
+
);
|
|
158
|
+
let failed = false;
|
|
159
|
+
let failure;
|
|
160
|
+
for (const name of owned) {
|
|
161
|
+
try {
|
|
162
|
+
const value = baseline.style.getPropertyValue(name);
|
|
163
|
+
if (value === "") style.removeProperty(name);
|
|
164
|
+
else style.setProperty(name, value, baseline.style.getPropertyPriority(name));
|
|
165
|
+
} catch (error) {
|
|
166
|
+
if (!failed) {
|
|
167
|
+
failed = true;
|
|
168
|
+
failure = error;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (failed) throw failure;
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
get,
|
|
176
|
+
preview(value) {
|
|
177
|
+
const reads = /* @__PURE__ */ new Map();
|
|
178
|
+
const previousObserver = setNativeReadObserver((source, version) => {
|
|
179
|
+
if (!reads.has(source)) reads.set(source, version);
|
|
180
|
+
});
|
|
181
|
+
const guard = beginNativeWriteGuard();
|
|
182
|
+
let projected;
|
|
183
|
+
try {
|
|
184
|
+
projected = run(() => __normalizeBindingStyle(readNativeDomStyle(value)));
|
|
185
|
+
} finally {
|
|
186
|
+
endNativeWriteGuard(guard);
|
|
187
|
+
setNativeReadObserver(previousObserver);
|
|
188
|
+
}
|
|
189
|
+
const prepared = __prepareBindingSources(
|
|
190
|
+
reads,
|
|
191
|
+
subscriptions,
|
|
192
|
+
notify,
|
|
193
|
+
() => !disposed,
|
|
194
|
+
run
|
|
195
|
+
);
|
|
196
|
+
return {
|
|
197
|
+
value: projected,
|
|
198
|
+
validate: prepared.validate,
|
|
199
|
+
discard: prepared.discard,
|
|
200
|
+
commit() {
|
|
201
|
+
raw = value;
|
|
202
|
+
prepared.commit();
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
read(value) {
|
|
207
|
+
raw = value;
|
|
208
|
+
return get();
|
|
209
|
+
},
|
|
210
|
+
write(value) {
|
|
211
|
+
if (disposed) return;
|
|
212
|
+
let next = value;
|
|
213
|
+
let old = typeof previous === "string" ? snapshotDOM() : previous;
|
|
214
|
+
const writeAll = firstWrite || typeof previous === "string" || typeof value === "string";
|
|
215
|
+
if (typeof next === "string") {
|
|
216
|
+
probe ??= node.ownerDocument.createElement("i");
|
|
217
|
+
probe.style.cssText = next;
|
|
218
|
+
const parsed = /* @__PURE__ */ Object.create(null);
|
|
219
|
+
for (let i = 0; i < probe.style.length; i++) {
|
|
220
|
+
const name = probe.style.item(i);
|
|
221
|
+
parsed[name] = probe.style.getPropertyValue(name) + (probe.style.getPropertyPriority(name) ? " !important" : "");
|
|
222
|
+
}
|
|
223
|
+
next = parsed;
|
|
224
|
+
old = snapshotDOM();
|
|
225
|
+
}
|
|
226
|
+
previous = typeof value === "string" ? value : next;
|
|
227
|
+
const initialNames = firstWrite && next && typeof next === "object" ? new Set(Object.keys(next).map(hyphenateStyleName)) : null;
|
|
228
|
+
firstWrite = false;
|
|
229
|
+
if (old && typeof old === "object") {
|
|
230
|
+
for (const name in old)
|
|
231
|
+
if (next === null || (initialNames ? !initialNames.has(name) : !(name in next)))
|
|
232
|
+
writeProperty(name, null);
|
|
233
|
+
}
|
|
234
|
+
if (next && typeof next === "object") {
|
|
235
|
+
for (const name in next)
|
|
236
|
+
if (writeAll || old === null || typeof old !== "object" || next[name] !== old[name])
|
|
237
|
+
writeProperty(name, next[name]);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
dispose(preservePresentation) {
|
|
241
|
+
if (disposed) return;
|
|
242
|
+
disposed = true;
|
|
243
|
+
raw = previous = null;
|
|
244
|
+
let failed = false;
|
|
245
|
+
let failure;
|
|
246
|
+
for (const stop of [
|
|
247
|
+
...subscriptions.values(),
|
|
248
|
+
...preservePresentation ? [] : [restore]
|
|
249
|
+
]) {
|
|
250
|
+
try {
|
|
251
|
+
stop();
|
|
252
|
+
} catch (error) {
|
|
253
|
+
if (!failed) {
|
|
254
|
+
failed = true;
|
|
255
|
+
failure = error;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
subscriptions.clear();
|
|
260
|
+
restorations?.clear();
|
|
261
|
+
probe = baseline = expected = void 0;
|
|
262
|
+
if (failed) throw failure;
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
export {
|
|
269
|
+
__createBindingStyles,
|
|
270
|
+
__normalizeBindingStyle,
|
|
271
|
+
__prepareBindingSources
|
|
272
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { createBindingClassGroup } from './dom-binding-classes.js';
|
|
2
|
+
import type { __createBindingSignals } from './dom-binding-signals.js';
|
|
3
|
+
import type { __createBindingStyles, BindingStyleSnapshot } from './dom-binding-styles.js';
|
|
4
|
+
import type { __createBindingProjections, BindingProjectionGroup } from './dom-binding-projections.js';
|
|
5
|
+
import type { __createBindingControls } from './dom-binding-controls.js';
|
|
6
|
+
import type { BindingMountTarget, BindingRange, CompiledBindingProgram } from './dom-binding-program.js';
|
|
7
|
+
/** A synchronous, immutable view of an existing application-owned source. */
|
|
8
|
+
export interface BindingSource<Props> {
|
|
9
|
+
/** Return the current snapshot, never a promise or other thenable. */
|
|
10
|
+
getSnapshot(): Props;
|
|
11
|
+
/** Notify after publication; return cleanup even when notifying during subscription. */
|
|
12
|
+
subscribe(notify: () => void): () => void;
|
|
13
|
+
}
|
|
14
|
+
export interface BindingOptions {
|
|
15
|
+
/** The application owns the lifetime of these externally rendered nodes. */
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
/** Restore owned inline style properties on cleanup if no external writer changed them. */
|
|
18
|
+
restoreStyles?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface BindingHandle {
|
|
21
|
+
/** Publish current properties now, including inside an outer source batch. */
|
|
22
|
+
refresh(): void;
|
|
23
|
+
/** Release ownership; structural DOM is preserved unless removal is explicitly requested. */
|
|
24
|
+
dispose(options?: {
|
|
25
|
+
preserveDOM?: boolean;
|
|
26
|
+
}): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Preserve normal rendering while leaving this attribute with its external owner.
|
|
30
|
+
* The compiler recognizes this marker in an opted-in static view's attributes.
|
|
31
|
+
*/
|
|
32
|
+
export declare function unbound<T>(value: T): T;
|
|
33
|
+
/**
|
|
34
|
+
* Adopt a compiler-proven native view without loading a renderer.
|
|
35
|
+
* Octane lowers this intrinsic in a compiled .tsrx/.tsx activation module.
|
|
36
|
+
*/
|
|
37
|
+
export declare function adoptBindings<Props>(_root: Element | BindingRange, _view: (props: Props) => unknown, _source: BindingSource<NoInfer<Props>>, _options?: BindingOptions): BindingHandle;
|
|
38
|
+
/** Construct a compiler-proven fragment at an application-owned insertion point. */
|
|
39
|
+
export declare function mountBindings<Props>(_target: BindingMountTarget, _view: (props: Props) => unknown, _source: BindingSource<NoInfer<Props>>, _options?: BindingOptions): BindingHandle;
|
|
40
|
+
/** @internal Structural artifacts carry their own statically imported mounting entry. */
|
|
41
|
+
export declare function __mountBindings<Props>(target: BindingMountTarget, descriptor: CompiledBindingProgram<Props>, source: BindingSource<Props>, options?: BindingOptions): BindingHandle;
|
|
42
|
+
/** @internal Element-only preorder; null children explicitly leave descendants opaque. */
|
|
43
|
+
export type BindingNode = readonly [
|
|
44
|
+
parent: number,
|
|
45
|
+
tag: string,
|
|
46
|
+
namespace: 0 | 1,
|
|
47
|
+
children: number | null,
|
|
48
|
+
openChildren?: true
|
|
49
|
+
];
|
|
50
|
+
/** @internal Names and numeric CSS units are resolved by the compiler. */
|
|
51
|
+
export type BindingOperation = readonly [
|
|
52
|
+
node: number,
|
|
53
|
+
kind: 'attr' | 'boolean' | 'aria' | 'class' | 'classToken' | 'classGroup' | 'styleProperty' | 'styleAttribute' | 'styleObject' | 'control' | 'url',
|
|
54
|
+
name: string,
|
|
55
|
+
unitlessOrGroup?: boolean | number
|
|
56
|
+
];
|
|
57
|
+
/** @internal Whole styles carry canonical snapshots; scalar channels remain strings. */
|
|
58
|
+
export type BindingValue = string | null | BindingStyleSnapshot;
|
|
59
|
+
/** @internal No application function is invoked to discover the DOM topology. */
|
|
60
|
+
export interface CompiledBindings<Props> {
|
|
61
|
+
readonly id: string;
|
|
62
|
+
/** Targets carry compiler-issued addresses when unbound siblings may change. */
|
|
63
|
+
readonly addressed?: true;
|
|
64
|
+
readonly nodes: readonly BindingNode[];
|
|
65
|
+
readonly bindings: readonly BindingOperation[];
|
|
66
|
+
readonly createClassGroup?: typeof createBindingClassGroup;
|
|
67
|
+
readonly connectSignal?: typeof __createBindingSignals;
|
|
68
|
+
readonly signalIndices?: readonly number[];
|
|
69
|
+
readonly connectStyle?: typeof __createBindingStyles;
|
|
70
|
+
readonly styleIndices?: readonly number[];
|
|
71
|
+
readonly connectProjection?: typeof __createBindingProjections;
|
|
72
|
+
readonly projectionGroups?: readonly BindingProjectionGroup[];
|
|
73
|
+
readonly createControls?: typeof __createBindingControls;
|
|
74
|
+
project(props: Props): readonly unknown[];
|
|
75
|
+
}
|
|
76
|
+
/** @internal Shared channel ownership for compiled scalar and structural presentation. */
|
|
77
|
+
export declare function __claimBinding(node: Element, binding: BindingOperation): string;
|
|
78
|
+
/** @internal Release only a channel already claimed by the calling lifetime. */
|
|
79
|
+
export declare function __releaseBinding(node: Element, name: string): void;
|
|
80
|
+
declare function normalize(binding: BindingOperation, value: unknown): BindingValue;
|
|
81
|
+
declare function write(node: Element, binding: BindingOperation, value: string | null): void;
|
|
82
|
+
export { normalize as __normalizeBinding, write as __writeBinding };
|
|
83
|
+
/** @internal Optional native style restoration; the default scalar path does not allocate it. */
|
|
84
|
+
export declare function __createBindingStyleRestoration(node: Element, binding: BindingOperation): {
|
|
85
|
+
write(value: string | null): void;
|
|
86
|
+
dispose(preservePresentation?: boolean): void;
|
|
87
|
+
};
|
|
88
|
+
/** @internal Fixed-layout adopter and compatibility dispatch for earlier compiler output. */
|
|
89
|
+
export declare function __adoptBindings<Props>(root: Element | BindingRange, descriptor: CompiledBindings<Props> | CompiledBindingProgram<Props>, source: BindingSource<Props>, options?: BindingOptions): BindingHandle;
|