@xtia/jel 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { $ } from "./internal/element";
2
2
  import { DomEntity } from "./internal/types";
3
- export { DomEntity, ElementClassDescriptor, ElementDescriptor, DOMContent, DomHelper, StyleAccessor, JelEntity, EventEmitterMap } from "./internal/types";
3
+ export { DomEntity, ElementClassDescriptor, ElementDescriptor, DOMContent, DomHelper, StyleAccessor, JelEntity, EventEmitterMap, EmitterLike, CSSValue } from "./internal/types";
4
4
  export { createEntity } from "./internal/util";
5
- export { createEventSource, createEventsSource, interval, timeout, SubjectEmitter, toEventEmitter, type EventEmitter, type EventRecording, type EventRecorder, combineEmitters } from "./internal/emitter";
5
+ export { createEventSource, createEventsSource, interval, timeout, animationFrames, SubjectEmitter, toEventEmitter, type EventEmitter, type EventRecording, type EventRecorder, combineEmitters } from "./internal/emitter";
6
6
  export { createEventsProxy } from "./internal/proxy";
7
7
  export { $ };
8
8
  export declare const $body: DomEntity<HTMLElement>;
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { $ } from "./internal/element";
2
2
  import { createEventsProxy } from "./internal/proxy";
3
3
  export { createEntity } from "./internal/util";
4
- export { createEventSource, createEventsSource, interval, timeout, SubjectEmitter, toEventEmitter, combineEmitters } from "./internal/emitter";
4
+ export { createEventSource, createEventsSource, interval, timeout, animationFrames, SubjectEmitter, toEventEmitter, combineEmitters } from "./internal/emitter";
5
5
  export { createEventsProxy } from "./internal/proxy";
6
6
  export { $ };
7
7
  export const $body = "document" in globalThis ? $(document.body) : undefined;
@@ -1,6 +1,4 @@
1
- import { Dictionary, EmissionSource, EmitterLike, EventHandlerMap, EventSource, Handler, Period } from "./types";
2
- export type ListenFunc<T> = (handler: Handler<T>) => UnsubscribeFunc;
3
- export type UnsubscribeFunc = () => void;
1
+ import { Dictionary, EmissionSource, EmitterLike, EventHandlerMap, EventSource, Handler, ListenFunc, Period, UnsubscribeFunc } from "./types";
4
2
  export declare class EventEmitter<T> {
5
3
  protected onListen: ListenFunc<T>;
6
4
  constructor(onListen: ListenFunc<T>);
@@ -208,6 +206,9 @@ export declare function createEventsSource<Map extends Dictionary<any>>(initialL
208
206
  };
209
207
  export declare function interval(ms: number): EventEmitter<number>;
210
208
  export declare function interval(period: Period): EventEmitter<number>;
209
+ /**
210
+ * Emits time deltas from a shared RAF loop
211
+ */
211
212
  export declare const animationFrames: EventEmitter<number>;
212
213
  export declare function timeout(ms: number): EventEmitter<void>;
213
214
  export declare function timeout(period: Period): EventEmitter<void>;
@@ -1,6 +1,5 @@
1
1
  import { createEventsProxy } from "./proxy.js";
2
2
  import { isReactiveSource } from "./util";
3
- const NOOP = () => { };
4
3
  function periodAsMilliseconds(t) {
5
4
  if (typeof t == "number")
6
5
  return t;
@@ -449,16 +448,20 @@ export function interval(t) {
449
448
  });
450
449
  return new EventEmitter(listen);
451
450
  }
451
+ /**
452
+ * Emits time deltas from a shared RAF loop
453
+ */
452
454
  export const animationFrames = (() => {
453
455
  const { emit, listen } = createListenable(() => {
454
456
  let rafId = null;
455
457
  let lastTime = null;
456
458
  const frame = (time) => {
459
+ if (lastTime === null)
460
+ lastTime = time;
457
461
  rafId = requestAnimationFrame(frame);
458
462
  const elapsed = time - lastTime;
459
463
  emit(elapsed);
460
464
  };
461
- lastTime = performance.now();
462
465
  rafId = requestAnimationFrame(frame);
463
466
  return () => cancelAnimationFrame(rafId);
464
467
  });
@@ -1,14 +1,16 @@
1
1
  import { ClassAccessor } from "./element";
2
- import { EventEmitter, ListenFunc, UnsubscribeFunc } from "./emitter";
2
+ import { EventEmitter } from "./emitter";
3
3
  import { entityDataSymbol } from "./util";
4
4
  export type ElementClassDescriptor = string | Record<string, boolean | EmitterLike<boolean> | undefined> | undefined | ElementClassDescriptor[];
5
5
  export type DOMContent = number | null | string | Element | JelEntity<object> | Text | DOMContent[];
6
6
  export type DomEntity<T extends HTMLElement> = JelEntity<ElementAPI<T>>;
7
7
  export type HTMLTag = keyof HTMLElementTagNameMap;
8
+ export type ListenFunc<T> = (handler: Handler<T>) => UnsubscribeFunc;
9
+ export type UnsubscribeFunc = () => void;
8
10
  export type EmitterLike<T> = {
9
- subscribe: (callback: (value: T) => void) => UnsubscribeFunc;
11
+ subscribe: ListenFunc<T>;
10
12
  } | {
11
- listen: (callback: (value: T) => void) => UnsubscribeFunc;
13
+ listen: ListenFunc<T>;
12
14
  };
13
15
  export type EmissionSource<T> = EmitterLike<T> | ListenFunc<T>;
14
16
  export type CSSValue = string | number | null | HexCodeContainer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xtia/jel",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "repository": {
5
5
  "url": "https://github.com/tiadrop/jel-ts",
6
6
  "type": "github"