@kumbatio/energy-system 0.4.2 → 0.4.4

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 CHANGED
@@ -166,6 +166,21 @@ import { EnergyGate } from '@kumbatio/energy-system/react'
166
166
  </EnergyGate>
167
167
  ```
168
168
 
169
+ Hidden subtrees keep their state. Energy moves up and down, so a gate that
170
+ destroyed its children would throw away a half-written message every time
171
+ capacity dipped. `<EnergyGate>` hides through React 19.2's `<Activity>`:
172
+ component state, DOM and scroll position survive, effects are torn down while
173
+ hidden and re-run on reveal, and hidden content is not server-rendered.
174
+
175
+ Opt out for subtrees whose cost is worth reclaiming — media, canvases, live
176
+ connections:
177
+
178
+ ```tsx
179
+ <EnergyGate min={75} whenHidden="unmount">
180
+ <VideoWall />
181
+ </EnergyGate>
182
+ ```
183
+
169
184
  CSS-only path — annotate elements with the range they belong to and the
170
185
  stylesheet handles hiding as `data-energy-level` changes:
171
186
 
@@ -317,7 +332,8 @@ animating presence changes should do the same.
317
332
  - `useStrategy(strategy)`
318
333
  - `useEnergyGate(minLevel)`
319
334
  - `useEnergyPresence(presenceMap)`
320
- - `EnergyGate` (presence-gated subtree: `presence` map or `min`/`max` shorthand)
335
+ - `EnergyGate` (presence-gated subtree: `presence` map or `min`/`max` shorthand;
336
+ `whenHidden` is `'preserve'` by default, `'unmount'` to drop the subtree)
321
337
  - `EnergyIndicator`
322
338
 
323
339
  ### `@kumbatio/energy-system/persistence`
@@ -339,6 +355,10 @@ animating presence changes should do the same.
339
355
  - `createEnergyEngine({ maxFutureSkewMs })` - reject hydrated/observed state stamped further
340
356
  ahead of the local clock than this budget (default 5 minutes; `Number.POSITIVE_INFINITY`
341
357
  accepts any finite timestamp). Guards reconciliation against contexts with bad clocks.
358
+ - `createEnergyEngine({ autoStart: false })` + `engine.start()` - construct the engine without
359
+ hydrating or subscribing to cross-context updates, then begin both explicitly. For engines
360
+ built somewhere that may never be committed: `EnergyProvider` constructs during render and
361
+ starts from an effect, so a render React discards leaves no stranded observer behind.
342
362
  - `engine.flush()` - wait until the current state version is durably persisted; rejects if the
343
363
  engine is disposed or an unchanged initial state cannot be safely reconciled after a hydration
344
364
  read failure
package/dist/engine.d.ts CHANGED
@@ -17,8 +17,26 @@ export interface EnergyEngineOptions {
17
17
  * finite timestamp. Default: 5 minutes.
18
18
  */
19
19
  maxFutureSkewMs?: number;
20
+ /**
21
+ * Whether construction immediately hydrates from persistence and subscribes
22
+ * to cross-context updates. Default: true.
23
+ *
24
+ * Pass false when the engine is constructed somewhere that may never be
25
+ * committed — a React render, most notably — and call `start()` from a
26
+ * lifecycle that only runs for trees React kept. Without this, a discarded
27
+ * render leaves an engine nobody will ever dispose, holding a live
28
+ * cross-context observer (a `storage` listener, for the localStorage
29
+ * adapter) for the lifetime of the page.
30
+ */
31
+ autoStart?: boolean;
20
32
  }
21
33
  export interface EnergyEngine {
34
+ /**
35
+ * Begin hydration and cross-context observation. Idempotent, and a no-op on
36
+ * a disposed engine. Only needed when the engine was created with
37
+ * `autoStart: false`.
38
+ */
39
+ start(): void;
22
40
  /** Get current energy state */
23
41
  getState(): EnergyState;
24
42
  /** Set energy level with optional source */
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AA2FD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAsVlF"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,WAAW,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAA;IACjE,sDAAsD;IACtD,KAAK,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,CAAA;IACpC,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAAA;IACb,+BAA+B;IAC/B,QAAQ,IAAI,WAAW,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IACzD,iCAAiC;IACjC,UAAU,IAAI,IAAI,CAAA;IAClB,gEAAgE;IAChE,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI,CAAA;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC9C,8EAA8E;IAC9E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,mDAAmD;IACnD,OAAO,IAAI,IAAI,CAAA;CAChB;AA2FD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CA0WlF"}
package/dist/engine.js CHANGED
@@ -62,7 +62,7 @@ function normalizeState(candidate, nowMs, maxFutureSkewMs) {
62
62
  return createEnergyState(candidate.level, candidate.source, candidate.timestamp, candidate.revision, candidate.origin);
63
63
  }
64
64
  export function createEnergyEngine(options = {}) {
65
- const { initialLevel = 100, persistence, onChange, onPersistenceError, clock, maxFutureSkewMs = DEFAULT_MAX_FUTURE_SKEW_MS, } = options;
65
+ const { initialLevel = 100, persistence, onChange, onPersistenceError, clock, maxFutureSkewMs = DEFAULT_MAX_FUTURE_SKEW_MS, autoStart = true, } = options;
66
66
  /*
67
67
  * Deferred to the first state this engine actually produces. An explicitly supplied `originId`
68
68
  * is honoured immediately, so deterministic callers (tests, simulations) are unaffected.
@@ -95,7 +95,7 @@ export function createEnergyEngine(options = {}) {
95
95
  // flush() honest even before the first state transition.
96
96
  let persistedVersion = -1;
97
97
  let requestedPersistVersion = 0;
98
- let persistTask;
98
+ let isPersisting = false;
99
99
  let persistRetryTimer;
100
100
  let persistRetryDelayMs = PERSIST_RETRY_INITIAL_MS;
101
101
  let initialHydrationTask;
@@ -111,51 +111,62 @@ export function createEnergyEngine(options = {}) {
111
111
  }
112
112
  }
113
113
  }
114
+ /*
115
+ * `isPersisting` is a plain flag rather than a handle on the in-flight promise.
116
+ * An adapter whose `save()` is not declared `async` can throw synchronously (a
117
+ * quota check on a bare `localStorage.setItem`, say). The drain then finishes
118
+ * before it ever awaits, so anything assigned from the *call site* afterwards
119
+ * would overwrite the cleared state and park the queue permanently: every later
120
+ * write would see work already in flight and return, and `flush()` would never
121
+ * settle. Only the drain itself owns this flag.
122
+ */
123
+ async function drainPersistQueue(store) {
124
+ while (!disposed && persistedVersion < requestedPersistVersion) {
125
+ const snapshot = state;
126
+ const snapshotVersion = stateVersion;
127
+ try {
128
+ await store.save(snapshot);
129
+ persistedVersion = Math.max(persistedVersion, snapshotVersion);
130
+ persistRetryDelayMs = PERSIST_RETRY_INITIAL_MS;
131
+ resolvePersistWaiters();
132
+ }
133
+ catch (err) {
134
+ logEngineError('Failed to persist energy state', err);
135
+ if (onPersistenceError) {
136
+ try {
137
+ onPersistenceError(err, snapshot);
138
+ }
139
+ catch (err) {
140
+ logEngineError('onPersistenceError callback threw', err);
141
+ }
142
+ }
143
+ isPersisting = false;
144
+ if (!disposed && !persistRetryTimer && persistedVersion < requestedPersistVersion) {
145
+ const retryDelayMs = persistRetryDelayMs;
146
+ // Exponential backoff so a persistently failing store (e.g. quota
147
+ // exceeded) is not hammered every 250ms forever.
148
+ persistRetryDelayMs = Math.min(persistRetryDelayMs * 2, PERSIST_RETRY_MAX_MS);
149
+ persistRetryTimer = setTimeout(() => {
150
+ persistRetryTimer = undefined;
151
+ queuePersist();
152
+ }, retryDelayMs);
153
+ }
154
+ return;
155
+ }
156
+ }
157
+ isPersisting = false;
158
+ if (!disposed && persistedVersion < requestedPersistVersion) {
159
+ queuePersist();
160
+ }
161
+ }
114
162
  function queuePersist() {
115
163
  if (!persistence || disposed)
116
164
  return;
117
165
  requestedPersistVersion = Math.max(requestedPersistVersion, stateVersion);
118
- if (persistTask)
166
+ if (isPersisting)
119
167
  return;
120
- persistTask = (async () => {
121
- while (!disposed && persistedVersion < requestedPersistVersion) {
122
- const snapshot = state;
123
- const snapshotVersion = stateVersion;
124
- try {
125
- await persistence.save(snapshot);
126
- persistedVersion = Math.max(persistedVersion, snapshotVersion);
127
- persistRetryDelayMs = PERSIST_RETRY_INITIAL_MS;
128
- resolvePersistWaiters();
129
- }
130
- catch (err) {
131
- logEngineError('Failed to persist energy state', err);
132
- if (onPersistenceError) {
133
- try {
134
- onPersistenceError(err, snapshot);
135
- }
136
- catch (err) {
137
- logEngineError('onPersistenceError callback threw', err);
138
- }
139
- }
140
- persistTask = undefined;
141
- if (!disposed && !persistRetryTimer && persistedVersion < requestedPersistVersion) {
142
- const retryDelayMs = persistRetryDelayMs;
143
- // Exponential backoff so a persistently failing store (e.g. quota
144
- // exceeded) is not hammered every 250ms forever.
145
- persistRetryDelayMs = Math.min(persistRetryDelayMs * 2, PERSIST_RETRY_MAX_MS);
146
- persistRetryTimer = setTimeout(() => {
147
- persistRetryTimer = undefined;
148
- queuePersist();
149
- }, retryDelayMs);
150
- }
151
- return;
152
- }
153
- }
154
- persistTask = undefined;
155
- if (!disposed && persistedVersion < requestedPersistVersion) {
156
- queuePersist();
157
- }
158
- })();
168
+ isPersisting = true;
169
+ void drainPersistQueue(persistence);
159
170
  }
160
171
  function notify(next, prev) {
161
172
  notificationQueue.push({ next, prev });
@@ -205,7 +216,38 @@ export function createEnergyEngine(options = {}) {
205
216
  return true;
206
217
  }
207
218
  let disposePersistenceObservation = () => { };
219
+ let started = false;
208
220
  const engine = {
221
+ start() {
222
+ if (started || disposed || !persistence)
223
+ return;
224
+ started = true;
225
+ initialHydrationTask = engine.hydrate().catch((err) => {
226
+ logEngineError('Unexpected hydrate failure', err);
227
+ });
228
+ if (!persistence.observe)
229
+ return;
230
+ try {
231
+ disposePersistenceObservation = persistence.observe((externalState) => {
232
+ if (disposed)
233
+ return;
234
+ let normalized;
235
+ try {
236
+ normalized = normalizeState(externalState, now(), maxFutureSkewMs);
237
+ }
238
+ catch (err) {
239
+ logEngineError('Ignoring invalid observed energy state', err);
240
+ return;
241
+ }
242
+ if (!isPreferredExternalState(normalized, state))
243
+ return;
244
+ applyState(normalized);
245
+ });
246
+ }
247
+ catch (err) {
248
+ logEngineError('Failed to subscribe to persistence observation', err);
249
+ }
250
+ },
209
251
  getState() {
210
252
  return state;
211
253
  },
@@ -325,33 +367,8 @@ export function createEnergyEngine(options = {}) {
325
367
  }
326
368
  },
327
369
  };
328
- // Auto-hydrate from persistence
329
- if (persistence) {
330
- initialHydrationTask = engine.hydrate().catch((err) => {
331
- logEngineError('Unexpected hydrate failure', err);
332
- });
333
- }
334
- if (persistence?.observe) {
335
- try {
336
- disposePersistenceObservation = persistence.observe((externalState) => {
337
- if (disposed)
338
- return;
339
- let normalized;
340
- try {
341
- normalized = normalizeState(externalState, now(), maxFutureSkewMs);
342
- }
343
- catch (err) {
344
- logEngineError('Ignoring invalid observed energy state', err);
345
- return;
346
- }
347
- if (!isPreferredExternalState(normalized, state))
348
- return;
349
- applyState(normalized);
350
- });
351
- }
352
- catch (err) {
353
- logEngineError('Failed to subscribe to persistence observation', err);
354
- }
370
+ if (autoStart) {
371
+ engine.start();
355
372
  }
356
373
  return engine;
357
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAiChE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,SAAiB,GAAG,iBAAiB,CA4C/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAoC1E"}
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAuDhE;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,SAAiB,GAAG,iBAAiB,CA4C/E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAoC1E"}
@@ -1,23 +1,41 @@
1
1
  import { createEnergyState, isEnergyLevel, isEnergySource } from './levels.js';
2
- function parsePersistedState(raw) {
2
+ /*
3
+ * `null` means "nothing usable is stored", which the engine treats as a fresh
4
+ * install. Corrupt or schema-violating data reaches the same conclusion, but it
5
+ * is a different event and gets logged: silently equating "storage is damaged"
6
+ * with "first run" is how a user's persisted level disappears without trace.
7
+ */
8
+ function parsePersistedState(source, raw) {
3
9
  if (!raw)
4
10
  return null;
11
+ let parsed;
5
12
  try {
6
- const parsed = JSON.parse(raw);
7
- if (typeof parsed === 'object' && parsed !== null && 'level' in parsed) {
8
- const obj = parsed;
9
- if (!isEnergyLevel(obj['level']) ||
10
- !isEnergySource(obj['source']) ||
11
- typeof obj['timestamp'] !== 'number' ||
12
- typeof obj['revision'] !== 'number' ||
13
- typeof obj['origin'] !== 'string') {
14
- return null;
15
- }
16
- return createEnergyState(obj['level'], obj['source'], obj['timestamp'], obj['revision'], obj['origin']);
17
- }
13
+ parsed = JSON.parse(raw);
14
+ }
15
+ catch (err) {
16
+ console.error(`[energy-system] Discarding unparseable persisted energy state (${source})`, err);
17
+ return null;
18
+ }
19
+ if (typeof parsed !== 'object' || parsed === null || !('level' in parsed)) {
20
+ console.error(`[energy-system] Discarding persisted energy state with unexpected shape (${source})`);
21
+ return null;
22
+ }
23
+ const obj = parsed;
24
+ if (!isEnergyLevel(obj['level']) ||
25
+ !isEnergySource(obj['source']) ||
26
+ typeof obj['timestamp'] !== 'number' ||
27
+ typeof obj['revision'] !== 'number' ||
28
+ typeof obj['origin'] !== 'string') {
29
+ console.error(`[energy-system] Discarding malformed persisted energy state (${source})`);
18
30
  return null;
19
31
  }
20
- catch {
32
+ try {
33
+ return createEnergyState(obj['level'], obj['source'], obj['timestamp'], obj['revision'], obj['origin']);
34
+ }
35
+ catch (err) {
36
+ // Field-level invariants (negative timestamp, non-integer revision, blank
37
+ // origin) are enforced by createEnergyState, not by the checks above.
38
+ console.error(`[energy-system] Discarding invalid persisted energy state (${source})`, err);
21
39
  return null;
22
40
  }
23
41
  }
@@ -32,7 +50,7 @@ export function localStoragePersistence(key = 'energy-state') {
32
50
  return null;
33
51
  }
34
52
  const raw = localStorage.getItem(key);
35
- return parsePersistedState(raw);
53
+ return parsePersistedState(`localStorage key '${key}'`, raw);
36
54
  },
37
55
  async save(state) {
38
56
  try {
@@ -55,7 +73,7 @@ export function localStoragePersistence(key = 'energy-state') {
55
73
  return;
56
74
  if (event.key !== key)
57
75
  return;
58
- const parsed = parsePersistedState(event.newValue);
76
+ const parsed = parsePersistedState(`storage event for key '${key}'`, event.newValue);
59
77
  if (parsed) {
60
78
  onState(parsed);
61
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAG9E,SAAS,mBAAmB,CAAC,GAAkB;IAC7C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACvE,MAAM,GAAG,GAAG,MAAiC,CAAA;YAC7C,IACE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC9B,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;gBACpC,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;gBACnC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,EACjC,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,iBAAiB,CACtB,GAAG,CAAC,OAAO,CAAC,EACZ,GAAG,CAAC,QAAQ,CAAC,EACb,GAAG,CAAC,WAAW,CAAC,EAChB,GAAG,CAAC,UAAU,CAAC,EACf,GAAG,CAAC,QAAQ,CAAC,CACd,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAG,GAAG,cAAc;IAC1D,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAkB;YAC3B,IAAI,CAAC;gBACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAClD,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,kEAAkE;gBAClE,qEAAqE;gBACrE,sDAAsD;gBACtD,MAAM,IAAI,KAAK,CAAC,oDAAoD,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;YAC7F,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO;YACb,IACE,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU;gBACjD,OAAO,YAAY,KAAK,WAAW,EACnC,CAAC;gBACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;YACjB,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,KAAmB,EAAE,EAAE;gBAC5C,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY;oBAAE,OAAM;gBAC9C,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;oBAAE,OAAM;gBAE7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAClD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,MAAM,CAAC,CAAA;gBACjB,CAAC;YACH,CAAC,CAAA;YAED,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACrD,OAAO,GAAG,EAAE;gBACV,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YAC1D,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACrD,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,iBAAiB,CACf,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,CACf,CAAA;IACP,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAA;IAEzD,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAkB;YAC3B,MAAM,GAAG,iBAAiB,CACxB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,MAAM,CACb,CAAA;YACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO;YACb,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACtB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAG9E;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,MAAc,EAAE,GAAkB;IAC7D,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,IAAI,MAAe,CAAA;IAEnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,kEAAkE,MAAM,GAAG,EAAE,GAAG,CAAC,CAAA;QAC/F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,KAAK,CACX,4EAA4E,MAAM,GAAG,CACtF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAA;IAC7C,IACE,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;QACpC,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ;QACnC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,EACjC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,gEAAgE,MAAM,GAAG,CAAC,CAAA;QACxF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,OAAO,iBAAiB,CACtB,GAAG,CAAC,OAAO,CAAC,EACZ,GAAG,CAAC,QAAQ,CAAC,EACb,GAAG,CAAC,WAAW,CAAC,EAChB,GAAG,CAAC,UAAU,CAAC,EACf,GAAG,CAAC,QAAQ,CAAC,CACd,CAAA;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,0EAA0E;QAC1E,sEAAsE;QACtE,OAAO,CAAC,KAAK,CAAC,8DAA8D,MAAM,GAAG,EAAE,GAAG,CAAC,CAAA;QAC3F,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAG,GAAG,cAAc;IAC1D,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;gBACxC,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,OAAO,mBAAmB,CAAC,qBAAqB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAkB;YAC3B,IAAI,CAAC;gBACH,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAClD,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,kEAAkE;gBAClE,qEAAqE;gBACrE,sDAAsD;gBACtD,MAAM,IAAI,KAAK,CAAC,oDAAoD,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;YAC7F,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO;YACb,IACE,OAAO,UAAU,CAAC,gBAAgB,KAAK,UAAU;gBACjD,OAAO,YAAY,KAAK,WAAW,EACnC,CAAC;gBACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;YACjB,CAAC;YAED,MAAM,aAAa,GAAG,CAAC,KAAmB,EAAE,EAAE;gBAC5C,IAAI,KAAK,CAAC,WAAW,KAAK,YAAY;oBAAE,OAAM;gBAC9C,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;oBAAE,OAAM;gBAE7B,MAAM,MAAM,GAAG,mBAAmB,CAAC,0BAA0B,GAAG,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACpF,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,MAAM,CAAC,CAAA;gBACjB,CAAC;YACH,CAAC,CAAA;YAED,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YACrD,OAAO,GAAG,EAAE;gBACV,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;YAC1D,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAqB;IACrD,IAAI,MAAM,GACR,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,iBAAiB,CACf,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,CACf,CAAA;IACP,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAA;IAEzD,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAkB;YAC3B,MAAM,GAAG,iBAAiB,CACxB,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,MAAM,CACb,CAAA;YACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO;YACb,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACtB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC3B,CAAC,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
package/dist/react.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { ReactNode } from 'react';
1
2
  import type { EnergyEngine } from './engine.js';
2
3
  import type { AdaptationStrategy, EnergyChangeListener, EnergyLevel, EnergyLevelDefinition, EnergyPersistence, EnergyPresence, EnergyPresenceMap, EnergySource, EnergyState } from './types.js';
3
4
  export interface EnergyProviderProps {
@@ -11,7 +12,7 @@ export interface EnergyProviderProps {
11
12
  onLevelChange?: EnergyChangeListener;
12
13
  /** Whether to apply energy level to DOM via data attributes */
13
14
  applyToDOM?: boolean;
14
- children: React.ReactNode;
15
+ children: ReactNode;
15
16
  }
16
17
  export declare function EnergyProvider({ engine: externalEngine, defaultLevel, persistence, onLevelChange, applyToDOM, children, }: EnergyProviderProps): import("react").FunctionComponentElement<import("react").ProviderProps<EnergyEngine | null>>;
17
18
  /** Get the full energy state (level + timestamp + source) */
@@ -21,8 +22,6 @@ export declare function useEnergyLevel(): [
21
22
  EnergyLevel,
22
23
  (level: EnergyLevel, source?: EnergySource) => void
23
24
  ];
24
- /** @deprecated Use useEnergyState instead. */
25
- export declare function useFullEnergyState(): EnergyState;
26
25
  /** Returns a function that cycles to the next energy level */
27
26
  export declare function useEnergyLevelCycler(): () => void;
28
27
  /** Resolve a strategy against current energy level */
@@ -31,14 +30,29 @@ export declare function useStrategy<T>(strategy: AdaptationStrategy<T>): T;
31
30
  export declare function useEnergyGate(minLevel: EnergyLevel): boolean;
32
31
  /** Resolve a presence map against the current energy level */
33
32
  export declare function useEnergyPresence(presence: EnergyPresenceMap): EnergyPresence;
33
+ /**
34
+ * What happens to the gated subtree when its presence resolves to 'hidden'.
35
+ *
36
+ * - `preserve` (default): kept mounted inside `<Activity mode="hidden">`, so
37
+ * component state, DOM and scroll position survive. Effects are torn down
38
+ * while hidden and re-run on reveal, and hidden content is not rendered on
39
+ * the server. Energy is expected to move up and down; a half-written message
40
+ * should still be there when capacity returns.
41
+ * - `unmount`: removed from the tree entirely. Use for subtrees whose cost is
42
+ * worth reclaiming at low energy (media, canvases, live connections).
43
+ */
44
+ export type EnergyHiddenBehavior = 'preserve' | 'unmount';
34
45
  interface EnergyGateBaseProps {
35
46
  /** Rendered instead of children while hidden. Default: nothing. */
36
- fallback?: React.ReactNode;
47
+ fallback?: ReactNode;
48
+ /** How the subtree is treated while hidden. Default: 'preserve'. */
49
+ whenHidden?: EnergyHiddenBehavior;
37
50
  /**
38
51
  * Content to gate. The function form receives the resolved presence so
39
- * 'muted' can style itself differently from 'visible'.
52
+ * 'muted' can style itself differently from 'visible'. Under `preserve` it
53
+ * is also called with 'hidden', because the subtree stays mounted.
40
54
  */
41
- children: React.ReactNode | ((presence: EnergyPresence) => React.ReactNode);
55
+ children: ReactNode | ((presence: EnergyPresence) => ReactNode);
42
56
  }
43
57
  export type EnergyGateProps = EnergyGateBaseProps & ({
44
58
  /** Full presence declaration for this element */
@@ -74,7 +88,7 @@ export type EnergyGateProps = EnergyGateBaseProps & ({
74
88
  *
75
89
  * Headless: renders no wrapper element of its own.
76
90
  */
77
- export declare function EnergyGate({ presence, min, max, fallback, children, }: EnergyGateProps): React.ReactNode;
91
+ export declare function EnergyGate({ presence, min, max, fallback, whenHidden, children, }: EnergyGateProps): ReactNode;
78
92
  export interface EnergyIndicatorRenderProps {
79
93
  level: EnergyLevel;
80
94
  label: string;
@@ -87,9 +101,9 @@ export interface EnergyIndicatorRenderProps {
87
101
  setLevel: (level: EnergyLevel, source?: EnergySource) => void;
88
102
  }
89
103
  export interface EnergyIndicatorProps {
90
- children: (props: EnergyIndicatorRenderProps) => React.ReactNode;
104
+ children: (props: EnergyIndicatorRenderProps) => ReactNode;
91
105
  }
92
106
  /** Headless energy indicator - bring your own UI */
93
- export declare function EnergyIndicator({ children }: EnergyIndicatorProps): React.ReactNode;
107
+ export declare function EnergyIndicator({ children }: EnergyIndicatorProps): ReactNode;
94
108
  export {};
95
109
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
package/dist/react.js CHANGED
@@ -1,4 +1,5 @@
1
- import { createContext, createElement, useCallback, useContext, useEffect, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useSyncExternalStore, } from 'react';
1
+ 'use client';
2
+ import { Activity, Fragment, createContext, createElement, useCallback, useContext, useEffect, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useRef, useSyncExternalStore, } from 'react';
2
3
  import { applyEnergyLevel } from './dom.js';
3
4
  import { createEnergyEngine } from './engine.js';
4
5
  import { getEnergyLevel, getEnergyLevels } from './levels.js';
@@ -55,8 +56,16 @@ export function EnergyProvider({ engine: externalEngine, defaultLevel = 100, per
55
56
  }, [onLevelChange]);
56
57
  // `defaultLevel` and `persistence` are initial-only by contract: they
57
58
  // configure the engine the provider creates, they do not reconfigure it.
59
+ //
60
+ // `autoStart: false` because this runs during render. React discards
61
+ // in-progress renders (an interrupted transition, a sibling suspending), and
62
+ // the effect that disposes the engine only runs for a tree it committed. An
63
+ // engine that hydrated and subscribed at construction would strand a live
64
+ // cross-context observer with nothing left to release it. Starting from the
65
+ // effect below ties both to a commit.
58
66
  const createInternalEngine = () => createEnergyEngine({
59
67
  initialLevel: defaultLevel,
68
+ autoStart: false,
60
69
  ...(persistence ? { persistence } : {}),
61
70
  onChange(state, prev) {
62
71
  if (isProviderCommittedRef.current) {
@@ -91,6 +100,9 @@ export function EnergyProvider({ engine: externalEngine, defaultLevel = 100, per
91
100
  internalEngineRef.current = createInternalEngine();
92
101
  refreshEngine();
93
102
  }
103
+ // Idempotent, so the StrictMode remount path above and the ordinary mount
104
+ // path both land here exactly once per live engine.
105
+ internalEngineRef.current.start();
94
106
  return () => {
95
107
  internalEngineRef.current?.dispose();
96
108
  internalEngineRef.current = null;
@@ -194,10 +206,6 @@ export function useEnergyLevel() {
194
206
  }, [engine]);
195
207
  return [state.level, setLevel];
196
208
  }
197
- /** @deprecated Use useEnergyState instead. */
198
- export function useFullEnergyState() {
199
- return useEnergyStoreState();
200
- }
201
209
  /** Returns a function that cycles to the next energy level */
202
210
  export function useEnergyLevelCycler() {
203
211
  const engine = useEngine();
@@ -237,7 +245,7 @@ export function useEnergyPresence(presence) {
237
245
  *
238
246
  * Headless: renders no wrapper element of its own.
239
247
  */
240
- export function EnergyGate({ presence, min, max, fallback = null, children, }) {
248
+ export function EnergyGate({ presence, min, max, fallback = null, whenHidden = 'preserve', children, }) {
241
249
  const map = useMemo(() => {
242
250
  if (presence)
243
251
  return presence;
@@ -261,9 +269,23 @@ export function EnergyGate({ presence, min, max, fallback = null, children, }) {
261
269
  throw new Error('EnergyGate requires a presence map or min/max level');
262
270
  }, [presence, min, max]);
263
271
  const resolved = useEnergyPresence(map);
264
- if (resolved === 'hidden')
265
- return fallback;
266
- return typeof children === 'function' ? children(resolved) : children;
272
+ const isHidden = resolved === 'hidden';
273
+ if (whenHidden === 'unmount') {
274
+ if (isHidden)
275
+ return fallback;
276
+ return typeof children === 'function' ? children(resolved) : children;
277
+ }
278
+ /*
279
+ * The <Activity> element sits at a fixed position in a fixed Fragment on every
280
+ * render, hidden or not. That stability is the whole mechanism: reconciling the
281
+ * same boundary is what carries state across the transition. Rendering Activity
282
+ * only while hidden would swap the element type at that slot and remount the
283
+ * subtree on reveal — losing exactly the state this is here to keep.
284
+ */
285
+ return createElement(Fragment, null, isHidden ? fallback : null, createElement(Activity, {
286
+ mode: isHidden ? 'hidden' : 'visible',
287
+ children: typeof children === 'function' ? children(resolved) : children,
288
+ }));
267
289
  }
268
290
  /** Headless energy indicator - bring your own UI */
269
291
  export function EnergyIndicator({ children }) {
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,UAAU,EACV,MAAM,EACN,oBAAoB,GACrB,MAAM,OAAO,CAAA;AAEd,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAa9F,gBAAgB;AAEhB,MAAM,mBAAmB,GAAG,aAAa,CAAsB,IAAI,CAAC,CAAA;AACpE,MAAM,oBAAoB,GAAG;IAC3B,yBAAyB;IACzB,+BAA+B;IAC/B,4BAA4B;IAC5B,6BAA6B;CACrB,CAAA;AAiBV,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAmC,CAAA;AAE1E,SAAS,eAAe,CACtB,QAA0C,EAC1C,KAAkB,EAClB,IAAiB;IAEjB,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,IAAI,CAAC;QACH,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACvB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAA;IACpE,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAmB,EAAE,QAA+B;IAChF,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IAClF,OAAO,MAAM,CAAA;AACf,CAAC;AAkBD,MAAM,UAAU,cAAc,CAAC,EAC7B,MAAM,EAAE,cAAc,EACtB,YAAY,GAAG,GAAG,EAClB,WAAW,EACX,aAAa,EACb,UAAU,GAAG,IAAI,EACjB,QAAQ,GACY;IACpB,MAAM,iBAAiB,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAA;IAC3D,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,UAAU,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACzE,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;IAC9C,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5C,MAAM,yBAAyB,GAAG,MAAM,CAAmD,EAAE,CAAC,CAAA;IAE9F,kBAAkB,CAAC,GAAG,EAAE;QACtB,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAA;IAC1C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAChC,kBAAkB,CAAC;QACjB,YAAY,EAAE,YAAY;QAC1B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,IAAI;YAClB,IAAI,sBAAsB,CAAC,OAAO,EAAE,CAAC;gBACnC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;gBACtD,OAAM;YACR,CAAC;YAED,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC7B,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEJ,IAAI,CAAC,cAAc,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAClD,iBAAiB,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAA;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,IAAI,iBAAiB,CAAC,OAAO,CAAA;IAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IAED,0EAA0E;IAC1E,sEAAsE;IACtE,0EAA0E;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,mEAAmE;YACnE,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;YACpC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;YAChC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC/B,sBAAsB,CAAC,OAAO,GAAG,KAAK,CAAA;YACtC,yBAAyB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;YAC5C,iBAAiB,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAA;YAClD,aAAa,EAAE,CAAA;QACjB,CAAC;QAED,OAAO,GAAG,EAAE;YACV,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;YACpC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAA;QAClC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAA;IAEpB,uEAAuE;IACvE,wEAAwE;IACxE,2DAA2D;IAC3D,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,cAAc;YAAE,OAAM;QAE1B,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAA;QACrC,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAC3D,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;QAC9E,CAAC;QAED,OAAO,GAAG,EAAE;YACV,sBAAsB,CAAC,OAAO,GAAG,KAAK,CAAA;YACtC,yBAAyB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;QAC9C,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAE5B,wEAAwE;IACxE,4EAA4E;IAC5E,wCAAwC;IACxC,kBAAkB,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC,cAAc;YAAE,OAAM;QAE3B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACtC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAE5B,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAM;QAE1D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAA;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAA;QAChB,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,aAAa,IAAI;YAC7B,QAAQ,EAAE;gBACR,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC;gBACnD,MAAM,EAAE,IAAI,GAAG,CACb,oBAAoB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACrC,QAAQ;oBACR,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC;iBACxC,CAAC,CACH;aACF;YACD,MAAM,EAAE,EAAE;SACX,CAAA;QACD,MAAM,KAAK,GAAuB,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAA;QAC3E,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACtC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACrC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;YACzB,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,EAAE,CAAC;gBACzC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YACvC,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAA;YACb,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YACnF,IAAI,UAAU,KAAK,CAAC,CAAC;gBAAE,OAAM;YAE7B,MAAM,WAAW,GAAG,UAAU,KAAK,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YAC1D,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAClC,IAAI,CAAC,WAAW;gBAAE,OAAM;YAExB,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,IAAI,SAAS,EAAE,CAAC;gBACd,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC3C,CAAC;iBAAM,CAAC;gBACN,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAClC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IAExB,OAAO,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAA;AACjF,CAAC;AAED,cAAc;AAEd,SAAS,mBAAmB;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,0EAA0E;IAC1E,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,aAAyB,EAAE,EAAE,CAC5B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,aAAa,EAAE,CAAA;IACjB,CAAC,CAAC,EACJ,CAAC,MAAM,CAAC,CACT,CAAA;IACD,OAAO,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC1E,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc;IAC5B,OAAO,mBAAmB,EAAE,CAAA;AAC9B,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,cAAc;IAI5B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,KAAkB,EAAE,MAAM,GAAiB,QAAQ,EAAE,EAAE;QACtD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAChC,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAA;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAChC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB;IAChC,OAAO,mBAAmB,EAAE,CAAA;AAC9B,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,MAAM,CAAC,UAAU,EAAE,CAAA;IACrB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;AACd,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,WAAW,CAAI,QAA+B;IAC5D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAC9E,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,QAAqB;IACjD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,OAAO,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAA;AAChC,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC3D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAC7F,CAAC;AAqCD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,GAAG,EACH,GAAG,EACH,QAAQ,GAAG,IAAI,EACf,QAAQ,GACQ;IAChB,MAAM,GAAG,GAAG,OAAO,CAAoB,GAAG,EAAE;QAC1C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAC7B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAiD,EAAE,CAAA;YAC7D,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;oBACpB,UAAU,CAAC,KAAK,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC7E,CAAC;YACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;QACpD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,GAAiD,EAAE,CAAA;YAC7D,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;YACzE,CAAC;YACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAExB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAEvC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC1C,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACvE,CAAC;AAoBD,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAwB;IAChE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,cAAc,EAAE,CAAA;IAC1C,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAA;IAEpC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAA;IAEnD,OAAO,QAAQ,CAAC;QACd,KAAK;QACL,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,KAAK;QACL,UAAU;QACV,MAAM;QACN,KAAK;QACL,QAAQ;KACT,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kumbatio/energy-system",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "private": false,
5
5
  "description": "Framework-agnostic TypeScript library for energy-aware application behavior.",
6
6
  "license": "MIT",
@@ -40,6 +40,7 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@happy-dom/global-registrator": "^20.11.1",
43
+ "@types/node": "^26.1.2",
43
44
  "@types/react": "^19.2.17",
44
45
  "@types/react-dom": "^19.2.3",
45
46
  "oxfmt": "0.61.0",
@@ -50,9 +51,13 @@
50
51
  "typescript": "^7.0.2"
51
52
  },
52
53
  "peerDependencies": {
54
+ "@types/react": ">=19",
53
55
  "react": ">=19"
54
56
  },
55
57
  "peerDependenciesMeta": {
58
+ "@types/react": {
59
+ "optional": true
60
+ },
56
61
  "react": {
57
62
  "optional": true
58
63
  }
package/src/energy.css CHANGED
@@ -59,7 +59,12 @@
59
59
  transition: opacity 0.3s ease;
60
60
  }
61
61
 
62
- [data-energy-level='75'] .energy-chrome:hover {
62
+ /* `:focus-within` matters more than `:hover` as energy drops: chrome fades to
63
+ * 10% at level 25 and 5% at level 0, so a keyboard user tabbing into a control
64
+ * inside it would otherwise operate an effectively invisible target
65
+ * (WCAG 2.4.7 Focus Visible). Every reveal rule below pairs the two. */
66
+ [data-energy-level='75'] .energy-chrome:hover,
67
+ [data-energy-level='75'] .energy-chrome:focus-within {
63
68
  opacity: var(--energy-chrome-opacity-hover, 1);
64
69
  }
65
70
 
@@ -70,7 +75,8 @@
70
75
  transition: opacity 0.3s ease;
71
76
  }
72
77
 
73
- [data-energy-level='50'] .energy-chrome:hover {
78
+ [data-energy-level='50'] .energy-chrome:hover,
79
+ [data-energy-level='50'] .energy-chrome:focus-within {
74
80
  opacity: var(--energy-chrome-opacity-hover, 1);
75
81
  }
76
82
 
@@ -92,7 +98,8 @@
92
98
  transition: opacity 0.3s ease;
93
99
  }
94
100
 
95
- [data-energy-level='25'] .energy-chrome:hover {
101
+ [data-energy-level='25'] .energy-chrome:hover,
102
+ [data-energy-level='25'] .energy-chrome:focus-within {
96
103
  opacity: var(--energy-chrome-opacity-hover, 1);
97
104
  }
98
105
 
@@ -117,7 +124,8 @@
117
124
  transition: opacity 0.3s ease;
118
125
  }
119
126
 
120
- [data-energy-level='0'] .energy-chrome:hover {
127
+ [data-energy-level='0'] .energy-chrome:hover,
128
+ [data-energy-level='0'] .energy-chrome:focus-within {
121
129
  opacity: var(--energy-chrome-opacity-hover, 0.8);
122
130
  }
123
131