@xtia/jel 0.10.0 → 0.11.1

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,19 @@ 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) => {
457
459
  rafId = requestAnimationFrame(frame);
458
- const elapsed = time - lastTime;
460
+ const elapsed = time - (lastTime !== null && lastTime !== void 0 ? lastTime : time);
461
+ lastTime = time;
459
462
  emit(elapsed);
460
463
  };
461
- lastTime = performance.now();
462
464
  rafId = requestAnimationFrame(frame);
463
465
  return () => cancelAnimationFrame(rafId);
464
466
  });
@@ -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.1",
4
4
  "repository": {
5
5
  "url": "https://github.com/tiadrop/jel-ts",
6
6
  "type": "github"