@meursyphus/flitter 0.0.8 → 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/index.cjs CHANGED
@@ -12675,39 +12675,58 @@ var RenderOwner_default = RenderOwner;
12675
12675
 
12676
12676
  // src/scheduler/Scheduler.ts
12677
12677
  var Scheduler = class {
12678
- constructor() {
12678
+ constructor({
12679
+ renderFrameDispatcher
12680
+ }) {
12679
12681
  __publicField(this, "phase");
12680
12682
  __publicField(this, "persistenceCallbacks");
12681
12683
  __publicField(this, "postFrameCallbacks");
12684
+ __publicField(this, "renderFrameDispatcher");
12685
+ __publicField(this, "hasScheduledFrame", false);
12682
12686
  this.phase = 0 /* idle */;
12683
12687
  this.persistenceCallbacks = [];
12684
12688
  this.postFrameCallbacks = [];
12689
+ this.renderFrameDispatcher = renderFrameDispatcher;
12690
+ renderFrameDispatcher.setOnFrame(() => this.handleDrawFrame());
12685
12691
  }
12686
- consumePostCallbacks() {
12692
+ flushPostCallbacks() {
12687
12693
  this.postFrameCallbacks.forEach((callback) => {
12688
12694
  callback();
12689
12695
  });
12690
12696
  this.postFrameCallbacks = [];
12691
12697
  }
12692
- schedule() {
12698
+ ensureVisualUpdate() {
12693
12699
  switch (this.phase) {
12694
12700
  case 0 /* idle */:
12695
12701
  case 2 /* postFrameCallbacks */:
12696
- this.performSchedule();
12702
+ this.schedule();
12697
12703
  break;
12698
12704
  case 1 /* persistenceCallbacks */:
12699
12705
  break;
12700
12706
  }
12701
12707
  }
12702
- performSchedule() {
12708
+ schedule() {
12709
+ if (this.hasScheduledFrame)
12710
+ return;
12711
+ this.renderFrameDispatcher.dispatch();
12712
+ this.hasScheduledFrame = true;
12713
+ }
12714
+ handleDrawFrame() {
12715
+ assert(
12716
+ this.phase === 0 /* idle */,
12717
+ "Scheduler should be idle on beginning frame"
12718
+ );
12719
+ this.hasScheduledFrame = false;
12703
12720
  this.phase = 1 /* persistenceCallbacks */;
12721
+ this.flushPersistenceCallbacks();
12722
+ this.phase = 2 /* postFrameCallbacks */;
12723
+ this.flushPostCallbacks();
12724
+ this.phase = 0 /* idle */;
12725
+ }
12726
+ flushPersistenceCallbacks() {
12704
12727
  this.persistenceCallbacks.forEach((callback) => {
12705
12728
  callback();
12706
12729
  });
12707
- this.phase = 2 /* postFrameCallbacks */;
12708
- this.consumePostCallbacks();
12709
- this.postFrameCallbacks = [];
12710
- this.phase = 0 /* idle */;
12711
12730
  }
12712
12731
  addPersistenceCallbacks(callback) {
12713
12732
  this.persistenceCallbacks.push(() => callback());
@@ -12722,9 +12741,6 @@ var Scheduler_default = Scheduler;
12722
12741
  var RenderFrameDispatcher = class {
12723
12742
  constructor({ onFrame } = {}) {
12724
12743
  __publicField(this, "onFrame");
12725
- // Actually we don't need to invoke browser to render because browser automatically render its own state periodically
12726
- // so Here we just call onFrame callback.
12727
- __publicField(this, "idle", true);
12728
12744
  this.onFrame = onFrame;
12729
12745
  }
12730
12746
  setOnFrame(callback) {
@@ -12733,13 +12749,9 @@ var RenderFrameDispatcher = class {
12733
12749
  dispatch() {
12734
12750
  if (typeof window === "undefined")
12735
12751
  return;
12736
- if (!this.idle)
12737
- return;
12738
- this.idle = false;
12739
12752
  window.requestAnimationFrame(() => {
12740
12753
  var _a;
12741
12754
  (_a = this.onFrame) == null ? void 0 : _a.call(this);
12742
- this.idle = true;
12743
12755
  });
12744
12756
  }
12745
12757
  };
@@ -12940,19 +12952,18 @@ var AppRunner = class {
12940
12952
  window: _window,
12941
12953
  onResize: this.handleViewResize
12942
12954
  });
12943
- const renderDispatcher = new RenderFrameDispatcher_default();
12955
+ const renderFrameDispatcher = new RenderFrameDispatcher_default();
12956
+ const scheduler = new Scheduler_default({ renderFrameDispatcher });
12944
12957
  const buildOwner = new BuildOwner_default({
12945
- onNeedVisualUpdate: () => renderDispatcher.dispatch()
12958
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate()
12946
12959
  });
12947
12960
  const renderOwner = new RenderOwner_default({
12948
- onNeedVisualUpdate: () => renderDispatcher.dispatch(),
12961
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate(),
12949
12962
  renderContext,
12950
12963
  hitTestDispatcher: new HitTestDispatcher()
12951
12964
  });
12952
- const scheduler = new Scheduler_default();
12953
12965
  scheduler.addPersistenceCallbacks(() => buildOwner.flushBuild());
12954
12966
  scheduler.addPersistenceCallbacks(() => renderOwner.drawFrame());
12955
- renderDispatcher.setOnFrame(() => scheduler.schedule());
12956
12967
  this.buildOwner = buildOwner;
12957
12968
  this.renderOwner = renderOwner;
12958
12969
  this.scheduler = scheduler;
@@ -13002,7 +13013,7 @@ var AppRunner = class {
13002
13013
  this.layout();
13003
13014
  this.renderOwner.rearrangeDomOrder();
13004
13015
  this.paint();
13005
- this.scheduler.consumePostCallbacks();
13016
+ this.scheduler.flushPostCallbacks();
13006
13017
  }
13007
13018
  rebuild() {
13008
13019
  this.root.children[0].rebuild();
package/index.d.cts CHANGED
@@ -3408,14 +3408,29 @@ declare class RenderOwner {
3408
3408
  private flushPaint;
3409
3409
  }
3410
3410
 
3411
+ declare class RenderFrameDispatcher {
3412
+ private onFrame?;
3413
+ constructor({ onFrame }?: {
3414
+ onFrame?: () => void;
3415
+ });
3416
+ setOnFrame(callback: () => void): void;
3417
+ dispatch(): void;
3418
+ }
3419
+
3411
3420
  declare class Scheduler {
3412
3421
  phase: SchedulerPhase;
3413
3422
  private persistenceCallbacks;
3414
3423
  private postFrameCallbacks;
3415
- constructor();
3416
- consumePostCallbacks(): void;
3417
- schedule(): void;
3418
- private performSchedule;
3424
+ private renderFrameDispatcher;
3425
+ constructor({ renderFrameDispatcher, }: {
3426
+ renderFrameDispatcher: RenderFrameDispatcher;
3427
+ });
3428
+ flushPostCallbacks(): void;
3429
+ ensureVisualUpdate(): void;
3430
+ private hasScheduledFrame;
3431
+ private schedule;
3432
+ private handleDrawFrame;
3433
+ private flushPersistenceCallbacks;
3419
3434
  addPersistenceCallbacks(callback: () => void): void;
3420
3435
  addPostFrameCallbacks(callback: () => void): void;
3421
3436
  }
@@ -3425,16 +3440,6 @@ declare enum SchedulerPhase {
3425
3440
  postFrameCallbacks = 2
3426
3441
  }
3427
3442
 
3428
- declare class RenderFrameDispatcher {
3429
- private onFrame?;
3430
- constructor({ onFrame }?: {
3431
- onFrame?: () => void;
3432
- });
3433
- setOnFrame(callback: () => void): void;
3434
- private idle;
3435
- dispatch(): void;
3436
- }
3437
-
3438
3443
  declare class RenderView extends RenderObject {
3439
3444
  constructor({ renderOwner }: {
3440
3445
  renderOwner: RenderOwner;
package/index.d.ts CHANGED
@@ -3408,14 +3408,29 @@ declare class RenderOwner {
3408
3408
  private flushPaint;
3409
3409
  }
3410
3410
 
3411
+ declare class RenderFrameDispatcher {
3412
+ private onFrame?;
3413
+ constructor({ onFrame }?: {
3414
+ onFrame?: () => void;
3415
+ });
3416
+ setOnFrame(callback: () => void): void;
3417
+ dispatch(): void;
3418
+ }
3419
+
3411
3420
  declare class Scheduler {
3412
3421
  phase: SchedulerPhase;
3413
3422
  private persistenceCallbacks;
3414
3423
  private postFrameCallbacks;
3415
- constructor();
3416
- consumePostCallbacks(): void;
3417
- schedule(): void;
3418
- private performSchedule;
3424
+ private renderFrameDispatcher;
3425
+ constructor({ renderFrameDispatcher, }: {
3426
+ renderFrameDispatcher: RenderFrameDispatcher;
3427
+ });
3428
+ flushPostCallbacks(): void;
3429
+ ensureVisualUpdate(): void;
3430
+ private hasScheduledFrame;
3431
+ private schedule;
3432
+ private handleDrawFrame;
3433
+ private flushPersistenceCallbacks;
3419
3434
  addPersistenceCallbacks(callback: () => void): void;
3420
3435
  addPostFrameCallbacks(callback: () => void): void;
3421
3436
  }
@@ -3425,16 +3440,6 @@ declare enum SchedulerPhase {
3425
3440
  postFrameCallbacks = 2
3426
3441
  }
3427
3442
 
3428
- declare class RenderFrameDispatcher {
3429
- private onFrame?;
3430
- constructor({ onFrame }?: {
3431
- onFrame?: () => void;
3432
- });
3433
- setOnFrame(callback: () => void): void;
3434
- private idle;
3435
- dispatch(): void;
3436
- }
3437
-
3438
3443
  declare class RenderView extends RenderObject {
3439
3444
  constructor({ renderOwner }: {
3440
3445
  renderOwner: RenderOwner;
package/index.global.js CHANGED
@@ -13389,39 +13389,58 @@
13389
13389
 
13390
13390
  // src/scheduler/Scheduler.ts
13391
13391
  var Scheduler = class {
13392
- constructor() {
13392
+ constructor({
13393
+ renderFrameDispatcher
13394
+ }) {
13393
13395
  __publicField(this, "phase");
13394
13396
  __publicField(this, "persistenceCallbacks");
13395
13397
  __publicField(this, "postFrameCallbacks");
13398
+ __publicField(this, "renderFrameDispatcher");
13399
+ __publicField(this, "hasScheduledFrame", false);
13396
13400
  this.phase = 0 /* idle */;
13397
13401
  this.persistenceCallbacks = [];
13398
13402
  this.postFrameCallbacks = [];
13403
+ this.renderFrameDispatcher = renderFrameDispatcher;
13404
+ renderFrameDispatcher.setOnFrame(() => this.handleDrawFrame());
13399
13405
  }
13400
- consumePostCallbacks() {
13406
+ flushPostCallbacks() {
13401
13407
  this.postFrameCallbacks.forEach((callback) => {
13402
13408
  callback();
13403
13409
  });
13404
13410
  this.postFrameCallbacks = [];
13405
13411
  }
13406
- schedule() {
13412
+ ensureVisualUpdate() {
13407
13413
  switch (this.phase) {
13408
13414
  case 0 /* idle */:
13409
13415
  case 2 /* postFrameCallbacks */:
13410
- this.performSchedule();
13416
+ this.schedule();
13411
13417
  break;
13412
13418
  case 1 /* persistenceCallbacks */:
13413
13419
  break;
13414
13420
  }
13415
13421
  }
13416
- performSchedule() {
13422
+ schedule() {
13423
+ if (this.hasScheduledFrame)
13424
+ return;
13425
+ this.renderFrameDispatcher.dispatch();
13426
+ this.hasScheduledFrame = true;
13427
+ }
13428
+ handleDrawFrame() {
13429
+ assert(
13430
+ this.phase === 0 /* idle */,
13431
+ "Scheduler should be idle on beginning frame"
13432
+ );
13433
+ this.hasScheduledFrame = false;
13417
13434
  this.phase = 1 /* persistenceCallbacks */;
13435
+ this.flushPersistenceCallbacks();
13436
+ this.phase = 2 /* postFrameCallbacks */;
13437
+ this.flushPostCallbacks();
13438
+ this.phase = 0 /* idle */;
13439
+ }
13440
+ flushPersistenceCallbacks() {
13418
13441
  this.persistenceCallbacks.forEach((callback) => {
13419
13442
  callback();
13420
13443
  });
13421
- this.phase = 2 /* postFrameCallbacks */;
13422
- this.consumePostCallbacks();
13423
- this.postFrameCallbacks = [];
13424
- this.phase = 0 /* idle */;
13425
13444
  }
13426
13445
  addPersistenceCallbacks(callback) {
13427
13446
  this.persistenceCallbacks.push(() => callback());
@@ -13436,9 +13455,6 @@
13436
13455
  var RenderFrameDispatcher = class {
13437
13456
  constructor({ onFrame } = {}) {
13438
13457
  __publicField(this, "onFrame");
13439
- // Actually we don't need to invoke browser to render because browser automatically render its own state periodically
13440
- // so Here we just call onFrame callback.
13441
- __publicField(this, "idle", true);
13442
13458
  this.onFrame = onFrame;
13443
13459
  }
13444
13460
  setOnFrame(callback) {
@@ -13447,13 +13463,9 @@
13447
13463
  dispatch() {
13448
13464
  if (typeof window === "undefined")
13449
13465
  return;
13450
- if (!this.idle)
13451
- return;
13452
- this.idle = false;
13453
13466
  window.requestAnimationFrame(() => {
13454
13467
  var _a;
13455
13468
  (_a = this.onFrame) == null ? void 0 : _a.call(this);
13456
- this.idle = true;
13457
13469
  });
13458
13470
  }
13459
13471
  };
@@ -13654,19 +13666,18 @@
13654
13666
  window: _window,
13655
13667
  onResize: this.handleViewResize
13656
13668
  });
13657
- const renderDispatcher = new RenderFrameDispatcher_default();
13669
+ const renderFrameDispatcher = new RenderFrameDispatcher_default();
13670
+ const scheduler = new Scheduler_default({ renderFrameDispatcher });
13658
13671
  const buildOwner = new BuildOwner_default({
13659
- onNeedVisualUpdate: () => renderDispatcher.dispatch()
13672
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate()
13660
13673
  });
13661
13674
  const renderOwner = new RenderOwner_default({
13662
- onNeedVisualUpdate: () => renderDispatcher.dispatch(),
13675
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate(),
13663
13676
  renderContext,
13664
13677
  hitTestDispatcher: new HitTestDispatcher()
13665
13678
  });
13666
- const scheduler = new Scheduler_default();
13667
13679
  scheduler.addPersistenceCallbacks(() => buildOwner.flushBuild());
13668
13680
  scheduler.addPersistenceCallbacks(() => renderOwner.drawFrame());
13669
- renderDispatcher.setOnFrame(() => scheduler.schedule());
13670
13681
  this.buildOwner = buildOwner;
13671
13682
  this.renderOwner = renderOwner;
13672
13683
  this.scheduler = scheduler;
@@ -13716,7 +13727,7 @@
13716
13727
  this.layout();
13717
13728
  this.renderOwner.rearrangeDomOrder();
13718
13729
  this.paint();
13719
- this.scheduler.consumePostCallbacks();
13730
+ this.scheduler.flushPostCallbacks();
13720
13731
  }
13721
13732
  rebuild() {
13722
13733
  this.root.children[0].rebuild();
package/index.js CHANGED
@@ -12675,39 +12675,58 @@ var RenderOwner_default = RenderOwner;
12675
12675
 
12676
12676
  // src/scheduler/Scheduler.ts
12677
12677
  var Scheduler = class {
12678
- constructor() {
12678
+ constructor({
12679
+ renderFrameDispatcher
12680
+ }) {
12679
12681
  __publicField(this, "phase");
12680
12682
  __publicField(this, "persistenceCallbacks");
12681
12683
  __publicField(this, "postFrameCallbacks");
12684
+ __publicField(this, "renderFrameDispatcher");
12685
+ __publicField(this, "hasScheduledFrame", false);
12682
12686
  this.phase = 0 /* idle */;
12683
12687
  this.persistenceCallbacks = [];
12684
12688
  this.postFrameCallbacks = [];
12689
+ this.renderFrameDispatcher = renderFrameDispatcher;
12690
+ renderFrameDispatcher.setOnFrame(() => this.handleDrawFrame());
12685
12691
  }
12686
- consumePostCallbacks() {
12692
+ flushPostCallbacks() {
12687
12693
  this.postFrameCallbacks.forEach((callback) => {
12688
12694
  callback();
12689
12695
  });
12690
12696
  this.postFrameCallbacks = [];
12691
12697
  }
12692
- schedule() {
12698
+ ensureVisualUpdate() {
12693
12699
  switch (this.phase) {
12694
12700
  case 0 /* idle */:
12695
12701
  case 2 /* postFrameCallbacks */:
12696
- this.performSchedule();
12702
+ this.schedule();
12697
12703
  break;
12698
12704
  case 1 /* persistenceCallbacks */:
12699
12705
  break;
12700
12706
  }
12701
12707
  }
12702
- performSchedule() {
12708
+ schedule() {
12709
+ if (this.hasScheduledFrame)
12710
+ return;
12711
+ this.renderFrameDispatcher.dispatch();
12712
+ this.hasScheduledFrame = true;
12713
+ }
12714
+ handleDrawFrame() {
12715
+ assert(
12716
+ this.phase === 0 /* idle */,
12717
+ "Scheduler should be idle on beginning frame"
12718
+ );
12719
+ this.hasScheduledFrame = false;
12703
12720
  this.phase = 1 /* persistenceCallbacks */;
12721
+ this.flushPersistenceCallbacks();
12722
+ this.phase = 2 /* postFrameCallbacks */;
12723
+ this.flushPostCallbacks();
12724
+ this.phase = 0 /* idle */;
12725
+ }
12726
+ flushPersistenceCallbacks() {
12704
12727
  this.persistenceCallbacks.forEach((callback) => {
12705
12728
  callback();
12706
12729
  });
12707
- this.phase = 2 /* postFrameCallbacks */;
12708
- this.consumePostCallbacks();
12709
- this.postFrameCallbacks = [];
12710
- this.phase = 0 /* idle */;
12711
12730
  }
12712
12731
  addPersistenceCallbacks(callback) {
12713
12732
  this.persistenceCallbacks.push(() => callback());
@@ -12722,9 +12741,6 @@ var Scheduler_default = Scheduler;
12722
12741
  var RenderFrameDispatcher = class {
12723
12742
  constructor({ onFrame } = {}) {
12724
12743
  __publicField(this, "onFrame");
12725
- // Actually we don't need to invoke browser to render because browser automatically render its own state periodically
12726
- // so Here we just call onFrame callback.
12727
- __publicField(this, "idle", true);
12728
12744
  this.onFrame = onFrame;
12729
12745
  }
12730
12746
  setOnFrame(callback) {
@@ -12733,13 +12749,9 @@ var RenderFrameDispatcher = class {
12733
12749
  dispatch() {
12734
12750
  if (typeof window === "undefined")
12735
12751
  return;
12736
- if (!this.idle)
12737
- return;
12738
- this.idle = false;
12739
12752
  window.requestAnimationFrame(() => {
12740
12753
  var _a;
12741
12754
  (_a = this.onFrame) == null ? void 0 : _a.call(this);
12742
- this.idle = true;
12743
12755
  });
12744
12756
  }
12745
12757
  };
@@ -12940,19 +12952,18 @@ var AppRunner = class {
12940
12952
  window: _window,
12941
12953
  onResize: this.handleViewResize
12942
12954
  });
12943
- const renderDispatcher = new RenderFrameDispatcher_default();
12955
+ const renderFrameDispatcher = new RenderFrameDispatcher_default();
12956
+ const scheduler = new Scheduler_default({ renderFrameDispatcher });
12944
12957
  const buildOwner = new BuildOwner_default({
12945
- onNeedVisualUpdate: () => renderDispatcher.dispatch()
12958
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate()
12946
12959
  });
12947
12960
  const renderOwner = new RenderOwner_default({
12948
- onNeedVisualUpdate: () => renderDispatcher.dispatch(),
12961
+ onNeedVisualUpdate: () => scheduler.ensureVisualUpdate(),
12949
12962
  renderContext,
12950
12963
  hitTestDispatcher: new HitTestDispatcher()
12951
12964
  });
12952
- const scheduler = new Scheduler_default();
12953
12965
  scheduler.addPersistenceCallbacks(() => buildOwner.flushBuild());
12954
12966
  scheduler.addPersistenceCallbacks(() => renderOwner.drawFrame());
12955
- renderDispatcher.setOnFrame(() => scheduler.schedule());
12956
12967
  this.buildOwner = buildOwner;
12957
12968
  this.renderOwner = renderOwner;
12958
12969
  this.scheduler = scheduler;
@@ -13002,7 +13013,7 @@ var AppRunner = class {
13002
13013
  this.layout();
13003
13014
  this.renderOwner.rearrangeDomOrder();
13004
13015
  this.paint();
13005
- this.scheduler.consumePostCallbacks();
13016
+ this.scheduler.flushPostCallbacks();
13006
13017
  }
13007
13018
  rebuild() {
13008
13019
  this.root.children[0].rebuild();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meursyphus/flitter",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "description": "A declarative, widget-based library built on SVG for simplifying data visualization with a Flutter-like syntax.",
5
5
  "keywords": [
6
6
  "flitter",