@ngutil/aria 0.0.100 → 0.0.101

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.
@@ -440,40 +440,51 @@ function eventToKeystroke(event) {
440
440
  };
441
441
  }
442
442
 
443
+ var GesturePointerType;
444
+ (function (GesturePointerType) {
445
+ GesturePointerType["Mouse"] = "mouse";
446
+ GesturePointerType["Touch"] = "touch";
447
+ })(GesturePointerType || (GesturePointerType = {}));
448
+ var GesturePhase;
449
+ (function (GesturePhase) {
450
+ GesturePhase["Start"] = "start";
451
+ GesturePhase["Moving"] = "moving";
452
+ GesturePhase["End"] = "end";
453
+ })(GesturePhase || (GesturePhase = {}));
443
454
  const Listeners = {
444
455
  mousedown: {
445
- pointerType: "mouse" /* GesturePointerType.Mouse */,
446
- phase: "start" /* GesturePhase.Start */,
456
+ pointerType: GesturePointerType.Mouse,
457
+ phase: GesturePhase.Start,
447
458
  options: { capture: true, passive: false }
448
459
  },
449
460
  mousemove: {
450
- pointerType: "mouse" /* GesturePointerType.Mouse */,
451
- phase: "moving" /* GesturePhase.Moving */,
461
+ pointerType: GesturePointerType.Mouse,
462
+ phase: GesturePhase.Moving,
452
463
  options: { capture: true, passive: false }
453
464
  },
454
465
  mouseup: {
455
- pointerType: "mouse" /* GesturePointerType.Mouse */,
456
- phase: "end" /* GesturePhase.End */,
466
+ pointerType: GesturePointerType.Mouse,
467
+ phase: GesturePhase.End,
457
468
  options: { capture: true, passive: false }
458
469
  },
459
470
  touchstart: {
460
- pointerType: "touch" /* GesturePointerType.Touch */,
461
- phase: "start" /* GesturePhase.Start */,
471
+ pointerType: GesturePointerType.Touch,
472
+ phase: GesturePhase.Start,
462
473
  options: { capture: true, passive: false }
463
474
  },
464
475
  touchmove: {
465
- pointerType: "touch" /* GesturePointerType.Touch */,
466
- phase: "moving" /* GesturePhase.Moving */,
476
+ pointerType: GesturePointerType.Touch,
477
+ phase: GesturePhase.Moving,
467
478
  options: { capture: true, passive: false }
468
479
  },
469
480
  touchend: {
470
- pointerType: "touch" /* GesturePointerType.Touch */,
471
- phase: "end" /* GesturePhase.End */,
481
+ pointerType: GesturePointerType.Touch,
482
+ phase: GesturePhase.End,
472
483
  options: { capture: true, passive: false }
473
484
  },
474
485
  touchcancel: {
475
- pointerType: "touch" /* GesturePointerType.Touch */,
476
- phase: "end" /* GesturePhase.End */,
486
+ pointerType: GesturePointerType.Touch,
487
+ phase: GesturePhase.End,
477
488
  options: { capture: true, passive: false }
478
489
  }
479
490
  // ,
@@ -484,6 +495,19 @@ const Listeners = {
484
495
  // }
485
496
  };
486
497
 
498
+ var GestureCaptureState;
499
+ (function (GestureCaptureState) {
500
+ // Unchecked
501
+ GestureCaptureState[GestureCaptureState["Unchecked"] = 0] = "Unchecked";
502
+ // Pending state
503
+ GestureCaptureState[GestureCaptureState["Pending"] = 1] = "Pending";
504
+ // Skip capture
505
+ GestureCaptureState[GestureCaptureState["Skip"] = 2] = "Skip";
506
+ // Determine by priority
507
+ GestureCaptureState[GestureCaptureState["Maybe"] = 3] = "Maybe";
508
+ // Instanlty terminate capture, and fire event
509
+ GestureCaptureState[GestureCaptureState["Instant"] = 4] = "Instant";
510
+ })(GestureCaptureState || (GestureCaptureState = {}));
487
511
  class Gesture {
488
512
  constructor(options) {
489
513
  /**
@@ -505,7 +529,7 @@ class Gesture {
505
529
  /**
506
530
  * The pointer types of the gesture
507
531
  */
508
- this.pointerTypes = ["mouse" /* GesturePointerType.Mouse */, "touch" /* GesturePointerType.Touch */];
532
+ this.pointerTypes = [GesturePointerType.Mouse, GesturePointerType.Touch];
509
533
  /**
510
534
  * The number of pointers of the gesture can handle
511
535
  */
@@ -544,7 +568,7 @@ class Gesture {
544
568
  return (this.pointerTypes.includes(event.pointerType) &&
545
569
  this.pointerCount === event.pointers.length &&
546
570
  this.originTypes.includes(event.origin.type) &&
547
- (event.pointerType !== "mouse" /* GesturePointerType.Mouse */ ||
571
+ (event.pointerType !== GesturePointerType.Mouse ||
548
572
  (event.origin instanceof MouseEvent && this.mouseButtons.includes(event.origin.button))));
549
573
  }
550
574
  }
@@ -561,12 +585,12 @@ class GestureDragImpl extends Gesture {
561
585
  capture(events) {
562
586
  return events.pipe(map(state => {
563
587
  if (Math.abs(state.pointers[0].distance.x) > this.distanceInclusion) {
564
- return this.horizontal ? 3 /* GestureCaptureState.Maybe */ : 2 /* GestureCaptureState.Skip */;
588
+ return this.horizontal ? GestureCaptureState.Maybe : GestureCaptureState.Skip;
565
589
  }
566
590
  if (Math.abs(state.pointers[0].distance.y) > this.distanceInclusion) {
567
- return this.vertical ? 3 /* GestureCaptureState.Maybe */ : 2 /* GestureCaptureState.Skip */;
591
+ return this.vertical ? GestureCaptureState.Maybe : GestureCaptureState.Skip;
568
592
  }
569
- return 1 /* GestureCaptureState.Pending */;
593
+ return GestureCaptureState.Pending;
570
594
  }));
571
595
  }
572
596
  handle(events) {
@@ -630,29 +654,29 @@ const GestureDragVertical = gestureDrag({ horizontal: false, vertical: true });
630
654
 
631
655
  class GestureLongTapImpl extends Gesture {
632
656
  constructor(options) {
633
- super({ pointerTypes: ["touch" /* GesturePointerType.Touch */], ...options });
657
+ super({ pointerTypes: [GesturePointerType.Touch], ...options });
634
658
  this.type = "gesture-longtap";
635
659
  }
636
660
  capture(events) {
637
661
  return combineLatest({ timeWithin: timer(this.timeWithin).pipe(startWith(null)), event: events }).pipe(map(({ timeWithin, event }) => {
638
662
  if (event.elapsed > this.timeWithin) {
639
- return 2 /* GestureCaptureState.Skip */;
663
+ return GestureCaptureState.Skip;
640
664
  }
641
- if (event.phase === "end" /* GesturePhase.End */ && event.elapsed > this.timeWithin) {
642
- return 2 /* GestureCaptureState.Skip */;
665
+ if (event.phase === GesturePhase.End && event.elapsed > this.timeWithin) {
666
+ return GestureCaptureState.Skip;
643
667
  }
644
668
  const distance = event.pointers[0].distance;
645
669
  if (Math.abs(distance.x) < this.distanceInclusion && Math.abs(distance.y) < this.distanceInclusion) {
646
670
  // maybe is ok event.phase === GesturePhase.End
647
- return timeWithin !== null ? 4 /* GestureCaptureState.Instant */ : 1 /* GestureCaptureState.Pending */;
671
+ return timeWithin !== null ? GestureCaptureState.Instant : GestureCaptureState.Pending;
648
672
  }
649
673
  else {
650
- return 2 /* GestureCaptureState.Skip */;
674
+ return GestureCaptureState.Skip;
651
675
  }
652
676
  }));
653
677
  }
654
678
  handle(events) {
655
- return super.handle(events.pipe(filter(event => event.phase === "start" /* GesturePhase.Start */ || event.phase === "end" /* GesturePhase.End */)));
679
+ return super.handle(events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End)));
656
680
  }
657
681
  }
658
682
  function gestureLongTap(options) {
@@ -679,15 +703,15 @@ class GestureTapImpl extends Gesture {
679
703
  // } else {
680
704
  // return GestureCaptureState.Pending
681
705
  // }
682
- return event.phase === "end" /* GesturePhase.End */ ? 4 /* GestureCaptureState.Instant */ : 1 /* GestureCaptureState.Pending */;
706
+ return event.phase === GesturePhase.End ? GestureCaptureState.Instant : GestureCaptureState.Pending;
683
707
  }
684
708
  else {
685
- return 2 /* GestureCaptureState.Skip */;
709
+ return GestureCaptureState.Skip;
686
710
  }
687
711
  }));
688
712
  }
689
713
  handle(events) {
690
- return super.handle(events.pipe(filter(event => event.phase === "start" /* GesturePhase.Start */ || event.phase === "end" /* GesturePhase.End */)));
714
+ return super.handle(events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End)));
691
715
  }
692
716
  }
693
717
  function gestureTap(options) {
@@ -705,10 +729,10 @@ class GestureService {
705
729
  #watchers = [];
706
730
  #trigger = new Subject();
707
731
  #moving = merge(...Object.keys(Listeners)
708
- .filter(name => Listeners[name].phase === "moving" /* GesturePhase.Moving */)
732
+ .filter(name => Listeners[name].phase === GesturePhase.Moving)
709
733
  .map(name => this.#listen(name, Listeners[name]))).pipe(share());
710
734
  #end = merge(...Object.keys(Listeners)
711
- .filter(name => Listeners[name].phase === "end" /* GesturePhase.End */)
735
+ .filter(name => Listeners[name].phase === GesturePhase.End)
712
736
  .map(name => this.#listen(name, Listeners[name]))).pipe(share());
713
737
  #eventStream = merge(this.#moving, this.#end).pipe(share());
714
738
  #begin = new Observable((dst) => {
@@ -737,7 +761,7 @@ class GestureService {
737
761
  .reduce((gestures, { gesture }) => {
738
762
  if (!gestures.has(gesture)) {
739
763
  includeScrollDistance = includeScrollDistance || gesture.includeScrollDistance;
740
- gestures.set(gesture, 0 /* GestureCaptureState.Unchecked */);
764
+ gestures.set(gesture, GestureCaptureState.Unchecked);
741
765
  }
742
766
  return gestures;
743
767
  }, new Map());
@@ -765,14 +789,14 @@ class GestureService {
765
789
  ...curr,
766
790
  target: targetEl,
767
791
  elapsed: curr.origin.timeStamp - startAt
768
- }), startEvent), takeWhile(event => event.phase !== "end" /* GesturePhase.End */, true),
792
+ }), startEvent), takeWhile(event => event.phase !== GesturePhase.End, true),
769
793
  // finalize(() => console.log("FINALIZE STREAM")),
770
794
  share());
771
795
  const captureState = eventStream.pipe(connect(src => {
772
796
  const state = { events: [], gestures, includeScrollDistance };
773
797
  return merge(src.pipe(tap(event => state.events.push(event))), ...Array.from(gestures.keys())
774
798
  .sort(sortByPripority)
775
- .map(gesture => gesture.capture(src.pipe(filter(gesture.shouldCapture.bind(gesture)))).pipe(takeWhile(result => result !== 2 /* GestureCaptureState.Skip */, true), tap(result => gestures.set(gesture, result))))).pipe(map(() => state));
799
+ .map(gesture => gesture.capture(src.pipe(filter(gesture.shouldCapture.bind(gesture)))).pipe(takeWhile(result => result !== GestureCaptureState.Skip, true), tap(result => gestures.set(gesture, result))))).pipe(map(() => state));
776
800
  })
777
801
  // finalize(() => console.log("FINALIZE CAPTURE"))
778
802
  );
@@ -782,24 +806,24 @@ class GestureService {
782
806
  const partition = (partitions[captureState] ??= []);
783
807
  partition.push(gesture);
784
808
  }
785
- if (partitions[4 /* GestureCaptureState.Instant */] != null) {
809
+ if (partitions[GestureCaptureState.Instant] != null) {
786
810
  return {
787
- gesture: partitions[4 /* GestureCaptureState.Instant */].sort(sortByPripority)[0],
811
+ gesture: partitions[GestureCaptureState.Instant].sort(sortByPripority)[0],
788
812
  events: state.events
789
813
  };
790
814
  }
791
815
  // while not all gestures return from Gesture.capture
792
- if (partitions[0 /* GestureCaptureState.Unchecked */] != null) {
816
+ if (partitions[GestureCaptureState.Unchecked] != null) {
793
817
  return null;
794
818
  }
795
819
  // while has pending, the capture is continued
796
- if (partitions[1 /* GestureCaptureState.Pending */] != null) {
820
+ if (partitions[GestureCaptureState.Pending] != null) {
797
821
  return null;
798
822
  }
799
823
  // no pendig & has maybe
800
- if (partitions[3 /* GestureCaptureState.Maybe */] != null) {
824
+ if (partitions[GestureCaptureState.Maybe] != null) {
801
825
  return {
802
- gesture: partitions[3 /* GestureCaptureState.Maybe */].sort(sortByPripority)[0],
826
+ gesture: partitions[GestureCaptureState.Maybe].sort(sortByPripority)[0],
803
827
  events: state.events
804
828
  };
805
829
  }
@@ -812,7 +836,7 @@ class GestureService {
812
836
  );
813
837
  return selectGesture.pipe(switchMap(({ events, gesture }) => gesture
814
838
  .handle(eventStream.pipe(startWith(...events), tap(({ origin }) => preventDefault(origin)), filter(gesture.isRelevantEvent.bind(gesture))))
815
- .pipe(takeWhile(v => v.phase !== "end" /* GesturePhase.End */, true), tap(detail => dispatchEvent(new CustomEvent(gesture.type, { detail, bubbles: true, cancelable: true })))
839
+ .pipe(takeWhile(v => v.phase !== GesturePhase.End, true), tap(detail => dispatchEvent(new CustomEvent(gesture.type, { detail, bubbles: true, cancelable: true })))
816
840
  // finalize(() => console.log("GESTURE FINALIZE"))
817
841
  )),
818
842
  // finalize(() => console.log("FINALIZE RESULT")),
@@ -820,7 +844,7 @@ class GestureService {
820
844
  }), share());
821
845
  constructor() {
822
846
  const triggers = merge(...Object.keys(Listeners)
823
- .filter(name => Listeners[name].phase === "start" /* GesturePhase.Start */)
847
+ .filter(name => Listeners[name].phase === GesturePhase.Start)
824
848
  .map(name => this.#listen(name, Listeners[name])));
825
849
  triggers.pipe(takeUntilDestroyed()).subscribe(this.#trigger);
826
850
  }
@@ -935,7 +959,7 @@ function pointersFromEvent(event) {
935
959
  }
936
960
  }
937
961
  function updatePointers(state) {
938
- if (state.phase === "start" /* GesturePhase.Start */) {
962
+ if (state.phase === GesturePhase.Start) {
939
963
  state.pointers = pointersFromEvent(state.origin).map(v => {
940
964
  return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } };
941
965
  });
@@ -1643,5 +1667,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
1643
1667
  * Generated bundle index. Do not edit.
1644
1668
  */
1645
1669
 
1646
- export { AbstractUiState, ActivityService, BusyDirective, DirtyDirective, DisabledDirective, FocusService, FocusState, FocusTrap, Focusable, Gesture, GestureDrag, GestureDragHorizontal, GestureDragImpl, GestureDragVertical, GestureLongTap, GestureLongTapImpl, GestureService, GestureTap, GestureTapImpl, KeystrokeService, Listeners, NOTSET, ProgressSegmentRef, ProgressState, ReadonlyDirective, UiState, UiStateModule, gestureDrag, gestureLongTap, gestureTap };
1670
+ export { AbstractUiState, ActivityService, BusyDirective, DirtyDirective, DisabledDirective, FocusService, FocusState, FocusTrap, Focusable, Gesture, GestureCaptureState, GestureDrag, GestureDragHorizontal, GestureDragImpl, GestureDragVertical, GestureLongTap, GestureLongTapImpl, GesturePhase, GesturePointerType, GestureService, GestureTap, GestureTapImpl, KeystrokeService, Listeners, NOTSET, ProgressSegmentRef, ProgressState, ReadonlyDirective, UiState, UiStateModule, gestureDrag, gestureLongTap, gestureTap };
1647
1671
  //# sourceMappingURL=ngutil-aria.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/gestures/gesture-event.ts","../../../../packages/aria/src/gestures/gesture.ts","../../../../packages/aria/src/gestures/gesture-drag.ts","../../../../packages/aria/src/gestures/gesture-longtap.ts","../../../../packages/aria/src/gestures/gesture-tap.ts","../../../../packages/aria/src/gestures/gesture.service.ts","../../../../packages/aria/src/ui-state/selector.ts","../../../../packages/aria/src/ui-state/ui-state.ts","../../../../packages/aria/src/ui-state/abstract.ts","../../../../packages/aria/src/ui-state/busy.directive.ts","../../../../packages/aria/src/ui-state/dirty.directive.ts","../../../../packages/aria/src/ui-state/disabled.directive.ts","../../../../packages/aria/src/ui-state/readonly.directive.ts","../../../../packages/aria/src/ui-state/progress-state.ts","../../../../packages/aria/src/ui-state/index.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n throttleTime,\n timer\n} from \"rxjs\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n type: keyof typeof EVENT_ORIGIN\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nconst EVENT_ORIGIN = {\n keydown: \"keyboard\",\n mousedown: \"mouse\",\n mousemove: \"mouse\",\n touchstart: \"touch\"\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService {\n readonly #zone = inject(NgZone)\n readonly #doc = inject(DOCUMENT)\n\n readonly events$: Observable<ActivityEvent> = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent(this.#doc, \"keydown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousedown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousemove\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"touchstart\", EVENT_OPTIONS)\n ).pipe(\n map(event => {\n const type = event.type as ActivityEvent[\"type\"]\n return {\n origin: EVENT_ORIGIN[type] as ActivityOrigin,\n type: type,\n node: event.target as any\n }\n }),\n share()\n )\n )\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events$.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events$\n }\n }\n\n watchInactvity(timeout: number) {\n return this.events$.pipe(\n startWith(null),\n throttleTime(timeout / 2),\n switchMap(() => timer(0, timeout).pipe(take(2))),\n map(v => v !== 0),\n distinctUntilChanged(),\n shareReplay(1)\n )\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n connect,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n Observable,\n of,\n scan,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n tap,\n timer\n} from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput, isEqual, isEqualStrict } from \"@ngutil/common\"\n\nimport { ActivityEvent, ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusOriginEvent {\n element: Node\n origin: FocusOrigin\n}\n\ninterface EventState {\n activity?: ActivityEvent\n focus?: Node\n blur?: Node\n nextOrigin?: FocusOrigin\n event?: FocusOriginEvent\n deferred?: FocusOriginEvent\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n\n readonly #originOverrides = new BehaviorSubject<Map<Node, ActivityOrigin>>(new Map())\n\n readonly #focus: Observable<Node> = listener(this.#document, this.#zone, \"focus\", EVENT_OPTIONS).pipe(\n connect(focus =>\n this.#zone.runOutsideAngular(() => {\n let lastFocused: Node | null = null\n const sideEffect = new Subject<Node>()\n\n // if element removed form document, emit blur & focus\n const mutation = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === \"childList\" && mutation.removedNodes.length > 0) {\n for (const removed of Array.from(mutation.removedNodes)) {\n if (removed === lastFocused || removed.contains(lastFocused)) {\n this.#blurSide.next(lastFocused!)\n sideEffect.next(this.#document.activeElement!)\n return\n }\n }\n }\n }\n })\n\n mutation.observe(this.#document, { subtree: true, childList: true })\n return merge(\n focus.pipe(\n tap(node => (lastFocused = node)),\n finalize(() => mutation.disconnect())\n ),\n sideEffect\n )\n })\n ),\n\n distinctUntilChanged(isEqualStrict)\n )\n\n readonly #blurEvent = listener(this.#document, this.#zone, \"blur\", EVENT_OPTIONS)\n readonly #blurSide = new Subject<Node>()\n readonly #blur: Observable<Node> = merge(this.#blurEvent, this.#blurSide).pipe(distinctUntilChanged(isEqualStrict))\n\n readonly events: Observable<FocusOriginEvent> = this.#zone.runOutsideAngular(() => {\n const activity = this.#activity.events$.pipe(\n filter(activity => activity.type !== \"mousemove\"),\n map(activity => ({ activity }) satisfies Partial<EventState>)\n )\n const focus = this.#focus.pipe(map(focus => ({ focus }) satisfies Partial<EventState>))\n const blur = this.#blur.pipe(map(blur => ({ blur }) satisfies Partial<EventState>))\n\n const event = merge(activity, focus, blur).pipe(\n scan<EventState, EventState>((state, curr) => {\n const result: EventState = { ...state, event: undefined, deferred: undefined }\n\n if (curr.blur != null) {\n if (curr.blur === state.focus) {\n result.deferred = { element: curr.blur, origin: null }\n } else if (state.deferred && state.deferred.origin == null) {\n result.deferred = state.deferred\n }\n } else if (curr.focus != null) {\n if (\n curr.focus === document &&\n state.blur === curr.focus &&\n (!state.deferred || !state.deferred.origin)\n ) {\n result.deferred = { element: curr.focus, origin: null }\n result.nextOrigin = \"program\"\n return result\n }\n\n if (state.nextOrigin) {\n result.event = { element: curr.focus, origin: state.nextOrigin }\n result.nextOrigin = undefined\n } else if (state.activity) {\n result.event = { element: curr.focus, origin: state.activity.origin }\n }\n } else if (curr.activity) {\n delete result.nextOrigin\n if (\n state.event &&\n curr.activity.origin !== \"keyboard\" &&\n state.event.origin !== curr.activity.origin\n ) {\n result.deferred = { ...state.event, origin: curr.activity.origin }\n }\n }\n return { ...result, ...curr }\n }, {} as EventState),\n switchMap(state => {\n if (state.deferred) {\n return timer(20).pipe(\n map(() => {\n state.event = state.deferred\n delete state.deferred\n return state\n })\n )\n } else {\n return of(state)\n }\n }),\n map(state => state.event),\n filter(event => !!event)\n )\n\n return combineLatest({ event, overrides: this.#originOverrides }).pipe(\n map(({ event, overrides }) => {\n const override = overrides.get(event.element)\n\n if (override != null) {\n overrides.delete(event.element)\n event.origin = override || event.origin\n }\n\n return event\n }),\n distinctUntilChanged(isEqual),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n })\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (event.element && (event.element === el || el.contains(event.element))) {\n return event\n }\n return { element: el, origin: null } as FocusOriginEvent\n })\n )\n }\n\n focus(node: ElementInput, origin?: ActivityOrigin) {\n if (origin != null) {\n this.#setOrigin(node, origin)\n }\n coerceElement(node).focus()\n }\n\n queryFocusable(inside: ElementInput): FocusableElement[] {\n return focusable(coerceElement(inside), { includeContainer: false })\n }\n\n getFirstFocusable(inside: ElementInput): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: ElementInput): boolean {\n return isFocusable(coerceElement(node))\n }\n\n focusTrap(inside: ElementInput, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(coerceElement(inside), deferCaptureElements)\n }\n\n #setOrigin(el: ElementInput, origin: ActivityOrigin) {\n const target = coerceElement(el)\n const map = this.#originOverrides.value\n const old = map.get(target)\n if (old !== origin) {\n map.set(target, origin)\n this.#originOverrides.next(map)\n }\n }\n\n #delOrigin(el: ElementInput) {\n const target = coerceElement(el)\n const map = this.#originOverrides.value\n if (map.has(target)) {\n map.delete(target)\n this.#originOverrides.next(map)\n }\n }\n}\n\nfunction listener(doc: Document, zone: NgZone, type: Event[\"type\"], options: AddEventListenerOptions) {\n return new Observable((dst: Subscriber<Node>) =>\n zone.runOutsideAngular(() => {\n const handler = (e: Event) => {\n dst.next(e.target! as Node)\n }\n document.addEventListener(type, handler, options)\n return () => document.removeEventListener(type, handler, options)\n })\n )\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { computed, Directive, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ConnectProtocol, ElementInput, isElementInput, isEqual } from \"@ngutil/common\"\n\nimport { FocusOrigin, FocusOriginEvent, FocusService } from \"./focus.service\"\n\n@Directive({\n host: {\n \"[attr.focus]\": \"self()\",\n \"[attr.focus-within]\": \"within()\",\n \"[attr.focus-present]\": \"has()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusOriginEvent = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusOriginEvent>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusOriginEvent> = combineLatest([this.#self, this.#connEvent]).pipe(\n // debounceTime(100), // TODO: miért volt ez itt?\n map(([self, conn]) => (self.origin !== null ? self : conn.origin !== null ? conn : this.#default)),\n distinctUntilChanged(isEqual),\n shareReplay(1)\n )\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true, equal: isEqual })\n\n readonly self = computed<FocusOrigin>(() => {\n const event = this.event()\n if (event == null) {\n return null\n }\n return event.element === this.#el.nativeElement ? event.origin : null\n })\n\n readonly within = computed<FocusOrigin>(() => {\n const event = this.event()\n if (event == null) {\n return null\n }\n return event.element !== this.#el.nativeElement ? event.origin : null\n })\n\n readonly has = computed<FocusOrigin>(() => this.self() || this.within())\n\n constructor() {\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n // effect(() => {\n // console.log(this.#el.nativeElement, this.has())\n // })\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n\n if (focusable === false) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n EMPTY,\n filter,\n from,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n share,\n shareReplay,\n startWith,\n Subscriber,\n switchMap\n} from \"rxjs\"\n\nimport { coerceElement, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"../focus\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\nexport type KeystrokeActivation = ElementInput | FocusState | Observable<ElementInput | FocusState | boolean>\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n\n readonly #keyEvent = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent<KeyboardEvent>(this.#document, \"keydown\", { capture: true, passive: false }),\n fromEvent<KeyboardEvent>(this.#document, \"keyup\", { capture: true, passive: false })\n ).pipe(\n filter(event => event.defaultPrevented === false),\n share()\n )\n )\n\n readonly #focusEvent = this.#zone.runOutsideAngular(() =>\n fromEvent(this.#document, \"focus\", { capture: true, passive: true }).pipe(\n startWith(null),\n map(() => this.#document.activeElement),\n shareReplay(1)\n )\n )\n\n watch(activation: KeystrokeActivation, ...keystrokes: Keystroke[]): Observable<KeystrokeEvent> {\n return new Observable((dst: Subscriber<KeystrokeEvent>) =>\n this.#trigger(activation)\n .pipe(\n distinctUntilChanged(),\n switchMap(enabled => {\n if (enabled) {\n return this.#keyEvent\n } else {\n return EMPTY\n }\n }),\n map(event => {\n if (event.defaultPrevented) {\n return []\n }\n\n const idFromEvent = keystrokeId(eventToKeystroke(event))\n const matches = keystrokes\n .filter(ks => keystrokeId(ks) === idFromEvent)\n .map(ks => {\n return {\n original: event,\n keystroke: ks\n }\n })\n\n if (matches.length > 0) {\n event.preventDefault()\n }\n\n return matches\n }),\n filter(matches => matches.length > 0),\n switchMap(matches => of(...matches))\n )\n .subscribe(dst)\n )\n }\n\n #trigger(activation: KeystrokeActivation): Observable<boolean | HTMLElement> {\n if (isElementInput(activation)) {\n return this.#focusActivation(coerceElement(activation))\n } else if (activation instanceof FocusState) {\n return activation.event$.pipe(map(({ origin }) => origin != null))\n } else {\n return from(activation).pipe(\n switchMap(value => {\n if (isElementInput(value) || value instanceof FocusState) {\n return this.#trigger(value)\n } else {\n return of(value)\n }\n })\n )\n }\n }\n\n #focusActivation(element: HTMLElement): Observable<boolean> {\n return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)))\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","import { Position } from \"@ngutil/style\"\n\nexport interface GestureDetail {\n readonly origin: GestureOrigin\n readonly target: HTMLElement\n readonly pointerType: GesturePointerType\n readonly phase: GesturePhase\n readonly pointers: ReadonlyArray<GesturePointer>\n readonly timeStamp: number\n readonly elapsed: number\n readonly scrollDistance?: Position\n}\n\nexport type PointersPosition = ReadonlyArray<Readonly<Position>>\n\nexport interface GesturePointer {\n readonly start: Position\n readonly current: Position\n readonly end?: Position\n readonly distance: Position\n readonly direction: { x: -1 | 0 | 1; y: -1 | 0 | 1 }\n}\n\nexport type GestureOrigin = MouseEvent | TouchEvent\n\nexport const enum GesturePointerType {\n Mouse = \"mouse\",\n Touch = \"touch\"\n}\n\nexport const enum GesturePhase {\n Start = \"start\",\n Moving = \"moving\",\n End = \"end\"\n}\n\nexport interface GestureListenerConfig {\n options?: AddEventListenerOptions\n pointerType: GesturePointerType\n phase: GesturePhase\n}\n\nexport const Listeners: { [key: string]: GestureListenerConfig } = {\n mousedown: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n mousemove: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n mouseup: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchstart: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n touchmove: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n touchend: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchcancel: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n }\n // ,\n // contextmenu: {\n // pointerType: GesturePointerType.Mouse,\n // phase: GesturePhase.Start,\n // options: { capture: true, passive: false }\n // }\n} as const\n","import { Observable } from \"rxjs\"\n\nimport { FunctionKeys, Mutable } from \"utility-types\"\n\nimport { GestureDetail, GesturePointerType, Listeners } from \"./gesture-event\"\n\nexport const enum GestureCaptureState {\n // Unchecked\n Unchecked = 0,\n // Pending state\n Pending = 1,\n // Skip capture\n Skip = 2,\n // Determine by priority\n Maybe = 3,\n // Instanlty terminate capture, and fire event\n Instant = 4\n}\n\ntype _GestureOptions = Partial<Omit<Gesture<any>, \"originTypes\" | \"type\" | FunctionKeys<Gesture<any>>>>\nexport type GestureOptions<T extends object> = Partial<Omit<T, keyof Gesture<any> | FunctionKeys<T>>> & _GestureOptions\n\nexport type GestureEvent<G extends Gesture> = G extends Gesture<infer E> & { type: infer T }\n ? CustomEvent<E> & { type: T }\n : never\n\nexport abstract class Gesture<T extends GestureDetail = GestureDetail> {\n /**\n * The name of the gesture\n */\n abstract readonly type: string\n\n /**\n * Gestures that depends on move distance, like drag, use this option\n */\n readonly distanceInclusion: number = 10\n\n /**\n * Gestures thet dependnso on time frame, like longtap, use this option\n */\n readonly timeWithin: number = 300\n\n /**\n * The priority of the gesture\n */\n readonly priority: number = 0\n\n /**\n * Should the gesture include the scroll distance\n */\n readonly includeScrollDistance: boolean = false\n\n /**\n * The pointer types of the gesture\n */\n readonly pointerTypes: Array<GesturePointerType> = [GesturePointerType.Mouse, GesturePointerType.Touch]\n\n /**\n * The number of pointers of the gesture can handle\n */\n readonly pointerCount: number = 1\n\n /**\n * The mouse buttons of the gesture (1 = left, 2 = middle, 3 = right)\n */\n readonly mouseButtons: Array<number> = [0]\n\n /**\n * The event types of the gesture can handle\n */\n readonly originTypes: Array<string>\n\n constructor(options?: _GestureOptions) {\n Object.assign(this, options)\n this.originTypes = Object.keys(Listeners).filter(v => this.pointerTypes.includes(Listeners[v].pointerType))\n }\n\n /**\n * Test if the gesture should be captured.\n * The given events is filterde by {@see Gesture#shouldCapture}\n * ! important, dont rely on this object state, because not always create a new object\n * @param events events to check\n */\n abstract capture(events: Observable<GestureDetail>): Observable<GestureCaptureState>\n\n /**\n * Transform input event, to gesture event.\n * The given events is filterde by {@see Gesture#isRelevantEvent}\n * ! important, dont rely on this object state, because not always create a new object\n * @param events events to transform or filter or leave as is\n */\n handle(events: Observable<GestureDetail>): Observable<Mutable<T>> {\n return events as Observable<Mutable<T>>\n }\n\n /**\n * Should this gesture capture the event?\n * @param event event to check\n * @returns true if the gesture should capture the event, false otherwise\n */\n shouldCapture(event: GestureDetail): boolean {\n return this.isRelevantEvent(event)\n }\n\n /**\n * Test if the event is relevant to the gesture.\n * The event is relevant if\n * @param event event to check\n * @returns true if the event is relevant, false otherwise\n */\n isRelevantEvent(event: GestureDetail): boolean {\n return (\n this.pointerTypes.includes(event.pointerType) &&\n this.pointerCount === event.pointers.length &&\n this.originTypes.includes(event.origin.type as any) &&\n (event.pointerType !== GesturePointerType.Mouse ||\n (event.origin instanceof MouseEvent && this.mouseButtons.includes(event.origin.button)))\n )\n }\n}\n","import { map, Observable, tap } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { Position } from \"@ngutil/style\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail } from \"./gesture-event\"\n\nexport interface GestureDragDetail extends GestureDetail {\n moveBy: Position\n}\n\nexport type GestureDragOptions = GestureOptions<GestureDragImpl>\n\nexport class GestureDragImpl<T extends GestureDragDetail = GestureDragDetail> extends Gesture<T> {\n readonly type = \"gesture-drag\"\n readonly horizontal?: boolean\n readonly vertical?: boolean\n\n constructor(options?: GestureDragOptions) {\n super({ includeScrollDistance: true, ...options })\n\n if (this.horizontal == null && this.vertical == null) {\n this.horizontal = true\n this.vertical = true\n }\n }\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return events.pipe(\n map(state => {\n if (Math.abs(state.pointers[0].distance.x) > this.distanceInclusion) {\n return this.horizontal ? GestureCaptureState.Maybe : GestureCaptureState.Skip\n }\n\n if (Math.abs(state.pointers[0].distance.y) > this.distanceInclusion) {\n return this.vertical ? GestureCaptureState.Maybe : GestureCaptureState.Skip\n }\n return GestureCaptureState.Pending\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n const updater =\n this.horizontal && this.vertical\n ? updateAnyDirection\n : this.horizontal\n ? updateHorizontalOnly\n : updateVerticalOnly\n\n return super.handle(events).pipe(tap(updater<T>))\n }\n}\n\ntype UpdaterFn = (event: Mutable<GestureDragDetail>) => void\n\nfunction updateVerticalOnly<T extends GestureDragDetail>(event: Mutable<T>) {\n const pointer = event.pointers[0]\n pointer.distance.x = 0\n pointer.direction.x = 0\n pointer.current.x = pointer.start.x\n updateEvent(event, updateByScrollDistanceVertical)\n}\n\nfunction updateHorizontalOnly<T extends GestureDragDetail>(event: Mutable<T>) {\n const pointer = event.pointers[0]\n pointer.distance.y = 0\n pointer.direction.y = 0\n pointer.current.y = pointer.start.y\n updateEvent(event, updateByScrollDistanceHorizontal)\n}\n\nfunction updateAnyDirection<T extends GestureDragDetail>(event: Mutable<T>) {\n updateEvent(event, updateByScrollDistanceBoth)\n}\n\nfunction updateEvent<T extends GestureDragDetail>(event: Mutable<T>, scrollUpdate: UpdaterFn) {\n event.moveBy = { ...event.pointers[0].distance }\n scrollUpdate(event)\n}\n\nfunction updateByScrollDistanceVertical<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.y += sd.y\n}\n\nfunction updateByScrollDistanceHorizontal<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.x += sd.x\n}\n\nfunction updateByScrollDistanceBoth<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.x += sd.x\n event.moveBy.y += sd.y\n}\n\nexport function gestureDrag(options?: GestureDragOptions) {\n return new GestureDragImpl(options)\n}\n\nexport const GestureDrag = gestureDrag()\nexport const GestureDragHorizontal = gestureDrag({ horizontal: true, vertical: false })\nexport const GestureDragVertical = gestureDrag({ horizontal: false, vertical: true })\n","import { combineLatest, filter, map, Observable, startWith, timer } from \"rxjs\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail, GesturePhase, GesturePointerType } from \"./gesture-event\"\n\nexport type GestureLongTapDetail = GestureDetail\nexport type GestureLongTapOptions = GestureOptions<GestureLongTapImpl>\n\nexport class GestureLongTapImpl<T extends GestureLongTapDetail = GestureLongTapDetail> extends Gesture<T> {\n readonly type = \"gesture-longtap\"\n constructor(options?: GestureLongTapOptions) {\n super({ pointerTypes: [GesturePointerType.Touch], ...options })\n }\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return combineLatest({ timeWithin: timer(this.timeWithin).pipe(startWith(null)), event: events }).pipe(\n map(({ timeWithin, event }) => {\n if (event.elapsed > this.timeWithin) {\n return GestureCaptureState.Skip\n }\n\n if (event.phase === GesturePhase.End && event.elapsed > this.timeWithin) {\n return GestureCaptureState.Skip\n }\n\n const distance = event.pointers[0].distance\n\n if (Math.abs(distance.x) < this.distanceInclusion && Math.abs(distance.y) < this.distanceInclusion) {\n // maybe is ok event.phase === GesturePhase.End\n return timeWithin !== null ? GestureCaptureState.Instant : GestureCaptureState.Pending\n } else {\n return GestureCaptureState.Skip\n }\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n return super.handle(\n events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End))\n )\n }\n}\n\nexport function gestureLongTap(options?: GestureLongTapOptions) {\n return new GestureLongTapImpl(options)\n}\n\nexport const GestureLongTap = gestureLongTap()\n","import { filter, map, Observable } from \"rxjs\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail, GesturePhase } from \"./gesture-event\"\n\nexport type GestureTapDetail = GestureDetail\nexport type GestureTapOptions = GestureOptions<GestureTapImpl>\n\nexport class GestureTapImpl<T extends GestureTapDetail = GestureTapDetail> extends Gesture<T> {\n readonly type = \"gesture-tap\"\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return events.pipe(\n map(event => {\n const distance = event.pointers[0].distance\n if (Math.abs(distance.x) < this.distanceInclusion && Math.abs(distance.y) < this.distanceInclusion) {\n // TODO\n // if (event.phase === GesturePhase.End) {\n // if (event.target === event.origin.target || event.target.contains(event.origin.target)) {\n // return GestureCaptureState.Instant\n // } else {\n // return GestureCaptureState.Skip\n // }\n // } else {\n // return GestureCaptureState.Pending\n // }\n return event.phase === GesturePhase.End ? GestureCaptureState.Instant : GestureCaptureState.Pending\n } else {\n return GestureCaptureState.Skip\n }\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n return super.handle(\n events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End))\n )\n }\n}\n\nexport function gestureTap(options?: GestureTapOptions) {\n return new GestureTapImpl(options)\n}\n\nexport const GestureTap = gestureTap()\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n connect,\n debounceTime,\n filter,\n finalize,\n map,\n merge,\n Observable,\n scan,\n share,\n startWith,\n Subject,\n Subscriber,\n switchMap,\n takeWhile,\n tap\n} from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { __zone_symbol__, coerceElement, ElementInput, isFalsy, isTruthy } from \"@ngutil/common\"\nimport { Position } from \"@ngutil/style\"\n\nimport { Gesture, GestureCaptureState, GestureEvent } from \"./gesture\"\nimport {\n GestureDetail,\n GestureListenerConfig,\n GestureOrigin,\n GesturePhase,\n GesturePointerType,\n Listeners\n} from \"./gesture-event\"\n\nconst ADD_EVENT_LISTENER = __zone_symbol__(\"addEventListener\")\nconst REMOVE_EVENT_LISTENER = __zone_symbol__(\"removeEventListener\")\nconst DISPATCH_EVENT = __zone_symbol__(\"dispatchEvent\")\n\ntype GesturesToEventsType<T extends Array<Gesture>> =\n T extends Array<infer G> ? (G extends Gesture ? GestureEvent<G> : never) : never\n\ntype GestureEventDiscriminator<T> = T extends { type: infer N } ? { type: N } & T : never\n\nexport type GestureWatchReturns<T extends Array<Gesture>> = Observable<\n GestureEventDiscriminator<GesturesToEventsType<T>>\n>\n\nexport type GestureListenReturns<T extends Array<Gesture>> = Observable<GesturesToEventsType<T>>\n\ninterface BeginState {\n detail: GestureDetail\n gestures: Map<Gesture, GestureCaptureState>\n includeScrollDistance: boolean\n}\n\ninterface CaptureState {\n events: GestureDetail[]\n gestures: BeginState[\"gestures\"]\n includeScrollDistance: BeginState[\"includeScrollDistance\"]\n}\n\ninterface CaptureSelectState {\n events: GestureDetail[]\n gesture?: Gesture\n watchers?: Array<Watcher>\n}\n\ninterface Watcher {\n readonly el: HTMLElement\n readonly gesture: Gesture\n}\n\nconst SCROLL_LISTENER_OPTIONS: AddEventListenerOptions = { passive: true, capture: true }\n\n@Injectable({ providedIn: \"root\" })\nexport class GestureService {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n\n #watchers: Watcher[] = []\n readonly #trigger = new Subject<GestureDetail>()\n\n readonly #moving: Observable<GestureDetail> = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.Moving)\n .map(name => this.#listen(name, Listeners[name]))\n ).pipe(share())\n\n readonly #end: Observable<GestureDetail> = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.End)\n .map(name => this.#listen(name, Listeners[name]))\n ).pipe(share())\n\n readonly #eventStream = merge(this.#moving, this.#end).pipe(share())\n\n readonly #begin = new Observable((dst: Subscriber<BeginState>) => {\n let pointerType: GesturePointerType | undefined\n\n return this.#trigger\n .pipe(\n filter(event => {\n if (pointerType == null) {\n pointerType = event.pointerType\n }\n\n return event.pointerType === pointerType\n }),\n connect(events =>\n merge(\n events,\n // reset pointerType on end, after 200ms, because touchend is maybe followed by a mouse event\n this.#end.pipe(\n debounceTime(200),\n tap(() => {\n pointerType = undefined\n this.#enableTouchAction()\n }),\n filter(() => false)\n )\n )\n ),\n // Select active watchers\n map((detail: Mutable<GestureDetail>) => {\n updatePointers(detail)\n const eventTarget = detail.origin.target as HTMLElement\n detail.target = eventTarget\n let includeScrollDistance = false\n const gestures = this.#watchers\n .filter(\n ({ gesture, el }) =>\n (el === eventTarget || (\"contains\" in el && el.contains(eventTarget))) &&\n gesture.shouldCapture(detail)\n )\n .reduce(\n (gestures, { gesture }) => {\n if (!gestures.has(gesture)) {\n includeScrollDistance = includeScrollDistance || gesture.includeScrollDistance\n gestures.set(gesture, GestureCaptureState.Unchecked)\n }\n return gestures\n },\n new Map() as BeginState[\"gestures\"]\n )\n\n return { detail: detail, gestures, includeScrollDistance } satisfies BeginState\n }),\n filter(({ gestures }) => gestures.size > 0),\n tap(this.#disableTouchAction)\n // finalize(() => console.log(\"FINALIZE BEGIN\"))\n )\n .subscribe(dst)\n })\n\n readonly #gesture = this.#begin.pipe(\n switchMap(({ detail: startEvent, gestures, includeScrollDistance }) => {\n const pointerType = startEvent.pointerType\n const startAt = startEvent.origin.timeStamp\n const targetEl = startEvent.origin.target as HTMLElement\n const dispatchEvent = targetEl[DISPATCH_EVENT].bind(targetEl)\n\n const eventStreamInit = this.#eventStream.pipe(\n startWith(startEvent),\n filter(event => event.pointerType === pointerType)\n )\n\n const eventStreamSource = !includeScrollDistance\n ? eventStreamInit\n : combineLatest([eventStreamInit, this.#scrollDistance(targetEl)]).pipe(\n map(([src, distance]) => {\n ;(src as Mutable<GestureDetail>).scrollDistance = distance\n return src\n })\n )\n\n const eventStream = eventStreamSource.pipe(\n scan(\n (state, curr) =>\n updatePointers({\n ...state,\n ...curr,\n target: targetEl,\n elapsed: curr.origin.timeStamp - startAt!\n }),\n startEvent\n ),\n takeWhile(event => event.phase !== GesturePhase.End, true),\n // finalize(() => console.log(\"FINALIZE STREAM\")),\n share()\n )\n\n const captureState = eventStream.pipe(\n connect(src => {\n const state: CaptureState = { events: [], gestures, includeScrollDistance }\n return merge(\n src.pipe(tap(event => state.events.push(event))),\n ...Array.from(gestures.keys())\n .sort(sortByPripority)\n .map(gesture =>\n gesture.capture(src.pipe(filter(gesture.shouldCapture.bind(gesture)))).pipe(\n takeWhile(result => result !== GestureCaptureState.Skip, true),\n tap(result => gestures.set(gesture, result))\n )\n )\n ).pipe(map(() => state))\n })\n // finalize(() => console.log(\"FINALIZE CAPTURE\"))\n )\n\n const selectGesture = captureState.pipe(\n map(state => {\n const partitions: { [k in GestureCaptureState]?: Gesture[] } = {}\n\n for (const [gesture, captureState] of state.gestures) {\n const partition = (partitions[captureState] ??= [])\n partition.push(gesture)\n }\n\n if (partitions[GestureCaptureState.Instant] != null) {\n return {\n gesture: partitions[GestureCaptureState.Instant].sort(sortByPripority)[0],\n events: state.events\n } as CaptureSelectState\n }\n\n // while not all gestures return from Gesture.capture\n if (partitions[GestureCaptureState.Unchecked] != null) {\n return null\n }\n\n // while has pending, the capture is continued\n if (partitions[GestureCaptureState.Pending] != null) {\n return null\n }\n\n // no pendig & has maybe\n if (partitions[GestureCaptureState.Maybe] != null) {\n return {\n gesture: partitions[GestureCaptureState.Maybe].sort(sortByPripority)[0],\n events: state.events\n } as CaptureSelectState\n }\n\n // no pending & no maybe & no terminate\n // so, nothign matched\n return { events: state.events } as CaptureSelectState\n }),\n takeWhile(isFalsy, true),\n filter(isTruthy),\n takeWhile(v => v!.gesture != null, false)\n // tap((v: CaptureSelectState) => v.events.forEach(({ origin }) => preventDefault(origin)))\n // finalize(() => console.log(\"FINALIZE SELECT\"))\n ) as Observable<Required<CaptureSelectState>>\n\n return selectGesture.pipe(\n switchMap(({ events, gesture }) =>\n gesture\n .handle(\n eventStream.pipe(\n startWith(...events),\n tap(({ origin }) => preventDefault(origin)),\n filter(gesture.isRelevantEvent.bind(gesture))\n )\n )\n .pipe(\n takeWhile(v => v.phase !== GesturePhase.End, true),\n tap(detail =>\n dispatchEvent(\n new CustomEvent(gesture.type, { detail, bubbles: true, cancelable: true })\n )\n )\n // finalize(() => console.log(\"GESTURE FINALIZE\"))\n )\n ),\n // finalize(() => console.log(\"FINALIZE RESULT\")),\n finalize(this.#enableTouchAction)\n )\n }),\n share()\n )\n\n constructor() {\n const triggers = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.Start)\n .map(name => this.#listen(name, Listeners[name]))\n )\n triggers.pipe(takeUntilDestroyed()).subscribe(this.#trigger)\n }\n\n listen<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureListenReturns<T> {\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const element = coerceElement(el)\n const next = dst.next.bind(dst)\n for (const gesture of gestures) {\n element[ADD_EVENT_LISTENER](gesture.type as any, next)\n dst.add(element[REMOVE_EVENT_LISTENER].bind(element, gesture.type as any, next as any))\n }\n dst.add(this.#watch(element, ...gestures).subscribe())\n })\n ) as any\n }\n\n #watch<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureWatchReturns<T> {\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const element = coerceElement(el)\n const watchers = gestures.map(gesture => {\n return { gesture, el: element }\n })\n this.#add(watchers)\n dst.add(this.#gesture.subscribe(dst))\n return () => {\n this.#remove(watchers)\n }\n })\n ) as any\n }\n\n #add(watchers: Watcher[]) {\n this.#watchers = this.#watchers.concat(watchers)\n }\n\n #remove(watchers: Watcher[]) {\n this.#watchers = this.#watchers.filter(v => !watchers.includes(v))\n }\n\n #listen(name: string, config: GestureListenerConfig) {\n const { phase, pointerType, options } = config\n\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const listener = (origin: GestureOrigin) => {\n if (origin.defaultPrevented) {\n return\n }\n dst.next({ origin, phase, pointerType } as GestureDetail)\n }\n\n // console.log(\"addEventListener\", name)\n this.#document[ADD_EVENT_LISTENER](name as keyof DocumentEventMap, listener as any, options)\n return () => {\n // console.log(\"removeEventListener\", name)\n this.#document[REMOVE_EVENT_LISTENER](name as keyof DocumentEventMap, listener as any, options)\n }\n })\n )\n }\n\n #scrollDistance(element: Element): Observable<Position> {\n const scrollPosition = () => {\n let x = 0\n let y = 0\n let p = element\n do {\n x += p.scrollLeft ?? 0\n y += p.scrollTop ?? 0\n p = p.parentNode as Element\n } while (p != null)\n return { x, y }\n }\n\n return new Observable((dst: Subscriber<Position>) =>\n this.#zone.runOutsideAngular(() => {\n const initial = scrollPosition()\n const listener = () => {\n const current = scrollPosition()\n dst.next({ x: current.x - initial.x, y: current.y - initial.y })\n }\n dst.next({ x: 0, y: 0 })\n this.#document[ADD_EVENT_LISTENER](\"scroll\", listener, SCROLL_LISTENER_OPTIONS)\n return () => {\n this.#document[REMOVE_EVENT_LISTENER](\"scroll\", listener, SCROLL_LISTENER_OPTIONS)\n }\n })\n )\n }\n\n #lastTouchAction?: string\n #disableTouchAction = (): void => {\n if (this.#lastTouchAction == null) {\n this.#lastTouchAction = window.getComputedStyle(this.#document.body).touchAction\n this.#document.body.style.touchAction = \"none\"\n }\n }\n\n #enableTouchAction = (): void => {\n if (this.#lastTouchAction != null) {\n this.#document.body.style.touchAction = this.#lastTouchAction\n this.#lastTouchAction = undefined\n }\n }\n}\n\nfunction sortByPripority(a: Gesture, b: Gesture) {\n return b.priority - a.priority\n}\n\nfunction pointersFromEvent(event: MouseEvent | TouchEvent): Position[] {\n if (event instanceof MouseEvent) {\n return [\n {\n x: event.clientX,\n y: event.clientY\n }\n ]\n } else {\n return Array.from(event.touches).map(t => {\n return { x: t.clientX, y: t.clientY }\n })\n }\n}\n\nfunction updatePointers(state: Mutable<GestureDetail>): GestureDetail {\n if (state.phase === GesturePhase.Start) {\n state.pointers = pointersFromEvent(state.origin).map(v => {\n return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } }\n })\n } else if (state.pointers) {\n const pointers = pointersFromEvent(state.origin)\n if (pointers.length === 0) {\n return state\n }\n\n state.pointers = state.pointers.map((v, i) => {\n const p = pointers[i]\n return {\n start: v.start,\n current: p,\n distance: { x: p.x - v.start.x, y: p.y - v.start.y },\n direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }\n }\n })\n }\n\n return state\n}\n\nfunction direction(prev: number, curr: number): -1 | 0 | 1 {\n return curr > prev ? 1 : curr < prev ? -1 : 0\n}\n\nfunction preventDefault(event: Event) {\n if (event.cancelable && !event.defaultPrevented) {\n // console.log(`PREVENT ${event.type}`)\n event.preventDefault()\n }\n}\n","import type { UiStateDetails } from \"./ui-state\"\n\nexport type CompiledSelector = (state: UiStateDetails) => boolean\n\nexport const enum TokenType {\n Any = 1,\n Name = 2,\n Negate = 3,\n Or = 4,\n And = 5,\n Subscript = 7,\n MultiSubscript = 8\n}\n\nexport interface AstBase {\n begin: number\n end: number\n}\n\nexport interface AstAny extends AstBase {\n type: TokenType.Any\n}\n\nexport interface AstName extends AstBase {\n type: TokenType.Name\n value: string\n}\n\nexport interface AstNegate extends AstBase {\n type: TokenType.Negate\n value: SelectorAst\n}\n\nexport interface AstOr extends AstBase {\n type: TokenType.Or\n left: SelectorAst\n right: SelectorAst\n}\n\nexport interface AstAnd extends AstBase {\n type: TokenType.And\n left: SelectorAst\n right: SelectorAst\n}\n\nexport interface AstSubscript extends AstBase {\n type: TokenType.Subscript\n base: AstName\n subscript: AstAny | AstName\n}\n\nexport interface AstMultiSubscript extends AstBase {\n type: TokenType.MultiSubscript\n base: AstName\n subscripts: AstName[]\n}\n\nexport type SelectorAst = AstAny | AstName | AstNegate | AstOr | AstAnd | AstSubscript | AstMultiSubscript\n\nconst COMPILE_CACHE: { [key: string]: CompiledSelector } = {}\nexport function compile(selector: string): CompiledSelector {\n return (COMPILE_CACHE[selector] ??= _compile(parse(selector)))\n}\n\nclass Cursor {\n position: number = 0\n\n get ch() {\n return this.data[this.position]\n }\n\n constructor(readonly data: string) {}\n\n inc(value: number = 1) {\n this.position += value\n return this\n }\n\n eatWs() {\n let end = this.position\n while (end < this.data.length && /[ \\r\\n\\t]/.test(this.data[end])) {\n end++\n }\n this.position = end\n return this\n }\n\n is(ch: string) {\n if (ch.length === 1) {\n return this.ch === ch\n }\n const begin = this.position\n const end = begin + ch.length\n return this.data.substring(begin, end) === ch\n }\n\n eof() {\n return this.position >= this.data.length\n }\n\n set(position: number) {\n this.position = position\n return this\n }\n}\n\n/**\n * expression:\n * - \"*\": any\n * - \"name without dot\": top level: eg. \"busy\" or \"disabled\", this is equal to \"busy.*\"\n * - \"name with dot\": nested: eg. \"busy.self\" or \"busy.loading\"\n * - negate: \"!busy\", \"!busy.*\", \"!busy.save\"\n * - OR: \"busy.* || !disabled.*\"\n * - AND: \"busy.* && !disabled.*\"\n * - GROUP: \"(busy || disabled) && !readonly\"\n * - Shorted of multiple source of same base: \"busy{load,save}\", if one of load or save is true, the result is true\n */\nexport function parse(selector: string): SelectorAst {\n const cursor = new Cursor(selector)\n const res = expression(cursor.eatWs())\n if (res == null) {\n throw new Error(`invalid selector: ${selector}`)\n }\n\n if (!cursor.eof()) {\n throw new Error(`unexpected charcter: ${selector[res.end]} at ${res.end}`)\n }\n return res\n}\n\nfunction expression(cursor: Cursor) {\n return binary(cursor) || leftExpr(cursor)\n}\n\nfunction leftExpr(cursor: Cursor) {\n const begin = cursor.position\n const left = unary(cursor) || group(cursor) || load(cursor)\n if (left != null) {\n return left\n }\n cursor.set(begin)\n return null\n}\n\nfunction group(cursor: Cursor): SelectorAst | null {\n const begin = cursor.position\n if (cursor.is(\"(\")) {\n const expr = expression(cursor.inc().eatWs())\n if (cursor.eatWs().is(\")\")) {\n cursor.inc()\n return binary(cursor.eatWs(), expr) || expr\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction binary(cursor: Cursor, left: SelectorAst | null = null): SelectorAst | null {\n const begin = cursor.position\n left = left ?? leftExpr(cursor)\n if (left != null) {\n cursor.eatWs()\n const result = and(left, cursor) || or(left, cursor)\n if (result != null) {\n return result\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction and(left: SelectorAst, cursor: Cursor): AstAnd | null {\n if (cursor.is(\"&&\")) {\n cursor.inc(2)\n const right = expression(cursor.eatWs())\n if (right == null) {\n return null\n }\n return { type: TokenType.And, left, right, begin: left.begin, end: cursor.position }\n }\n return null\n}\n\nfunction or(left: SelectorAst, cursor: Cursor): AstOr | null {\n if (cursor.is(\"||\")) {\n cursor.inc(2)\n const right = expression(cursor.eatWs())\n if (right == null) {\n return null\n }\n return { type: TokenType.Or, left, right, begin: left.begin, end: cursor.position }\n }\n return null\n}\n\nfunction unary(cursor: Cursor): SelectorAst | null {\n const begin = cursor.position\n if (cursor.is(\"!\")) {\n const expr = leftExpr(cursor.inc().eatWs())\n if (expr != null) {\n return { type: TokenType.Negate, value: expr, begin, end: cursor.position }\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction load(cursor: Cursor): AstAny | AstName | AstSubscript | AstMultiSubscript | null {\n cursor.eatWs()\n const _any = any(cursor)\n if (_any != null) {\n return _any\n }\n\n const base = name(cursor)\n if (base == null) {\n return null\n }\n\n cursor.eatWs()\n const sub = loadSingle(cursor) || loadMulti(cursor)\n if (sub == null) {\n return base\n } else if (Array.isArray(sub)) {\n return {\n type: TokenType.MultiSubscript,\n base,\n subscripts: sub,\n begin: base.begin,\n end: sub[sub.length - 1].end\n }\n } else {\n return { type: TokenType.Subscript, base, subscript: sub, begin: base.begin, end: sub.end }\n }\n}\n\nfunction loadSingle(cursor: Cursor): AstAny | AstName | null {\n const begin = cursor.position\n if (cursor.is(\".\")) {\n cursor.inc().eatWs()\n const prop = any(cursor) || name(cursor)\n if (prop != null) {\n return prop\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction loadMulti(cursor: Cursor): AstName[] | null {\n const begin = cursor.position\n if (cursor.is(\"{\")) {\n const names = [] as AstName[]\n let entry: AstName | null = null\n\n cursor.inc().eatWs()\n while ((entry = name(cursor))) {\n names.push(entry)\n cursor.eatWs()\n\n if (cursor.is(\",\")) {\n cursor.inc()\n }\n\n cursor.eatWs()\n if (cursor.is(\"}\")) {\n if (names.length === 0) {\n throw new Error(\"expected name\")\n }\n cursor.inc()\n return names\n }\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction name(cursor: Cursor): AstName | null {\n const begin = cursor.position\n while (!cursor.eof() && isNameCh(cursor.ch)) {\n cursor.inc()\n }\n if (cursor.position > begin) {\n return { type: TokenType.Name, begin, end: cursor.position, value: cursor.data.slice(begin, cursor.position) }\n }\n cursor.set(begin)\n return null\n}\n\nfunction isNameCh(ch: string): boolean {\n return /[^.,{}()!\\s&|]/.test(ch)\n}\n\nfunction any(cursor: Cursor): AstAny | null {\n if (cursor.is(\"*\")) {\n const begin = cursor.position\n cursor.inc()\n return { type: TokenType.Any, begin, end: cursor.position }\n }\n return null\n}\n\nfunction _compile(ast: SelectorAst, parent?: string): CompiledSelector {\n switch (ast.type) {\n case TokenType.Any:\n return compileAny(ast, parent)\n case TokenType.Subscript:\n return compileSubscript(ast, parent)\n case TokenType.MultiSubscript:\n return compileMultiSubscript(ast, parent)\n case TokenType.Name:\n return compileName(ast, parent)\n case TokenType.Negate:\n return compileNot(_compile(ast.value, parent))\n case TokenType.Or:\n return compileOr(_compile(ast.left, parent), _compile(ast.right, parent))\n case TokenType.And:\n return compileAnd(_compile(ast.left, parent), _compile(ast.right, parent))\n }\n return () => false\n}\n\nfunction compileAny(ast: AstAny, parent?: string): CompiledSelector {\n if (parent) {\n return v => {\n if (v[parent] == null) {\n return false\n }\n return Object.values(v[parent]).some(v => v === true)\n }\n } else {\n return v => {\n for (const entry of Object.values(v)) {\n if (Object.values(entry).some(v => v === true)) {\n return true\n }\n }\n return false\n }\n }\n}\n\nfunction compileSubscript(ast: AstSubscript, parent?: string): CompiledSelector {\n parent ??= ast.base.value\n\n if (ast.subscript.type === TokenType.Any) {\n return compileAny(ast.subscript, parent)\n }\n if (ast.subscript.type === TokenType.Name) {\n return compileName(ast.subscript, parent)\n }\n\n return () => false\n}\n\nfunction compileMultiSubscript(ast: AstMultiSubscript, parent?: string): CompiledSelector {\n parent ??= ast.base.value\n const values = ast.subscripts.map(v =>\n compileSubscript(\n { type: TokenType.Subscript, base: ast.base, subscript: v, begin: v.begin, end: v.end },\n parent\n )\n )\n\n if (values.length === 1) {\n return values[0]\n } else {\n let result = values[0]\n for (let i = 1; i < values.length; i++) {\n result = compileOr(result, values[i])\n }\n return result\n }\n}\n\nfunction compileName(ast: AstName, parent?: string): CompiledSelector {\n if (parent) {\n return v => {\n if (v[parent] == null) {\n return false\n }\n return !!v[parent][ast.value]\n }\n } else {\n return v => {\n const many = v[ast.value]\n return many != null && Object.values(many).some(v => v === true)\n }\n }\n}\n\nfunction compileNot(compiled: CompiledSelector): CompiledSelector {\n return v => !compiled(v)\n}\n\nfunction compileOr(left: CompiledSelector, right: CompiledSelector): CompiledSelector {\n return v => left(v) || right(v)\n}\n\nfunction compileAnd(left: CompiledSelector, right: CompiledSelector): CompiledSelector {\n return v => left(v) && right(v)\n}\n","import { computed, Directive, inject, signal, untracked } from \"@angular/core\"\n\nimport { Observable } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { deepClone } from \"@ngutil/common\"\n\nimport { compile as compileSelector } from \"./selector\"\n\n/**\n * {\n * busy: {\n * self: true,\n * parent: false,\n * disabled: false\n * }\n * }\n */\nexport type UiStateDetails = { readonly [key: string]: UiStateEntry }\n\nexport type UiStateEntry = { readonly [key: UiStateSource]: boolean }\n\nexport type UiStateValue = { readonly [key: string]: boolean }\n\nexport type UiStateSource = \"parent\" | \"self\" | string\n\nexport type UiStateSelector = string\n\n@Directive({})\nexport class UiState<N extends string = string, S extends UiStateSource = UiStateSource> {\n readonly #parent = inject(UiState, { skipSelf: true, optional: true })\n\n get root(): UiState {\n return this.#parent?.root || this\n }\n\n readonly #self = signal<UiStateDetails>({})\n\n readonly merged = computed<UiStateDetails>(() => {\n const parent = this.#parent?.merged()\n const self = this.#self()\n if (parent) {\n const result: Mutable<UiStateDetails> = deepClone(self)\n\n for (const [k, v] of Object.entries(parent)) {\n const parentIsTrue = Object.values(v).includes(true)\n const { self: _, ...parentWihtoutSelf } = v\n if (result[k] != null) {\n result[k] = {\n ...parentWihtoutSelf,\n ...result[k],\n parent: parentIsTrue\n }\n } else {\n result[k] = { ...parentWihtoutSelf, parent: parentIsTrue }\n }\n }\n\n return result\n } else {\n return self\n }\n })\n\n readonly value = computed<UiStateValue>(() => {\n const merged = this.merged()\n const result: Mutable<UiStateValue> = {}\n\n for (const [k, v] of Object.entries(merged)) {\n result[k] = Object.values(v).includes(true)\n }\n\n return result\n })\n\n readonly inertSelector = signal(\"busy || disabled\")\n\n set(name: N, value: boolean, source: S = \"self\" as S) {\n if (source === \"parent\") {\n console.error(\"can't set parent state\")\n return\n }\n\n const current = untracked(this.#self)\n const entry = current[name] || {}\n\n if (entry[source] !== value) {\n this.#self.set({ ...current, [name]: { ...entry, [source]: value } })\n }\n\n // TODO: maybe some option to propagate to root\n // const root = this.root\n // if (source !== \"self\" && root !== this) {\n // root.set(name, value, source)\n // }\n }\n\n is(selector: UiStateSelector = \"*\"): boolean {\n return compileSelector(selector)(this.merged())\n }\n\n intercept(name: N, source: S) {\n return <S>(src: Observable<S>) => this.wrap(src, name, source)\n }\n\n wrap<T>(observable: Observable<T>, name: N, source: S): Observable<T> {\n return new Observable<T>(subscriber => {\n this.set(name, true, source)\n subscriber.add(() => this.set(name, false, source))\n return observable.subscribe(subscriber)\n })\n }\n\n isInert() {\n return this.is(this.inertSelector())\n }\n}\n","import { computed, Directive, effect, inject, Signal } from \"@angular/core\"\n\nimport { Observable } from \"rxjs\"\n\nimport { coerceBoolAttr } from \"@ngutil/common\"\n\nimport { UiState } from \"./ui-state\"\n\nexport const NOTSET: any = Symbol(\"NOTSET\")\n\n@Directive()\nexport abstract class AbstractUiState<N extends string> {\n readonly state: UiState<N> = inject(UiState)\n\n abstract readonly input: Signal<boolean>\n abstract readonly when: Signal<string>\n\n readonly yes = computed(() => {\n const when = this.when()\n if (when !== NOTSET) {\n // TODO: add prefix if only provide loading, or simething simple selector\n return this.state.is(`${this.name}.self || (${when})`)\n }\n return this.state.is(this.name)\n })\n readonly no = computed(() => !this.yes())\n\n constructor(readonly name: N) {\n effect(\n () => {\n const input = this.input()\n if (input !== NOTSET) {\n this.state.set(name, !!coerceBoolAttr(input))\n }\n },\n { allowSignalWrites: true }\n )\n }\n\n set(value: boolean, source: string) {\n this.state.set(this.name, value, source)\n }\n\n intercept(source: string) {\n return this.state.intercept(this.name, source)\n }\n\n wrap<T>(observable: Observable<T>, source: string): Observable<T> {\n return this.state.wrap(observable, this.name, source)\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuBusy], [nuBusyWhen]\",\n exportAs: \"busy\",\n host: {\n \"[attr.aria-busy]\": \"yes() ? 'true' : 'false'\",\n \"[attr.inert]\": \"state.isInert() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class BusyDirective extends AbstractUiState<\"busy\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuBusy\" })\n readonly when = input(NOTSET as string, { alias: \"nuBusyWhen\" })\n\n constructor() {\n super(\"busy\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuDirty], [nuDirtyWhen]\",\n exportAs: \"dirty\",\n host: {\n \"[attr.dirty]\": \"yes() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class DirtyDirective extends AbstractUiState<\"dirty\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuDirty\" })\n readonly when = input(NOTSET as string, { alias: \"nuDirtyWhen\" })\n\n constructor() {\n super(\"dirty\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuDisabled], [nuDisabledWhen]\",\n exportAs: \"disabled\",\n host: {\n \"[attr.aria-disabled]\": \"yes() ? 'true' : 'false'\",\n \"[attr.disabled]\": \"yes() ? '' : null\",\n \"[attr.inert]\": \"state.isInert() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class DisabledDirective extends AbstractUiState<\"disabled\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuDisabled\" })\n readonly when = input(NOTSET as string, { alias: \"nuDisabledWhen\" })\n\n constructor() {\n super(\"disabled\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuReadonly], [nuReadonlyWhen]\",\n exportAs: \"readonly\",\n host: {\n \"[attr.aria-readonly]\": \"yes() ? 'true' : 'false'\",\n \"[attr.readonly]\": \"yes() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class ReadonlyDirective extends AbstractUiState<\"readonly\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuReadonly\" })\n readonly when = input(NOTSET as string, { alias: \"nuReadonlyWhen\" })\n\n constructor() {\n super(\"readonly\")\n }\n}\n","import { Directive } from \"@angular/core\"\nimport { toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { animationFrames, map, Observable, of, scan, shareReplay, startWith, Subject, switchMap, takeWhile } from \"rxjs\"\n\nimport { clamp } from \"es-toolkit\"\nimport { Mutable } from \"utility-types\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nexport interface ProgressCommon {\n readonly message?: string\n readonly [other: string]: unknown\n}\n\nexport interface ProgressLax {\n readonly type: \"lax\"\n readonly predictedTime: number\n // readonly updateInterval: number\n}\n\nexport interface ProgressFix {\n readonly type: \"fix\"\n readonly percent: number\n}\n\nexport type Progress = (ProgressLax | ProgressFix) & ProgressCommon\n\nexport interface ProgressSegmentInput {\n readonly name: string\n readonly distribution?: number\n readonly progress: DeepReadonly<Progress>\n}\n\nexport interface ProgressSegement extends ProgressSegmentInput {\n ratio: number\n share: number\n done: boolean\n laxBegin?: number\n}\n\nexport type ProgressSegements = { [key: string]: ProgressSegement }\n\nconst SEGMENT_REGISTER: Progress = { type: \"fix\", percent: 0 }\nconst SEGMENT_COMPLETE: Progress = { type: \"fix\", percent: 1 }\n\n@Directive()\nexport class ProgressState {\n readonly #segments: { [key: string]: ProgressSegmentRef } = {}\n\n readonly #input = new Subject<ProgressSegmentInput>()\n\n readonly #state: Observable<ProgressSegements> = this.#input.pipe(\n startWith(null),\n scan((state, input) => {\n if (Object.keys(state).length === 0) {\n state = this.#initialState()\n }\n\n if (input == null) {\n return state\n }\n\n let current = state[input.name] ?? { ratio: 0, share: 0, done: false }\n current = { ...current, ...input }\n\n if (input.progress.type === \"lax\") {\n delete current.laxBegin\n current.done = false\n }\n\n if (input.progress.type === \"fix\" && input.progress.percent < 1) {\n current.done = false\n }\n\n return { ...state, [input.name]: { ...current, ...input } }\n }, {} as ProgressSegements),\n switchMap(state => {\n const slist = Object.values(state) as Array<Mutable<ProgressSegement>>\n const min = slist.reduce((min, current) => Math.min(min, current.distribution || 0), Infinity) || 1\n const totalDistribution = slist.reduce((total, current) => total + (current.distribution || min), 0)\n const hasLax = slist.some(segment => segment.progress.type === \"lax\")\n const trigger = hasLax ? animationFrames() : of({ timestamp: performance.now() })\n\n return trigger.pipe(\n map(({ timestamp }) => {\n for (const segment of slist) {\n if (segment.distribution == null) {\n segment.distribution = min\n }\n segment.ratio = segment.distribution / totalDistribution + 0.0001\n\n let percent: number\n\n if (segment.progress.type === \"lax\") {\n if (segment.laxBegin == null) {\n segment.laxBegin = timestamp\n }\n\n percent = (timestamp - segment.laxBegin) / segment.progress.predictedTime\n if (percent >= 0.8) {\n const final = (timestamp - segment.laxBegin) / (segment.progress.predictedTime * 50)\n percent = 0.8 + Math.log1p(final)\n }\n } else {\n delete segment.laxBegin\n percent = clamp(segment.progress.percent, 0, 1)\n }\n\n segment.share = percent * segment.ratio\n segment.done = percent >= 1\n }\n\n return state\n }),\n takeWhile(state => Object.values(state).some(segment => !segment.done), true)\n )\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly value$: Observable<DeepReadonly<ProgressSegements>> = this.#state\n readonly value = toSignal(this.value$)\n\n readonly percent$: Observable<number> = this.value$.pipe(\n map(value => {\n if (value == null) {\n return 0\n }\n\n return clamp(\n Object.values(value).reduce((a, b) => a + b.share, 0),\n 0,\n 1\n )\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly percent = toSignal(this.percent$)\n\n segment(name: string, distribution: number = 1): ProgressSegmentRef {\n const segment =\n this.#segments[name] ?? (this.#segments[name] = new ProgressSegmentRef(this.#input, name, distribution))\n segment.next(SEGMENT_REGISTER)\n return segment\n }\n\n connect(state: ProgressState, name: string, distribution?: number): Observable<void> {\n return new Observable(() => {\n const segment = this.segment(name, distribution)\n return state.percent$.subscribe(percent => {\n segment.next({ type: \"fix\", percent })\n })\n })\n }\n\n #initialState() {\n return Object.values(this.#segments).reduce((res, segment) => {\n if (segment.value) {\n res[segment.name] = {\n name: segment.name,\n distribution: segment.distribution,\n progress: segment.value,\n ratio: 0,\n share: 0,\n done: false\n }\n }\n return res\n }, {} as ProgressSegements)\n }\n}\n\nexport class ProgressSegmentRef {\n readonly #subject: Subject<ProgressSegmentInput>\n\n set distribution(value: number | undefined) {\n if (this.#distribution !== value) {\n this.#distribution = value\n if (this.#value != null) {\n this.#next(this.#value)\n }\n }\n }\n\n get distribution() {\n return this.#distribution\n }\n #distribution?: number\n\n get value() {\n return this.#value\n }\n #value?: Progress\n\n constructor(\n subject: Subject<ProgressSegmentInput>,\n public readonly name: string,\n distribution?: number\n ) {\n this.#subject = subject\n this.#distribution = distribution\n }\n\n next(progress: Progress) {\n return this.#next(progress)\n }\n\n complete() {\n return this.#next(SEGMENT_COMPLETE)\n }\n\n #next(progress: Progress) {\n this.#value = progress\n this.#subject.next({ name: this.name, distribution: this.distribution, progress })\n return this\n }\n}\n","import { NgModule } from \"@angular/core\"\n\nimport { BusyDirective } from \"./busy.directive\"\nimport { DirtyDirective } from \"./dirty.directive\"\nimport { DisabledDirective } from \"./disabled.directive\"\nimport { ReadonlyDirective } from \"./readonly.directive\"\n\nexport * from \"./abstract\"\nexport * from \"./busy.directive\"\nexport * from \"./disabled.directive\"\nexport * from \"./progress-state\"\nexport * from \"./readonly.directive\"\nexport * from \"./dirty.directive\"\nexport * from \"./ui-state\"\n\nconst entries = [BusyDirective, DirtyDirective, DisabledDirective, ReadonlyDirective]\n\n@NgModule({\n imports: entries,\n exports: entries\n})\nexport class UiStateModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","_a","i1.FocusState","compileSelector"],"mappings":"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"}
1
+ {"version":3,"file":"ngutil-aria.mjs","sources":["../../../../packages/aria/src/activity/activity.service.ts","../../../../packages/aria/src/focus/focus.service.ts","../../../../packages/aria/src/focus/focus-trap.directive.ts","../../../../packages/aria/src/focus/focus-state.directive.ts","../../../../packages/aria/src/focus/focusable.directive.ts","../../../../packages/aria/src/keystroke/keystroke.service.ts","../../../../packages/aria/src/gestures/gesture-event.ts","../../../../packages/aria/src/gestures/gesture.ts","../../../../packages/aria/src/gestures/gesture-drag.ts","../../../../packages/aria/src/gestures/gesture-longtap.ts","../../../../packages/aria/src/gestures/gesture-tap.ts","../../../../packages/aria/src/gestures/gesture.service.ts","../../../../packages/aria/src/ui-state/selector.ts","../../../../packages/aria/src/ui-state/ui-state.ts","../../../../packages/aria/src/ui-state/abstract.ts","../../../../packages/aria/src/ui-state/busy.directive.ts","../../../../packages/aria/src/ui-state/dirty.directive.ts","../../../../packages/aria/src/ui-state/disabled.directive.ts","../../../../packages/aria/src/ui-state/readonly.directive.ts","../../../../packages/aria/src/ui-state/progress-state.ts","../../../../packages/aria/src/ui-state/index.ts","../../../../packages/aria/src/ngutil-aria.ts"],"sourcesContent":["import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n filter,\n fromEvent,\n map,\n merge,\n Observable,\n share,\n shareReplay,\n startWith,\n switchMap,\n take,\n throttleTime,\n timer\n} from \"rxjs\"\n\n// TODO: detect program activity\nexport type ActivityOrigin = \"mouse\" | \"keyboard\" | \"touch\" | \"program\"\n\nexport interface ActivityEvent {\n origin: ActivityOrigin\n type: keyof typeof EVENT_ORIGIN\n node?: Node\n}\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nconst EVENT_ORIGIN = {\n keydown: \"keyboard\",\n mousedown: \"mouse\",\n mousemove: \"mouse\",\n touchstart: \"touch\"\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class ActivityService {\n readonly #zone = inject(NgZone)\n readonly #doc = inject(DOCUMENT)\n\n readonly events$: Observable<ActivityEvent> = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent(this.#doc, \"keydown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousedown\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"mousemove\", EVENT_OPTIONS),\n fromEvent(this.#doc, \"touchstart\", EVENT_OPTIONS)\n ).pipe(\n map(event => {\n const type = event.type as ActivityEvent[\"type\"]\n return {\n origin: EVENT_ORIGIN[type] as ActivityOrigin,\n type: type,\n node: event.target as any\n }\n }),\n share()\n )\n )\n\n watchActivity(node?: HTMLElement) {\n if (node) {\n return this.events$.pipe(\n filter(\n event =>\n event.node != null &&\n (event.node === node || (event.node instanceof HTMLElement && event.node.contains(node)))\n ),\n shareReplay(1)\n )\n } else {\n return this.events$\n }\n }\n\n watchInactvity(timeout: number) {\n return this.events$.pipe(\n startWith(null),\n throttleTime(timeout / 2),\n switchMap(() => timer(0, timeout).pipe(take(2))),\n map(v => v !== 0),\n distinctUntilChanged(),\n shareReplay(1)\n )\n }\n}\n","import { FocusTrapFactory } from \"@angular/cdk/a11y\"\nimport { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n BehaviorSubject,\n combineLatest,\n connect,\n distinctUntilChanged,\n filter,\n finalize,\n map,\n merge,\n Observable,\n of,\n scan,\n shareReplay,\n Subject,\n Subscriber,\n switchMap,\n tap,\n timer\n} from \"rxjs\"\n\nimport { focusable, type FocusableElement, isFocusable } from \"tabbable\"\n\nimport { coerceElement, ElementInput, isEqual, isEqualStrict } from \"@ngutil/common\"\n\nimport { ActivityEvent, ActivityOrigin, ActivityService } from \"../activity\"\n\nconst EVENT_OPTIONS: AddEventListenerOptions = {\n capture: true,\n passive: true\n}\n\nexport type FocusOrigin = ActivityOrigin | null\n\nexport interface FocusOriginEvent {\n element: Node\n origin: FocusOrigin\n}\n\ninterface EventState {\n activity?: ActivityEvent\n focus?: Node\n blur?: Node\n nextOrigin?: FocusOrigin\n event?: FocusOriginEvent\n deferred?: FocusOriginEvent\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class FocusService {\n readonly #activity = inject(ActivityService)\n readonly #focusTrap = inject(FocusTrapFactory)\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n\n readonly #originOverrides = new BehaviorSubject<Map<Node, ActivityOrigin>>(new Map())\n\n readonly #focus: Observable<Node> = listener(this.#document, this.#zone, \"focus\", EVENT_OPTIONS).pipe(\n connect(focus =>\n this.#zone.runOutsideAngular(() => {\n let lastFocused: Node | null = null\n const sideEffect = new Subject<Node>()\n\n // if element removed form document, emit blur & focus\n const mutation = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (mutation.type === \"childList\" && mutation.removedNodes.length > 0) {\n for (const removed of Array.from(mutation.removedNodes)) {\n if (removed === lastFocused || removed.contains(lastFocused)) {\n this.#blurSide.next(lastFocused!)\n sideEffect.next(this.#document.activeElement!)\n return\n }\n }\n }\n }\n })\n\n mutation.observe(this.#document, { subtree: true, childList: true })\n return merge(\n focus.pipe(\n tap(node => (lastFocused = node)),\n finalize(() => mutation.disconnect())\n ),\n sideEffect\n )\n })\n ),\n\n distinctUntilChanged(isEqualStrict)\n )\n\n readonly #blurEvent = listener(this.#document, this.#zone, \"blur\", EVENT_OPTIONS)\n readonly #blurSide = new Subject<Node>()\n readonly #blur: Observable<Node> = merge(this.#blurEvent, this.#blurSide).pipe(distinctUntilChanged(isEqualStrict))\n\n readonly events: Observable<FocusOriginEvent> = this.#zone.runOutsideAngular(() => {\n const activity = this.#activity.events$.pipe(\n filter(activity => activity.type !== \"mousemove\"),\n map(activity => ({ activity }) satisfies Partial<EventState>)\n )\n const focus = this.#focus.pipe(map(focus => ({ focus }) satisfies Partial<EventState>))\n const blur = this.#blur.pipe(map(blur => ({ blur }) satisfies Partial<EventState>))\n\n const event = merge(activity, focus, blur).pipe(\n scan<EventState, EventState>((state, curr) => {\n const result: EventState = { ...state, event: undefined, deferred: undefined }\n\n if (curr.blur != null) {\n if (curr.blur === state.focus) {\n result.deferred = { element: curr.blur, origin: null }\n } else if (state.deferred && state.deferred.origin == null) {\n result.deferred = state.deferred\n }\n } else if (curr.focus != null) {\n if (\n curr.focus === document &&\n state.blur === curr.focus &&\n (!state.deferred || !state.deferred.origin)\n ) {\n result.deferred = { element: curr.focus, origin: null }\n result.nextOrigin = \"program\"\n return result\n }\n\n if (state.nextOrigin) {\n result.event = { element: curr.focus, origin: state.nextOrigin }\n result.nextOrigin = undefined\n } else if (state.activity) {\n result.event = { element: curr.focus, origin: state.activity.origin }\n }\n } else if (curr.activity) {\n delete result.nextOrigin\n if (\n state.event &&\n curr.activity.origin !== \"keyboard\" &&\n state.event.origin !== curr.activity.origin\n ) {\n result.deferred = { ...state.event, origin: curr.activity.origin }\n }\n }\n return { ...result, ...curr }\n }, {} as EventState),\n switchMap(state => {\n if (state.deferred) {\n return timer(20).pipe(\n map(() => {\n state.event = state.deferred\n delete state.deferred\n return state\n })\n )\n } else {\n return of(state)\n }\n }),\n map(state => state.event),\n filter(event => !!event)\n )\n\n return combineLatest({ event, overrides: this.#originOverrides }).pipe(\n map(({ event, overrides }) => {\n const override = overrides.get(event.element)\n\n if (override != null) {\n overrides.delete(event.element)\n event.origin = override || event.origin\n }\n\n return event\n }),\n distinctUntilChanged(isEqual),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n })\n\n watch(element: ElementInput) {\n const el = coerceElement(element)\n return this.events.pipe(\n map(event => {\n if (event.element && (event.element === el || el.contains(event.element))) {\n return event\n }\n return { element: el, origin: null } as FocusOriginEvent\n })\n )\n }\n\n focus(node: ElementInput, origin?: ActivityOrigin) {\n if (origin != null) {\n this.#setOrigin(node, origin)\n }\n coerceElement(node).focus()\n }\n\n queryFocusable(inside: ElementInput): FocusableElement[] {\n return focusable(coerceElement(inside), { includeContainer: false })\n }\n\n getFirstFocusable(inside: ElementInput): FocusableElement | undefined {\n return this.queryFocusable(inside)[0]\n }\n\n isFocusable(node: ElementInput): boolean {\n return isFocusable(coerceElement(node))\n }\n\n focusTrap(inside: ElementInput, deferCaptureElements: boolean = false) {\n return this.#focusTrap.create(coerceElement(inside), deferCaptureElements)\n }\n\n #setOrigin(el: ElementInput, origin: ActivityOrigin) {\n const target = coerceElement(el)\n const map = this.#originOverrides.value\n const old = map.get(target)\n if (old !== origin) {\n map.set(target, origin)\n this.#originOverrides.next(map)\n }\n }\n\n #delOrigin(el: ElementInput) {\n const target = coerceElement(el)\n const map = this.#originOverrides.value\n if (map.has(target)) {\n map.delete(target)\n this.#originOverrides.next(map)\n }\n }\n}\n\nfunction listener(doc: Document, zone: NgZone, type: Event[\"type\"], options: AddEventListenerOptions) {\n return new Observable((dst: Subscriber<Node>) =>\n zone.runOutsideAngular(() => {\n const handler = (e: Event) => {\n dst.next(e.target! as Node)\n }\n document.addEventListener(type, handler, options)\n return () => document.removeEventListener(type, handler, options)\n })\n )\n}\n","import { ElementRef, inject } from \"@angular/core\"\n\nimport { BehaviorSubject } from \"rxjs\"\n\nimport { Destructible } from \"@ngutil/common\"\n\nimport { FocusService } from \"./focus.service\"\n\n// TODO: implement\nexport class FocusTrap extends Destructible {\n #manager = inject(FocusService)\n #el = inject(ElementRef<HTMLElement>)\n\n get enabled() {\n return this.#enabled.value\n }\n set enabled(val: boolean) {\n if (this.#enabled.value !== val) {\n this.#enabled.next(val)\n }\n }\n #enabled = new BehaviorSubject<boolean>(true)\n\n enable() {\n this.enabled = true\n }\n\n disable() {\n this.enabled = false\n }\n}\n","import { computed, Directive, ElementRef, inject } from \"@angular/core\"\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, map, Observable, of, shareReplay, switchMap } from \"rxjs\"\n\nimport { ConnectProtocol, ElementInput, isElementInput, isEqual } from \"@ngutil/common\"\n\nimport { FocusOrigin, FocusOriginEvent, FocusService } from \"./focus.service\"\n\n@Directive({\n host: {\n \"[attr.focus]\": \"self()\",\n \"[attr.focus-within]\": \"within()\",\n \"[attr.focus-present]\": \"has()\"\n }\n})\nexport class FocusState implements ConnectProtocol {\n readonly #focus = inject(FocusService)\n readonly #el = inject<ElementRef<HTMLElement>>(ElementRef)\n readonly #parent = inject(FocusState, { optional: true, skipSelf: true })\n readonly #default: FocusOriginEvent = { element: this.#el.nativeElement, origin: null }\n\n readonly #self = this.#focus.watch(this.#el).pipe(takeUntilDestroyed(), shareReplay(1))\n\n readonly #connected = new BehaviorSubject<Observable<FocusOriginEvent>[]>([])\n readonly #connEvent = this.#connected.pipe(\n switchMap(values => (values.length === 0 ? of([]) : combineLatest(values))),\n takeUntilDestroyed(),\n map(values => values.filter(v => v.origin != null)),\n map(values => values[0] || this.#default),\n shareReplay(1)\n )\n\n readonly event$: Observable<FocusOriginEvent> = combineLatest([this.#self, this.#connEvent]).pipe(\n // debounceTime(100), // TODO: miért volt ez itt?\n map(([self, conn]) => (self.origin !== null ? self : conn.origin !== null ? conn : this.#default)),\n distinctUntilChanged(isEqual),\n shareReplay(1)\n )\n\n readonly event = toSignal(this.event$, { rejectErrors: true, manualCleanup: true, equal: isEqual })\n\n readonly self = computed<FocusOrigin>(() => {\n const event = this.event()\n if (event == null) {\n return null\n }\n return event.element === this.#el.nativeElement ? event.origin : null\n })\n\n readonly within = computed<FocusOrigin>(() => {\n const event = this.event()\n if (event == null) {\n return null\n }\n return event.element !== this.#el.nativeElement ? event.origin : null\n })\n\n readonly has = computed<FocusOrigin>(() => this.self() || this.within())\n\n constructor() {\n this.#parent?.connect(this).pipe(takeUntilDestroyed()).subscribe()\n // effect(() => {\n // console.log(this.#el.nativeElement, this.has())\n // })\n }\n\n connect(value: FocusState | ElementInput) {\n return new Observable(() => {\n const src = (isElementInput(value) ? this.#focus.watch(value) : value.event$).pipe(shareReplay(1))\n this.#connected.next([...this.#connected.value, src])\n\n return () => {\n let current = this.#connected.value\n const idx = current.indexOf(src)\n if (idx >= 0) {\n current = [...current]\n current.splice(idx, 1)\n this.#connected.next(current)\n }\n }\n })\n }\n}\n","import { computed, Directive, inject, input } from \"@angular/core\"\n\nimport { ConnectProtocol, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"./focus-state.directive\"\n\n// TODO: what happens when disabled is changed\n\n@Directive({\n selector: \"[nuFocusable]\",\n exportAs: \"nuFocusable\",\n host: {\n \"[attr.tabindex]\": \"_tabindex()\"\n },\n hostDirectives: [FocusState]\n})\nexport class Focusable implements ConnectProtocol {\n readonly state = inject(FocusState)\n\n readonly focusable = input<boolean | number>(true, { alias: \"nuFocusable\" })\n readonly tabindex = input(0, { transform: Number })\n\n readonly _tabindex = computed(() => {\n const focusable = this.focusable()\n const tabindex = this.tabindex()\n\n if (focusable === false) {\n return -1\n }\n\n if (typeof focusable === \"number\") {\n return focusable\n }\n\n if (focusable === true && tabindex != null && !isNaN(tabindex)) {\n return tabindex\n }\n\n return 0\n })\n\n connect(value: Focusable | FocusState | ElementInput) {\n if (value instanceof FocusState || isElementInput(value)) {\n return this.state.connect(value)\n } else {\n return this.state.connect(value.state)\n }\n }\n}\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport {\n distinctUntilChanged,\n EMPTY,\n filter,\n from,\n fromEvent,\n map,\n merge,\n Observable,\n of,\n share,\n shareReplay,\n startWith,\n Subscriber,\n switchMap\n} from \"rxjs\"\n\nimport { coerceElement, ElementInput, isElementInput } from \"@ngutil/common\"\n\nimport { FocusState } from \"../focus\"\n\nexport interface Keystroke {\n // https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n key: KeyboardEvent[\"key\"]\n shift?: boolean\n ctrl?: boolean\n alt?: boolean\n state: \"down\" | \"up\"\n}\n\nexport interface KeystrokeEvent {\n original: KeyboardEvent\n keystroke: Keystroke\n}\n\nexport type KeystrokeActivation = ElementInput | FocusState | Observable<ElementInput | FocusState | boolean>\n\n@Injectable({ providedIn: \"root\" })\nexport class KeystrokeService {\n readonly #document = inject(DOCUMENT)\n readonly #zone = inject(NgZone)\n\n readonly #keyEvent = this.#zone.runOutsideAngular(() =>\n merge(\n fromEvent<KeyboardEvent>(this.#document, \"keydown\", { capture: true, passive: false }),\n fromEvent<KeyboardEvent>(this.#document, \"keyup\", { capture: true, passive: false })\n ).pipe(\n filter(event => event.defaultPrevented === false),\n share()\n )\n )\n\n readonly #focusEvent = this.#zone.runOutsideAngular(() =>\n fromEvent(this.#document, \"focus\", { capture: true, passive: true }).pipe(\n startWith(null),\n map(() => this.#document.activeElement),\n shareReplay(1)\n )\n )\n\n watch(activation: KeystrokeActivation, ...keystrokes: Keystroke[]): Observable<KeystrokeEvent> {\n return new Observable((dst: Subscriber<KeystrokeEvent>) =>\n this.#trigger(activation)\n .pipe(\n distinctUntilChanged(),\n switchMap(enabled => {\n if (enabled) {\n return this.#keyEvent\n } else {\n return EMPTY\n }\n }),\n map(event => {\n if (event.defaultPrevented) {\n return []\n }\n\n const idFromEvent = keystrokeId(eventToKeystroke(event))\n const matches = keystrokes\n .filter(ks => keystrokeId(ks) === idFromEvent)\n .map(ks => {\n return {\n original: event,\n keystroke: ks\n }\n })\n\n if (matches.length > 0) {\n event.preventDefault()\n }\n\n return matches\n }),\n filter(matches => matches.length > 0),\n switchMap(matches => of(...matches))\n )\n .subscribe(dst)\n )\n }\n\n #trigger(activation: KeystrokeActivation): Observable<boolean | HTMLElement> {\n if (isElementInput(activation)) {\n return this.#focusActivation(coerceElement(activation))\n } else if (activation instanceof FocusState) {\n return activation.event$.pipe(map(({ origin }) => origin != null))\n } else {\n return from(activation).pipe(\n switchMap(value => {\n if (isElementInput(value) || value instanceof FocusState) {\n return this.#trigger(value)\n } else {\n return of(value)\n }\n })\n )\n }\n }\n\n #focusActivation(element: HTMLElement): Observable<boolean> {\n return this.#focusEvent.pipe(map(focused => focused === element || element.contains(focused)))\n }\n}\n\nfunction keystrokeId(ks: Keystroke): string {\n let res = ks.key\n if (ks.shift) {\n res += \"+shift\"\n }\n if (ks.ctrl) {\n res += \"+ctrl\"\n }\n if (ks.alt) {\n res += \"+alt\"\n }\n res += `${ks.state}`\n return res\n}\n\nfunction eventToKeystroke(event: KeyboardEvent): Keystroke {\n return {\n key: event.key,\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n alt: event.altKey,\n state: event.type === \"keyup\" ? \"up\" : \"down\"\n }\n}\n","import { Position } from \"@ngutil/style\"\n\nexport interface GestureDetail {\n readonly origin: GestureOrigin\n readonly target: HTMLElement\n readonly pointerType: GesturePointerType\n readonly phase: GesturePhase\n readonly pointers: ReadonlyArray<GesturePointer>\n readonly timeStamp: number\n readonly elapsed: number\n readonly scrollDistance?: Position\n}\n\nexport type PointersPosition = ReadonlyArray<Readonly<Position>>\n\nexport interface GesturePointer {\n readonly start: Position\n readonly current: Position\n readonly end?: Position\n readonly distance: Position\n readonly direction: { x: -1 | 0 | 1; y: -1 | 0 | 1 }\n}\n\nexport type GestureOrigin = MouseEvent | TouchEvent\n\nexport enum GesturePointerType {\n Mouse = \"mouse\",\n Touch = \"touch\"\n}\n\nexport enum GesturePhase {\n Start = \"start\",\n Moving = \"moving\",\n End = \"end\"\n}\n\nexport interface GestureListenerConfig {\n options?: AddEventListenerOptions\n pointerType: GesturePointerType\n phase: GesturePhase\n}\n\nexport const Listeners: { [key: string]: GestureListenerConfig } = {\n mousedown: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n mousemove: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n mouseup: {\n pointerType: GesturePointerType.Mouse,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchstart: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Start,\n options: { capture: true, passive: false }\n },\n touchmove: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.Moving,\n options: { capture: true, passive: false }\n },\n touchend: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n },\n touchcancel: {\n pointerType: GesturePointerType.Touch,\n phase: GesturePhase.End,\n options: { capture: true, passive: false }\n }\n // ,\n // contextmenu: {\n // pointerType: GesturePointerType.Mouse,\n // phase: GesturePhase.Start,\n // options: { capture: true, passive: false }\n // }\n} as const\n","import { Observable } from \"rxjs\"\n\nimport { FunctionKeys, Mutable } from \"utility-types\"\n\nimport { GestureDetail, GesturePointerType, Listeners } from \"./gesture-event\"\n\nexport enum GestureCaptureState {\n // Unchecked\n Unchecked = 0,\n // Pending state\n Pending = 1,\n // Skip capture\n Skip = 2,\n // Determine by priority\n Maybe = 3,\n // Instanlty terminate capture, and fire event\n Instant = 4\n}\n\ntype _GestureOptions = Partial<Omit<Gesture<any>, \"originTypes\" | \"type\" | FunctionKeys<Gesture<any>>>>\nexport type GestureOptions<T extends object> = Partial<Omit<T, keyof Gesture<any> | FunctionKeys<T>>> & _GestureOptions\n\nexport type GestureEvent<G extends Gesture> = G extends Gesture<infer E> & { type: infer T }\n ? CustomEvent<E> & { type: T }\n : never\n\nexport abstract class Gesture<T extends GestureDetail = GestureDetail> {\n /**\n * The name of the gesture\n */\n abstract readonly type: string\n\n /**\n * Gestures that depends on move distance, like drag, use this option\n */\n readonly distanceInclusion: number = 10\n\n /**\n * Gestures thet dependnso on time frame, like longtap, use this option\n */\n readonly timeWithin: number = 300\n\n /**\n * The priority of the gesture\n */\n readonly priority: number = 0\n\n /**\n * Should the gesture include the scroll distance\n */\n readonly includeScrollDistance: boolean = false\n\n /**\n * The pointer types of the gesture\n */\n readonly pointerTypes: Array<GesturePointerType> = [GesturePointerType.Mouse, GesturePointerType.Touch]\n\n /**\n * The number of pointers of the gesture can handle\n */\n readonly pointerCount: number = 1\n\n /**\n * The mouse buttons of the gesture (1 = left, 2 = middle, 3 = right)\n */\n readonly mouseButtons: Array<number> = [0]\n\n /**\n * The event types of the gesture can handle\n */\n readonly originTypes: Array<string>\n\n constructor(options?: _GestureOptions) {\n Object.assign(this, options)\n this.originTypes = Object.keys(Listeners).filter(v => this.pointerTypes.includes(Listeners[v].pointerType))\n }\n\n /**\n * Test if the gesture should be captured.\n * The given events is filterde by {@see Gesture#shouldCapture}\n * ! important, dont rely on this object state, because not always create a new object\n * @param events events to check\n */\n abstract capture(events: Observable<GestureDetail>): Observable<GestureCaptureState>\n\n /**\n * Transform input event, to gesture event.\n * The given events is filterde by {@see Gesture#isRelevantEvent}\n * ! important, dont rely on this object state, because not always create a new object\n * @param events events to transform or filter or leave as is\n */\n handle(events: Observable<GestureDetail>): Observable<Mutable<T>> {\n return events as Observable<Mutable<T>>\n }\n\n /**\n * Should this gesture capture the event?\n * @param event event to check\n * @returns true if the gesture should capture the event, false otherwise\n */\n shouldCapture(event: GestureDetail): boolean {\n return this.isRelevantEvent(event)\n }\n\n /**\n * Test if the event is relevant to the gesture.\n * The event is relevant if\n * @param event event to check\n * @returns true if the event is relevant, false otherwise\n */\n isRelevantEvent(event: GestureDetail): boolean {\n return (\n this.pointerTypes.includes(event.pointerType) &&\n this.pointerCount === event.pointers.length &&\n this.originTypes.includes(event.origin.type as any) &&\n (event.pointerType !== GesturePointerType.Mouse ||\n (event.origin instanceof MouseEvent && this.mouseButtons.includes(event.origin.button)))\n )\n }\n}\n","import { map, Observable, tap } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { Position } from \"@ngutil/style\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail } from \"./gesture-event\"\n\nexport interface GestureDragDetail extends GestureDetail {\n moveBy: Position\n}\n\nexport type GestureDragOptions = GestureOptions<GestureDragImpl>\n\nexport class GestureDragImpl<T extends GestureDragDetail = GestureDragDetail> extends Gesture<T> {\n readonly type = \"gesture-drag\"\n readonly horizontal?: boolean\n readonly vertical?: boolean\n\n constructor(options?: GestureDragOptions) {\n super({ includeScrollDistance: true, ...options })\n\n if (this.horizontal == null && this.vertical == null) {\n this.horizontal = true\n this.vertical = true\n }\n }\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return events.pipe(\n map(state => {\n if (Math.abs(state.pointers[0].distance.x) > this.distanceInclusion) {\n return this.horizontal ? GestureCaptureState.Maybe : GestureCaptureState.Skip\n }\n\n if (Math.abs(state.pointers[0].distance.y) > this.distanceInclusion) {\n return this.vertical ? GestureCaptureState.Maybe : GestureCaptureState.Skip\n }\n return GestureCaptureState.Pending\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n const updater =\n this.horizontal && this.vertical\n ? updateAnyDirection\n : this.horizontal\n ? updateHorizontalOnly\n : updateVerticalOnly\n\n return super.handle(events).pipe(tap(updater<T>))\n }\n}\n\ntype UpdaterFn = (event: Mutable<GestureDragDetail>) => void\n\nfunction updateVerticalOnly<T extends GestureDragDetail>(event: Mutable<T>) {\n const pointer = event.pointers[0]\n pointer.distance.x = 0\n pointer.direction.x = 0\n pointer.current.x = pointer.start.x\n updateEvent(event, updateByScrollDistanceVertical)\n}\n\nfunction updateHorizontalOnly<T extends GestureDragDetail>(event: Mutable<T>) {\n const pointer = event.pointers[0]\n pointer.distance.y = 0\n pointer.direction.y = 0\n pointer.current.y = pointer.start.y\n updateEvent(event, updateByScrollDistanceHorizontal)\n}\n\nfunction updateAnyDirection<T extends GestureDragDetail>(event: Mutable<T>) {\n updateEvent(event, updateByScrollDistanceBoth)\n}\n\nfunction updateEvent<T extends GestureDragDetail>(event: Mutable<T>, scrollUpdate: UpdaterFn) {\n event.moveBy = { ...event.pointers[0].distance }\n scrollUpdate(event)\n}\n\nfunction updateByScrollDistanceVertical<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.y += sd.y\n}\n\nfunction updateByScrollDistanceHorizontal<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.x += sd.x\n}\n\nfunction updateByScrollDistanceBoth<T extends GestureDragDetail>(event: Mutable<T>) {\n const sd = event.scrollDistance\n if (sd == null) {\n return\n }\n event.moveBy.x += sd.x\n event.moveBy.y += sd.y\n}\n\nexport function gestureDrag(options?: GestureDragOptions) {\n return new GestureDragImpl(options)\n}\n\nexport const GestureDrag = gestureDrag()\nexport const GestureDragHorizontal = gestureDrag({ horizontal: true, vertical: false })\nexport const GestureDragVertical = gestureDrag({ horizontal: false, vertical: true })\n","import { combineLatest, filter, map, Observable, startWith, timer } from \"rxjs\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail, GesturePhase, GesturePointerType } from \"./gesture-event\"\n\nexport type GestureLongTapDetail = GestureDetail\nexport type GestureLongTapOptions = GestureOptions<GestureLongTapImpl>\n\nexport class GestureLongTapImpl<T extends GestureLongTapDetail = GestureLongTapDetail> extends Gesture<T> {\n readonly type = \"gesture-longtap\"\n constructor(options?: GestureLongTapOptions) {\n super({ pointerTypes: [GesturePointerType.Touch], ...options })\n }\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return combineLatest({ timeWithin: timer(this.timeWithin).pipe(startWith(null)), event: events }).pipe(\n map(({ timeWithin, event }) => {\n if (event.elapsed > this.timeWithin) {\n return GestureCaptureState.Skip\n }\n\n if (event.phase === GesturePhase.End && event.elapsed > this.timeWithin) {\n return GestureCaptureState.Skip\n }\n\n const distance = event.pointers[0].distance\n\n if (Math.abs(distance.x) < this.distanceInclusion && Math.abs(distance.y) < this.distanceInclusion) {\n // maybe is ok event.phase === GesturePhase.End\n return timeWithin !== null ? GestureCaptureState.Instant : GestureCaptureState.Pending\n } else {\n return GestureCaptureState.Skip\n }\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n return super.handle(\n events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End))\n )\n }\n}\n\nexport function gestureLongTap(options?: GestureLongTapOptions) {\n return new GestureLongTapImpl(options)\n}\n\nexport const GestureLongTap = gestureLongTap()\n","import { filter, map, Observable } from \"rxjs\"\n\nimport { Gesture, GestureCaptureState, GestureOptions } from \"./gesture\"\nimport { GestureDetail, GesturePhase } from \"./gesture-event\"\n\nexport type GestureTapDetail = GestureDetail\nexport type GestureTapOptions = GestureOptions<GestureTapImpl>\n\nexport class GestureTapImpl<T extends GestureTapDetail = GestureTapDetail> extends Gesture<T> {\n readonly type = \"gesture-tap\"\n\n override capture(events: Observable<GestureDetail>): Observable<GestureCaptureState> {\n return events.pipe(\n map(event => {\n const distance = event.pointers[0].distance\n if (Math.abs(distance.x) < this.distanceInclusion && Math.abs(distance.y) < this.distanceInclusion) {\n // TODO\n // if (event.phase === GesturePhase.End) {\n // if (event.target === event.origin.target || event.target.contains(event.origin.target)) {\n // return GestureCaptureState.Instant\n // } else {\n // return GestureCaptureState.Skip\n // }\n // } else {\n // return GestureCaptureState.Pending\n // }\n return event.phase === GesturePhase.End ? GestureCaptureState.Instant : GestureCaptureState.Pending\n } else {\n return GestureCaptureState.Skip\n }\n })\n )\n }\n\n override handle(events: Observable<GestureDetail>) {\n return super.handle(\n events.pipe(filter(event => event.phase === GesturePhase.Start || event.phase === GesturePhase.End))\n )\n }\n}\n\nexport function gestureTap(options?: GestureTapOptions) {\n return new GestureTapImpl(options)\n}\n\nexport const GestureTap = gestureTap()\n","import { DOCUMENT } from \"@angular/common\"\nimport { inject, Injectable, NgZone } from \"@angular/core\"\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\"\n\nimport {\n combineLatest,\n connect,\n debounceTime,\n filter,\n finalize,\n map,\n merge,\n Observable,\n scan,\n share,\n startWith,\n Subject,\n Subscriber,\n switchMap,\n takeWhile,\n tap\n} from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { __zone_symbol__, coerceElement, ElementInput, isFalsy, isTruthy } from \"@ngutil/common\"\nimport { Position } from \"@ngutil/style\"\n\nimport { Gesture, GestureCaptureState, GestureEvent } from \"./gesture\"\nimport {\n GestureDetail,\n GestureListenerConfig,\n GestureOrigin,\n GesturePhase,\n GesturePointerType,\n Listeners\n} from \"./gesture-event\"\n\nconst ADD_EVENT_LISTENER = __zone_symbol__(\"addEventListener\")\nconst REMOVE_EVENT_LISTENER = __zone_symbol__(\"removeEventListener\")\nconst DISPATCH_EVENT = __zone_symbol__(\"dispatchEvent\")\n\ntype GesturesToEventsType<T extends Array<Gesture>> =\n T extends Array<infer G> ? (G extends Gesture ? GestureEvent<G> : never) : never\n\ntype GestureEventDiscriminator<T> = T extends { type: infer N } ? { type: N } & T : never\n\nexport type GestureWatchReturns<T extends Array<Gesture>> = Observable<\n GestureEventDiscriminator<GesturesToEventsType<T>>\n>\n\nexport type GestureListenReturns<T extends Array<Gesture>> = Observable<GesturesToEventsType<T>>\n\ninterface BeginState {\n detail: GestureDetail\n gestures: Map<Gesture, GestureCaptureState>\n includeScrollDistance: boolean\n}\n\ninterface CaptureState {\n events: GestureDetail[]\n gestures: BeginState[\"gestures\"]\n includeScrollDistance: BeginState[\"includeScrollDistance\"]\n}\n\ninterface CaptureSelectState {\n events: GestureDetail[]\n gesture?: Gesture\n watchers?: Array<Watcher>\n}\n\ninterface Watcher {\n readonly el: HTMLElement\n readonly gesture: Gesture\n}\n\nconst SCROLL_LISTENER_OPTIONS: AddEventListenerOptions = { passive: true, capture: true }\n\n@Injectable({ providedIn: \"root\" })\nexport class GestureService {\n readonly #zone = inject(NgZone)\n readonly #document = inject(DOCUMENT)\n\n #watchers: Watcher[] = []\n readonly #trigger = new Subject<GestureDetail>()\n\n readonly #moving: Observable<GestureDetail> = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.Moving)\n .map(name => this.#listen(name, Listeners[name]))\n ).pipe(share())\n\n readonly #end: Observable<GestureDetail> = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.End)\n .map(name => this.#listen(name, Listeners[name]))\n ).pipe(share())\n\n readonly #eventStream = merge(this.#moving, this.#end).pipe(share())\n\n readonly #begin = new Observable((dst: Subscriber<BeginState>) => {\n let pointerType: GesturePointerType | undefined\n\n return this.#trigger\n .pipe(\n filter(event => {\n if (pointerType == null) {\n pointerType = event.pointerType\n }\n\n return event.pointerType === pointerType\n }),\n connect(events =>\n merge(\n events,\n // reset pointerType on end, after 200ms, because touchend is maybe followed by a mouse event\n this.#end.pipe(\n debounceTime(200),\n tap(() => {\n pointerType = undefined\n this.#enableTouchAction()\n }),\n filter(() => false)\n )\n )\n ),\n // Select active watchers\n map((detail: Mutable<GestureDetail>) => {\n updatePointers(detail)\n const eventTarget = detail.origin.target as HTMLElement\n detail.target = eventTarget\n let includeScrollDistance = false\n const gestures = this.#watchers\n .filter(\n ({ gesture, el }) =>\n (el === eventTarget || (\"contains\" in el && el.contains(eventTarget))) &&\n gesture.shouldCapture(detail)\n )\n .reduce(\n (gestures, { gesture }) => {\n if (!gestures.has(gesture)) {\n includeScrollDistance = includeScrollDistance || gesture.includeScrollDistance\n gestures.set(gesture, GestureCaptureState.Unchecked)\n }\n return gestures\n },\n new Map() as BeginState[\"gestures\"]\n )\n\n return { detail: detail, gestures, includeScrollDistance } satisfies BeginState\n }),\n filter(({ gestures }) => gestures.size > 0),\n tap(this.#disableTouchAction)\n // finalize(() => console.log(\"FINALIZE BEGIN\"))\n )\n .subscribe(dst)\n })\n\n readonly #gesture = this.#begin.pipe(\n switchMap(({ detail: startEvent, gestures, includeScrollDistance }) => {\n const pointerType = startEvent.pointerType\n const startAt = startEvent.origin.timeStamp\n const targetEl = startEvent.origin.target as HTMLElement\n const dispatchEvent = targetEl[DISPATCH_EVENT].bind(targetEl)\n\n const eventStreamInit = this.#eventStream.pipe(\n startWith(startEvent),\n filter(event => event.pointerType === pointerType)\n )\n\n const eventStreamSource = !includeScrollDistance\n ? eventStreamInit\n : combineLatest([eventStreamInit, this.#scrollDistance(targetEl)]).pipe(\n map(([src, distance]) => {\n ;(src as Mutable<GestureDetail>).scrollDistance = distance\n return src\n })\n )\n\n const eventStream = eventStreamSource.pipe(\n scan(\n (state, curr) =>\n updatePointers({\n ...state,\n ...curr,\n target: targetEl,\n elapsed: curr.origin.timeStamp - startAt!\n }),\n startEvent\n ),\n takeWhile(event => event.phase !== GesturePhase.End, true),\n // finalize(() => console.log(\"FINALIZE STREAM\")),\n share()\n )\n\n const captureState = eventStream.pipe(\n connect(src => {\n const state: CaptureState = { events: [], gestures, includeScrollDistance }\n return merge(\n src.pipe(tap(event => state.events.push(event))),\n ...Array.from(gestures.keys())\n .sort(sortByPripority)\n .map(gesture =>\n gesture.capture(src.pipe(filter(gesture.shouldCapture.bind(gesture)))).pipe(\n takeWhile(result => result !== GestureCaptureState.Skip, true),\n tap(result => gestures.set(gesture, result))\n )\n )\n ).pipe(map(() => state))\n })\n // finalize(() => console.log(\"FINALIZE CAPTURE\"))\n )\n\n const selectGesture = captureState.pipe(\n map(state => {\n const partitions: { [k in GestureCaptureState]?: Gesture[] } = {}\n\n for (const [gesture, captureState] of state.gestures) {\n const partition = (partitions[captureState] ??= [])\n partition.push(gesture)\n }\n\n if (partitions[GestureCaptureState.Instant] != null) {\n return {\n gesture: partitions[GestureCaptureState.Instant].sort(sortByPripority)[0],\n events: state.events\n } as CaptureSelectState\n }\n\n // while not all gestures return from Gesture.capture\n if (partitions[GestureCaptureState.Unchecked] != null) {\n return null\n }\n\n // while has pending, the capture is continued\n if (partitions[GestureCaptureState.Pending] != null) {\n return null\n }\n\n // no pendig & has maybe\n if (partitions[GestureCaptureState.Maybe] != null) {\n return {\n gesture: partitions[GestureCaptureState.Maybe].sort(sortByPripority)[0],\n events: state.events\n } as CaptureSelectState\n }\n\n // no pending & no maybe & no terminate\n // so, nothign matched\n return { events: state.events } as CaptureSelectState\n }),\n takeWhile(isFalsy, true),\n filter(isTruthy),\n takeWhile(v => v!.gesture != null, false)\n // tap((v: CaptureSelectState) => v.events.forEach(({ origin }) => preventDefault(origin)))\n // finalize(() => console.log(\"FINALIZE SELECT\"))\n ) as Observable<Required<CaptureSelectState>>\n\n return selectGesture.pipe(\n switchMap(({ events, gesture }) =>\n gesture\n .handle(\n eventStream.pipe(\n startWith(...events),\n tap(({ origin }) => preventDefault(origin)),\n filter(gesture.isRelevantEvent.bind(gesture))\n )\n )\n .pipe(\n takeWhile(v => v.phase !== GesturePhase.End, true),\n tap(detail =>\n dispatchEvent(\n new CustomEvent(gesture.type, { detail, bubbles: true, cancelable: true })\n )\n )\n // finalize(() => console.log(\"GESTURE FINALIZE\"))\n )\n ),\n // finalize(() => console.log(\"FINALIZE RESULT\")),\n finalize(this.#enableTouchAction)\n )\n }),\n share()\n )\n\n constructor() {\n const triggers = merge(\n ...Object.keys(Listeners)\n .filter(name => Listeners[name].phase === GesturePhase.Start)\n .map(name => this.#listen(name, Listeners[name]))\n )\n triggers.pipe(takeUntilDestroyed()).subscribe(this.#trigger)\n }\n\n listen<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureListenReturns<T> {\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const element = coerceElement(el)\n const next = dst.next.bind(dst)\n for (const gesture of gestures) {\n element[ADD_EVENT_LISTENER](gesture.type as any, next)\n dst.add(element[REMOVE_EVENT_LISTENER].bind(element, gesture.type as any, next as any))\n }\n dst.add(this.#watch(element, ...gestures).subscribe())\n })\n ) as any\n }\n\n #watch<T extends Array<Gesture>>(el: ElementInput, ...gestures: T): GestureWatchReturns<T> {\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const element = coerceElement(el)\n const watchers = gestures.map(gesture => {\n return { gesture, el: element }\n })\n this.#add(watchers)\n dst.add(this.#gesture.subscribe(dst))\n return () => {\n this.#remove(watchers)\n }\n })\n ) as any\n }\n\n #add(watchers: Watcher[]) {\n this.#watchers = this.#watchers.concat(watchers)\n }\n\n #remove(watchers: Watcher[]) {\n this.#watchers = this.#watchers.filter(v => !watchers.includes(v))\n }\n\n #listen(name: string, config: GestureListenerConfig) {\n const { phase, pointerType, options } = config\n\n return new Observable((dst: Subscriber<GestureDetail>) =>\n this.#zone.runOutsideAngular(() => {\n const listener = (origin: GestureOrigin) => {\n if (origin.defaultPrevented) {\n return\n }\n dst.next({ origin, phase, pointerType } as GestureDetail)\n }\n\n // console.log(\"addEventListener\", name)\n this.#document[ADD_EVENT_LISTENER](name as keyof DocumentEventMap, listener as any, options)\n return () => {\n // console.log(\"removeEventListener\", name)\n this.#document[REMOVE_EVENT_LISTENER](name as keyof DocumentEventMap, listener as any, options)\n }\n })\n )\n }\n\n #scrollDistance(element: Element): Observable<Position> {\n const scrollPosition = () => {\n let x = 0\n let y = 0\n let p = element\n do {\n x += p.scrollLeft ?? 0\n y += p.scrollTop ?? 0\n p = p.parentNode as Element\n } while (p != null)\n return { x, y }\n }\n\n return new Observable((dst: Subscriber<Position>) =>\n this.#zone.runOutsideAngular(() => {\n const initial = scrollPosition()\n const listener = () => {\n const current = scrollPosition()\n dst.next({ x: current.x - initial.x, y: current.y - initial.y })\n }\n dst.next({ x: 0, y: 0 })\n this.#document[ADD_EVENT_LISTENER](\"scroll\", listener, SCROLL_LISTENER_OPTIONS)\n return () => {\n this.#document[REMOVE_EVENT_LISTENER](\"scroll\", listener, SCROLL_LISTENER_OPTIONS)\n }\n })\n )\n }\n\n #lastTouchAction?: string\n #disableTouchAction = (): void => {\n if (this.#lastTouchAction == null) {\n this.#lastTouchAction = window.getComputedStyle(this.#document.body).touchAction\n this.#document.body.style.touchAction = \"none\"\n }\n }\n\n #enableTouchAction = (): void => {\n if (this.#lastTouchAction != null) {\n this.#document.body.style.touchAction = this.#lastTouchAction\n this.#lastTouchAction = undefined\n }\n }\n}\n\nfunction sortByPripority(a: Gesture, b: Gesture) {\n return b.priority - a.priority\n}\n\nfunction pointersFromEvent(event: MouseEvent | TouchEvent): Position[] {\n if (event instanceof MouseEvent) {\n return [\n {\n x: event.clientX,\n y: event.clientY\n }\n ]\n } else {\n return Array.from(event.touches).map(t => {\n return { x: t.clientX, y: t.clientY }\n })\n }\n}\n\nfunction updatePointers(state: Mutable<GestureDetail>): GestureDetail {\n if (state.phase === GesturePhase.Start) {\n state.pointers = pointersFromEvent(state.origin).map(v => {\n return { start: v, current: v, distance: { x: 0, y: 0 }, direction: { x: 0, y: 0 } }\n })\n } else if (state.pointers) {\n const pointers = pointersFromEvent(state.origin)\n if (pointers.length === 0) {\n return state\n }\n\n state.pointers = state.pointers.map((v, i) => {\n const p = pointers[i]\n return {\n start: v.start,\n current: p,\n distance: { x: p.x - v.start.x, y: p.y - v.start.y },\n direction: { x: direction(v.start.x, p.x), y: direction(v.start.y, p.y) }\n }\n })\n }\n\n return state\n}\n\nfunction direction(prev: number, curr: number): -1 | 0 | 1 {\n return curr > prev ? 1 : curr < prev ? -1 : 0\n}\n\nfunction preventDefault(event: Event) {\n if (event.cancelable && !event.defaultPrevented) {\n // console.log(`PREVENT ${event.type}`)\n event.preventDefault()\n }\n}\n","import type { UiStateDetails } from \"./ui-state\"\n\nexport type CompiledSelector = (state: UiStateDetails) => boolean\n\nexport const enum TokenType {\n Any = 1,\n Name = 2,\n Negate = 3,\n Or = 4,\n And = 5,\n Subscript = 7,\n MultiSubscript = 8\n}\n\nexport interface AstBase {\n begin: number\n end: number\n}\n\nexport interface AstAny extends AstBase {\n type: TokenType.Any\n}\n\nexport interface AstName extends AstBase {\n type: TokenType.Name\n value: string\n}\n\nexport interface AstNegate extends AstBase {\n type: TokenType.Negate\n value: SelectorAst\n}\n\nexport interface AstOr extends AstBase {\n type: TokenType.Or\n left: SelectorAst\n right: SelectorAst\n}\n\nexport interface AstAnd extends AstBase {\n type: TokenType.And\n left: SelectorAst\n right: SelectorAst\n}\n\nexport interface AstSubscript extends AstBase {\n type: TokenType.Subscript\n base: AstName\n subscript: AstAny | AstName\n}\n\nexport interface AstMultiSubscript extends AstBase {\n type: TokenType.MultiSubscript\n base: AstName\n subscripts: AstName[]\n}\n\nexport type SelectorAst = AstAny | AstName | AstNegate | AstOr | AstAnd | AstSubscript | AstMultiSubscript\n\nconst COMPILE_CACHE: { [key: string]: CompiledSelector } = {}\nexport function compile(selector: string): CompiledSelector {\n return (COMPILE_CACHE[selector] ??= _compile(parse(selector)))\n}\n\nclass Cursor {\n position: number = 0\n\n get ch() {\n return this.data[this.position]\n }\n\n constructor(readonly data: string) {}\n\n inc(value: number = 1) {\n this.position += value\n return this\n }\n\n eatWs() {\n let end = this.position\n while (end < this.data.length && /[ \\r\\n\\t]/.test(this.data[end])) {\n end++\n }\n this.position = end\n return this\n }\n\n is(ch: string) {\n if (ch.length === 1) {\n return this.ch === ch\n }\n const begin = this.position\n const end = begin + ch.length\n return this.data.substring(begin, end) === ch\n }\n\n eof() {\n return this.position >= this.data.length\n }\n\n set(position: number) {\n this.position = position\n return this\n }\n}\n\n/**\n * expression:\n * - \"*\": any\n * - \"name without dot\": top level: eg. \"busy\" or \"disabled\", this is equal to \"busy.*\"\n * - \"name with dot\": nested: eg. \"busy.self\" or \"busy.loading\"\n * - negate: \"!busy\", \"!busy.*\", \"!busy.save\"\n * - OR: \"busy.* || !disabled.*\"\n * - AND: \"busy.* && !disabled.*\"\n * - GROUP: \"(busy || disabled) && !readonly\"\n * - Shorted of multiple source of same base: \"busy{load,save}\", if one of load or save is true, the result is true\n */\nexport function parse(selector: string): SelectorAst {\n const cursor = new Cursor(selector)\n const res = expression(cursor.eatWs())\n if (res == null) {\n throw new Error(`invalid selector: ${selector}`)\n }\n\n if (!cursor.eof()) {\n throw new Error(`unexpected charcter: ${selector[res.end]} at ${res.end}`)\n }\n return res\n}\n\nfunction expression(cursor: Cursor) {\n return binary(cursor) || leftExpr(cursor)\n}\n\nfunction leftExpr(cursor: Cursor) {\n const begin = cursor.position\n const left = unary(cursor) || group(cursor) || load(cursor)\n if (left != null) {\n return left\n }\n cursor.set(begin)\n return null\n}\n\nfunction group(cursor: Cursor): SelectorAst | null {\n const begin = cursor.position\n if (cursor.is(\"(\")) {\n const expr = expression(cursor.inc().eatWs())\n if (cursor.eatWs().is(\")\")) {\n cursor.inc()\n return binary(cursor.eatWs(), expr) || expr\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction binary(cursor: Cursor, left: SelectorAst | null = null): SelectorAst | null {\n const begin = cursor.position\n left = left ?? leftExpr(cursor)\n if (left != null) {\n cursor.eatWs()\n const result = and(left, cursor) || or(left, cursor)\n if (result != null) {\n return result\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction and(left: SelectorAst, cursor: Cursor): AstAnd | null {\n if (cursor.is(\"&&\")) {\n cursor.inc(2)\n const right = expression(cursor.eatWs())\n if (right == null) {\n return null\n }\n return { type: TokenType.And, left, right, begin: left.begin, end: cursor.position }\n }\n return null\n}\n\nfunction or(left: SelectorAst, cursor: Cursor): AstOr | null {\n if (cursor.is(\"||\")) {\n cursor.inc(2)\n const right = expression(cursor.eatWs())\n if (right == null) {\n return null\n }\n return { type: TokenType.Or, left, right, begin: left.begin, end: cursor.position }\n }\n return null\n}\n\nfunction unary(cursor: Cursor): SelectorAst | null {\n const begin = cursor.position\n if (cursor.is(\"!\")) {\n const expr = leftExpr(cursor.inc().eatWs())\n if (expr != null) {\n return { type: TokenType.Negate, value: expr, begin, end: cursor.position }\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction load(cursor: Cursor): AstAny | AstName | AstSubscript | AstMultiSubscript | null {\n cursor.eatWs()\n const _any = any(cursor)\n if (_any != null) {\n return _any\n }\n\n const base = name(cursor)\n if (base == null) {\n return null\n }\n\n cursor.eatWs()\n const sub = loadSingle(cursor) || loadMulti(cursor)\n if (sub == null) {\n return base\n } else if (Array.isArray(sub)) {\n return {\n type: TokenType.MultiSubscript,\n base,\n subscripts: sub,\n begin: base.begin,\n end: sub[sub.length - 1].end\n }\n } else {\n return { type: TokenType.Subscript, base, subscript: sub, begin: base.begin, end: sub.end }\n }\n}\n\nfunction loadSingle(cursor: Cursor): AstAny | AstName | null {\n const begin = cursor.position\n if (cursor.is(\".\")) {\n cursor.inc().eatWs()\n const prop = any(cursor) || name(cursor)\n if (prop != null) {\n return prop\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction loadMulti(cursor: Cursor): AstName[] | null {\n const begin = cursor.position\n if (cursor.is(\"{\")) {\n const names = [] as AstName[]\n let entry: AstName | null = null\n\n cursor.inc().eatWs()\n while ((entry = name(cursor))) {\n names.push(entry)\n cursor.eatWs()\n\n if (cursor.is(\",\")) {\n cursor.inc()\n }\n\n cursor.eatWs()\n if (cursor.is(\"}\")) {\n if (names.length === 0) {\n throw new Error(\"expected name\")\n }\n cursor.inc()\n return names\n }\n }\n }\n cursor.set(begin)\n return null\n}\n\nfunction name(cursor: Cursor): AstName | null {\n const begin = cursor.position\n while (!cursor.eof() && isNameCh(cursor.ch)) {\n cursor.inc()\n }\n if (cursor.position > begin) {\n return { type: TokenType.Name, begin, end: cursor.position, value: cursor.data.slice(begin, cursor.position) }\n }\n cursor.set(begin)\n return null\n}\n\nfunction isNameCh(ch: string): boolean {\n return /[^.,{}()!\\s&|]/.test(ch)\n}\n\nfunction any(cursor: Cursor): AstAny | null {\n if (cursor.is(\"*\")) {\n const begin = cursor.position\n cursor.inc()\n return { type: TokenType.Any, begin, end: cursor.position }\n }\n return null\n}\n\nfunction _compile(ast: SelectorAst, parent?: string): CompiledSelector {\n switch (ast.type) {\n case TokenType.Any:\n return compileAny(ast, parent)\n case TokenType.Subscript:\n return compileSubscript(ast, parent)\n case TokenType.MultiSubscript:\n return compileMultiSubscript(ast, parent)\n case TokenType.Name:\n return compileName(ast, parent)\n case TokenType.Negate:\n return compileNot(_compile(ast.value, parent))\n case TokenType.Or:\n return compileOr(_compile(ast.left, parent), _compile(ast.right, parent))\n case TokenType.And:\n return compileAnd(_compile(ast.left, parent), _compile(ast.right, parent))\n }\n return () => false\n}\n\nfunction compileAny(ast: AstAny, parent?: string): CompiledSelector {\n if (parent) {\n return v => {\n if (v[parent] == null) {\n return false\n }\n return Object.values(v[parent]).some(v => v === true)\n }\n } else {\n return v => {\n for (const entry of Object.values(v)) {\n if (Object.values(entry).some(v => v === true)) {\n return true\n }\n }\n return false\n }\n }\n}\n\nfunction compileSubscript(ast: AstSubscript, parent?: string): CompiledSelector {\n parent ??= ast.base.value\n\n if (ast.subscript.type === TokenType.Any) {\n return compileAny(ast.subscript, parent)\n }\n if (ast.subscript.type === TokenType.Name) {\n return compileName(ast.subscript, parent)\n }\n\n return () => false\n}\n\nfunction compileMultiSubscript(ast: AstMultiSubscript, parent?: string): CompiledSelector {\n parent ??= ast.base.value\n const values = ast.subscripts.map(v =>\n compileSubscript(\n { type: TokenType.Subscript, base: ast.base, subscript: v, begin: v.begin, end: v.end },\n parent\n )\n )\n\n if (values.length === 1) {\n return values[0]\n } else {\n let result = values[0]\n for (let i = 1; i < values.length; i++) {\n result = compileOr(result, values[i])\n }\n return result\n }\n}\n\nfunction compileName(ast: AstName, parent?: string): CompiledSelector {\n if (parent) {\n return v => {\n if (v[parent] == null) {\n return false\n }\n return !!v[parent][ast.value]\n }\n } else {\n return v => {\n const many = v[ast.value]\n return many != null && Object.values(many).some(v => v === true)\n }\n }\n}\n\nfunction compileNot(compiled: CompiledSelector): CompiledSelector {\n return v => !compiled(v)\n}\n\nfunction compileOr(left: CompiledSelector, right: CompiledSelector): CompiledSelector {\n return v => left(v) || right(v)\n}\n\nfunction compileAnd(left: CompiledSelector, right: CompiledSelector): CompiledSelector {\n return v => left(v) && right(v)\n}\n","import { computed, Directive, inject, signal, untracked } from \"@angular/core\"\n\nimport { Observable } from \"rxjs\"\n\nimport { Mutable } from \"utility-types\"\n\nimport { deepClone } from \"@ngutil/common\"\n\nimport { compile as compileSelector } from \"./selector\"\n\n/**\n * {\n * busy: {\n * self: true,\n * parent: false,\n * disabled: false\n * }\n * }\n */\nexport type UiStateDetails = { readonly [key: string]: UiStateEntry }\n\nexport type UiStateEntry = { readonly [key: UiStateSource]: boolean }\n\nexport type UiStateValue = { readonly [key: string]: boolean }\n\nexport type UiStateSource = \"parent\" | \"self\" | string\n\nexport type UiStateSelector = string\n\n@Directive({})\nexport class UiState<N extends string = string, S extends UiStateSource = UiStateSource> {\n readonly #parent = inject(UiState, { skipSelf: true, optional: true })\n\n get root(): UiState {\n return this.#parent?.root || this\n }\n\n readonly #self = signal<UiStateDetails>({})\n\n readonly merged = computed<UiStateDetails>(() => {\n const parent = this.#parent?.merged()\n const self = this.#self()\n if (parent) {\n const result: Mutable<UiStateDetails> = deepClone(self)\n\n for (const [k, v] of Object.entries(parent)) {\n const parentIsTrue = Object.values(v).includes(true)\n const { self: _, ...parentWihtoutSelf } = v\n if (result[k] != null) {\n result[k] = {\n ...parentWihtoutSelf,\n ...result[k],\n parent: parentIsTrue\n }\n } else {\n result[k] = { ...parentWihtoutSelf, parent: parentIsTrue }\n }\n }\n\n return result\n } else {\n return self\n }\n })\n\n readonly value = computed<UiStateValue>(() => {\n const merged = this.merged()\n const result: Mutable<UiStateValue> = {}\n\n for (const [k, v] of Object.entries(merged)) {\n result[k] = Object.values(v).includes(true)\n }\n\n return result\n })\n\n readonly inertSelector = signal(\"busy || disabled\")\n\n set(name: N, value: boolean, source: S = \"self\" as S) {\n if (source === \"parent\") {\n console.error(\"can't set parent state\")\n return\n }\n\n const current = untracked(this.#self)\n const entry = current[name] || {}\n\n if (entry[source] !== value) {\n this.#self.set({ ...current, [name]: { ...entry, [source]: value } })\n }\n\n // TODO: maybe some option to propagate to root\n // const root = this.root\n // if (source !== \"self\" && root !== this) {\n // root.set(name, value, source)\n // }\n }\n\n is(selector: UiStateSelector = \"*\"): boolean {\n return compileSelector(selector)(this.merged())\n }\n\n intercept(name: N, source: S) {\n return <S>(src: Observable<S>) => this.wrap(src, name, source)\n }\n\n wrap<T>(observable: Observable<T>, name: N, source: S): Observable<T> {\n return new Observable<T>(subscriber => {\n this.set(name, true, source)\n subscriber.add(() => this.set(name, false, source))\n return observable.subscribe(subscriber)\n })\n }\n\n isInert() {\n return this.is(this.inertSelector())\n }\n}\n","import { computed, Directive, effect, inject, Signal } from \"@angular/core\"\n\nimport { Observable } from \"rxjs\"\n\nimport { coerceBoolAttr } from \"@ngutil/common\"\n\nimport { UiState } from \"./ui-state\"\n\nexport const NOTSET: any = Symbol(\"NOTSET\")\n\n@Directive()\nexport abstract class AbstractUiState<N extends string> {\n readonly state: UiState<N> = inject(UiState)\n\n abstract readonly input: Signal<boolean>\n abstract readonly when: Signal<string>\n\n readonly yes = computed(() => {\n const when = this.when()\n if (when !== NOTSET) {\n // TODO: add prefix if only provide loading, or simething simple selector\n return this.state.is(`${this.name}.self || (${when})`)\n }\n return this.state.is(this.name)\n })\n readonly no = computed(() => !this.yes())\n\n constructor(readonly name: N) {\n effect(\n () => {\n const input = this.input()\n if (input !== NOTSET) {\n this.state.set(name, !!coerceBoolAttr(input))\n }\n },\n { allowSignalWrites: true }\n )\n }\n\n set(value: boolean, source: string) {\n this.state.set(this.name, value, source)\n }\n\n intercept(source: string) {\n return this.state.intercept(this.name, source)\n }\n\n wrap<T>(observable: Observable<T>, source: string): Observable<T> {\n return this.state.wrap(observable, this.name, source)\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuBusy], [nuBusyWhen]\",\n exportAs: \"busy\",\n host: {\n \"[attr.aria-busy]\": \"yes() ? 'true' : 'false'\",\n \"[attr.inert]\": \"state.isInert() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class BusyDirective extends AbstractUiState<\"busy\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuBusy\" })\n readonly when = input(NOTSET as string, { alias: \"nuBusyWhen\" })\n\n constructor() {\n super(\"busy\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuDirty], [nuDirtyWhen]\",\n exportAs: \"dirty\",\n host: {\n \"[attr.dirty]\": \"yes() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class DirtyDirective extends AbstractUiState<\"dirty\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuDirty\" })\n readonly when = input(NOTSET as string, { alias: \"nuDirtyWhen\" })\n\n constructor() {\n super(\"dirty\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuDisabled], [nuDisabledWhen]\",\n exportAs: \"disabled\",\n host: {\n \"[attr.aria-disabled]\": \"yes() ? 'true' : 'false'\",\n \"[attr.disabled]\": \"yes() ? '' : null\",\n \"[attr.inert]\": \"state.isInert() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class DisabledDirective extends AbstractUiState<\"disabled\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuDisabled\" })\n readonly when = input(NOTSET as string, { alias: \"nuDisabledWhen\" })\n\n constructor() {\n super(\"disabled\")\n }\n}\n","import { Directive, input } from \"@angular/core\"\n\nimport { AbstractUiState, NOTSET } from \"./abstract\"\nimport { UiState } from \"./ui-state\"\n\n@Directive({\n selector: \"[nuReadonly], [nuReadonlyWhen]\",\n exportAs: \"readonly\",\n host: {\n \"[attr.aria-readonly]\": \"yes() ? 'true' : 'false'\",\n \"[attr.readonly]\": \"yes() ? '' : null\"\n },\n providers: [UiState]\n})\nexport class ReadonlyDirective extends AbstractUiState<\"readonly\"> {\n readonly input = input(NOTSET as boolean, { alias: \"nuReadonly\" })\n readonly when = input(NOTSET as string, { alias: \"nuReadonlyWhen\" })\n\n constructor() {\n super(\"readonly\")\n }\n}\n","import { Directive } from \"@angular/core\"\nimport { toSignal } from \"@angular/core/rxjs-interop\"\n\nimport { animationFrames, map, Observable, of, scan, shareReplay, startWith, Subject, switchMap, takeWhile } from \"rxjs\"\n\nimport { clamp } from \"es-toolkit\"\nimport { Mutable } from \"utility-types\"\n\nimport { DeepReadonly } from \"@ngutil/common\"\n\nexport interface ProgressCommon {\n readonly message?: string\n readonly [other: string]: unknown\n}\n\nexport interface ProgressLax {\n readonly type: \"lax\"\n readonly predictedTime: number\n // readonly updateInterval: number\n}\n\nexport interface ProgressFix {\n readonly type: \"fix\"\n readonly percent: number\n}\n\nexport type Progress = (ProgressLax | ProgressFix) & ProgressCommon\n\nexport interface ProgressSegmentInput {\n readonly name: string\n readonly distribution?: number\n readonly progress: DeepReadonly<Progress>\n}\n\nexport interface ProgressSegement extends ProgressSegmentInput {\n ratio: number\n share: number\n done: boolean\n laxBegin?: number\n}\n\nexport type ProgressSegements = { [key: string]: ProgressSegement }\n\nconst SEGMENT_REGISTER: Progress = { type: \"fix\", percent: 0 }\nconst SEGMENT_COMPLETE: Progress = { type: \"fix\", percent: 1 }\n\n@Directive()\nexport class ProgressState {\n readonly #segments: { [key: string]: ProgressSegmentRef } = {}\n\n readonly #input = new Subject<ProgressSegmentInput>()\n\n readonly #state: Observable<ProgressSegements> = this.#input.pipe(\n startWith(null),\n scan((state, input) => {\n if (Object.keys(state).length === 0) {\n state = this.#initialState()\n }\n\n if (input == null) {\n return state\n }\n\n let current = state[input.name] ?? { ratio: 0, share: 0, done: false }\n current = { ...current, ...input }\n\n if (input.progress.type === \"lax\") {\n delete current.laxBegin\n current.done = false\n }\n\n if (input.progress.type === \"fix\" && input.progress.percent < 1) {\n current.done = false\n }\n\n return { ...state, [input.name]: { ...current, ...input } }\n }, {} as ProgressSegements),\n switchMap(state => {\n const slist = Object.values(state) as Array<Mutable<ProgressSegement>>\n const min = slist.reduce((min, current) => Math.min(min, current.distribution || 0), Infinity) || 1\n const totalDistribution = slist.reduce((total, current) => total + (current.distribution || min), 0)\n const hasLax = slist.some(segment => segment.progress.type === \"lax\")\n const trigger = hasLax ? animationFrames() : of({ timestamp: performance.now() })\n\n return trigger.pipe(\n map(({ timestamp }) => {\n for (const segment of slist) {\n if (segment.distribution == null) {\n segment.distribution = min\n }\n segment.ratio = segment.distribution / totalDistribution + 0.0001\n\n let percent: number\n\n if (segment.progress.type === \"lax\") {\n if (segment.laxBegin == null) {\n segment.laxBegin = timestamp\n }\n\n percent = (timestamp - segment.laxBegin) / segment.progress.predictedTime\n if (percent >= 0.8) {\n const final = (timestamp - segment.laxBegin) / (segment.progress.predictedTime * 50)\n percent = 0.8 + Math.log1p(final)\n }\n } else {\n delete segment.laxBegin\n percent = clamp(segment.progress.percent, 0, 1)\n }\n\n segment.share = percent * segment.ratio\n segment.done = percent >= 1\n }\n\n return state\n }),\n takeWhile(state => Object.values(state).some(segment => !segment.done), true)\n )\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly value$: Observable<DeepReadonly<ProgressSegements>> = this.#state\n readonly value = toSignal(this.value$)\n\n readonly percent$: Observable<number> = this.value$.pipe(\n map(value => {\n if (value == null) {\n return 0\n }\n\n return clamp(\n Object.values(value).reduce((a, b) => a + b.share, 0),\n 0,\n 1\n )\n }),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n\n readonly percent = toSignal(this.percent$)\n\n segment(name: string, distribution: number = 1): ProgressSegmentRef {\n const segment =\n this.#segments[name] ?? (this.#segments[name] = new ProgressSegmentRef(this.#input, name, distribution))\n segment.next(SEGMENT_REGISTER)\n return segment\n }\n\n connect(state: ProgressState, name: string, distribution?: number): Observable<void> {\n return new Observable(() => {\n const segment = this.segment(name, distribution)\n return state.percent$.subscribe(percent => {\n segment.next({ type: \"fix\", percent })\n })\n })\n }\n\n #initialState() {\n return Object.values(this.#segments).reduce((res, segment) => {\n if (segment.value) {\n res[segment.name] = {\n name: segment.name,\n distribution: segment.distribution,\n progress: segment.value,\n ratio: 0,\n share: 0,\n done: false\n }\n }\n return res\n }, {} as ProgressSegements)\n }\n}\n\nexport class ProgressSegmentRef {\n readonly #subject: Subject<ProgressSegmentInput>\n\n set distribution(value: number | undefined) {\n if (this.#distribution !== value) {\n this.#distribution = value\n if (this.#value != null) {\n this.#next(this.#value)\n }\n }\n }\n\n get distribution() {\n return this.#distribution\n }\n #distribution?: number\n\n get value() {\n return this.#value\n }\n #value?: Progress\n\n constructor(\n subject: Subject<ProgressSegmentInput>,\n public readonly name: string,\n distribution?: number\n ) {\n this.#subject = subject\n this.#distribution = distribution\n }\n\n next(progress: Progress) {\n return this.#next(progress)\n }\n\n complete() {\n return this.#next(SEGMENT_COMPLETE)\n }\n\n #next(progress: Progress) {\n this.#value = progress\n this.#subject.next({ name: this.name, distribution: this.distribution, progress })\n return this\n }\n}\n","import { NgModule } from \"@angular/core\"\n\nimport { BusyDirective } from \"./busy.directive\"\nimport { DirtyDirective } from \"./dirty.directive\"\nimport { DisabledDirective } from \"./disabled.directive\"\nimport { ReadonlyDirective } from \"./readonly.directive\"\n\nexport * from \"./abstract\"\nexport * from \"./busy.directive\"\nexport * from \"./disabled.directive\"\nexport * from \"./progress-state\"\nexport * from \"./readonly.directive\"\nexport * from \"./dirty.directive\"\nexport * from \"./ui-state\"\n\nconst entries = [BusyDirective, DirtyDirective, DisabledDirective, ReadonlyDirective]\n\n@NgModule({\n imports: entries,\n exports: entries\n})\nexport class UiStateModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["EVENT_OPTIONS","_a","i1.FocusState","compileSelector"],"mappings":"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"}
@@ -21,11 +21,11 @@ export interface GesturePointer {
21
21
  };
22
22
  }
23
23
  export type GestureOrigin = MouseEvent | TouchEvent;
24
- export declare const enum GesturePointerType {
24
+ export declare enum GesturePointerType {
25
25
  Mouse = "mouse",
26
26
  Touch = "touch"
27
27
  }
28
- export declare const enum GesturePhase {
28
+ export declare enum GesturePhase {
29
29
  Start = "start",
30
30
  Moving = "moving",
31
31
  End = "end"
@@ -1,7 +1,7 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { FunctionKeys, Mutable } from "utility-types";
3
3
  import { GestureDetail, GesturePointerType } from "./gesture-event";
4
- export declare const enum GestureCaptureState {
4
+ export declare enum GestureCaptureState {
5
5
  Unchecked = 0,
6
6
  Pending = 1,
7
7
  Skip = 2,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngutil/aria",
3
- "version": "0.0.100",
3
+ "version": "0.0.101",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "19.2.11",
6
6
  "@angular/common": "19.2.8",
@@ -9,8 +9,8 @@
9
9
  "rxjs": "^7.8.1",
10
10
  "tabbable": "^6.2.0",
11
11
  "utility-types": "^3.11.0",
12
- "@ngutil/common": "0.0.100",
13
- "@ngutil/style": "0.0.100"
12
+ "@ngutil/common": "0.0.101",
13
+ "@ngutil/style": "0.0.101"
14
14
  },
15
15
  "publishConfig": {
16
16
  "access": "public",