{"version":3,"file":"ngneat-hotkeys.mjs","sources":["../../../../projects/ngneat/hotkeys/src/lib/utils/array.ts","../../../../projects/ngneat/hotkeys/src/lib/utils/platform.ts","../../../../projects/ngneat/hotkeys/src/lib/hotkeys.service.ts","../../../../projects/ngneat/hotkeys/src/lib/hotkeys.directive.ts","../../../../projects/ngneat/hotkeys/src/lib/hotkeys-shortcut.pipe.ts","../../../../projects/ngneat/hotkeys/src/lib/hotkeys-help/hotkeys-help.component.ts","../../../../projects/ngneat/hotkeys/src/lib/hotkeys-help/hotkeys-help.component.html","../../../../projects/ngneat/hotkeys/src/ngneat-hotkeys.ts"],"sourcesContent":["export function coerceArray(params: any | any[]) {\n  return Array.isArray(params) ? params : [params];\n}\n","export type Platform = 'apple' | 'pc';\n\nexport function hostPlatform(): Platform {\n  const appleDevices = ['Mac', 'iPhone', 'iPad'];\n  return appleDevices.some((d) => navigator.userAgent.includes(d)) ? 'apple' : 'pc';\n}\n\nexport function normalizeKeys(keys: string, platform: Platform): string {\n  const transformMap = {\n    up: 'ArrowUp',\n    down: 'ArrowDown',\n    left: 'ArrowLeft',\n    right: 'ArrowRight',\n  };\n\n  function transform(key: string): string {\n    if (platform === 'pc' && key === 'meta') {\n      key = 'control';\n    }\n\n    if (key in transformMap) {\n      key = transformMap[key];\n    }\n\n    return key;\n  }\n\n  return keys\n    .toLowerCase()\n    .split('>')\n    .map((s) => s.split('.').map(transform).join('.'))\n    .join('>');\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, Inject, Injectable, signal } from '@angular/core';\nimport { EventManager } from '@angular/platform-browser';\nimport { EMPTY, fromEvent, Observable, of, Subject, Subscriber, Subscription } from 'rxjs';\nimport { debounceTime, filter, finalize, mergeMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { coerceArray } from './utils/array';\nimport { hostPlatform, normalizeKeys } from './utils/platform';\n\nexport type AllowInElement = 'INPUT' | 'TEXTAREA' | 'SELECT' | 'CONTENTEDITABLE';\nexport type Options = {\n  group: string;\n  element: HTMLElement;\n  trigger: 'keydown' | 'keyup';\n  allowIn: AllowInElement[];\n  description: string;\n  showInHelpMenu: boolean;\n  preventDefault: boolean;\n  global?: boolean;\n};\n\nexport interface HotkeyGroup {\n  group: string;\n  hotkeys: { keys: string; description: string }[];\n}\n\nexport type Hotkey = Partial<Options> & { keys: string };\nexport type HotkeyCallback = (event: KeyboardEvent | Hotkey, keys: string, target: HTMLElement) => void;\n\ninterface HotkeySummary {\n  hotkey: Hotkey;\n  subject: Subject<Hotkey>;\n}\n\ninterface SequenceSummary {\n  subscription: Subscription;\n  observer: Observable<Hotkey>;\n  hotkeyMap: Map<string, HotkeySummary>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class HotkeysService {\n  private readonly hotkeys = new Map<string, Hotkey>();\n  private readonly dispose = new Subject<string>();\n  private readonly defaults: Options = {\n    trigger: 'keydown',\n    allowIn: [],\n    element: this.document.documentElement,\n    group: undefined,\n    description: undefined,\n    showInHelpMenu: true,\n    preventDefault: true,\n  };\n  private callbacks: HotkeyCallback[] = [];\n  private sequenceMaps = new Map<HTMLElement, SequenceSummary>();\n  private sequenceDebounce: number = 250;\n\n  private _isActive = signal(true);\n  // readonly interface for the isActive value\n  isActive = computed(() => this._isActive());\n\n  constructor(\n    private eventManager: EventManager,\n    @Inject(DOCUMENT) private document: Document,\n  ) {}\n\n  getHotkeys(): Hotkey[] {\n    const sequenceKeys = Array.from(this.sequenceMaps.values())\n      .map((s) => [s.hotkeyMap].reduce((_acc, val) => [...val.values()], []))\n      .reduce((_x, y) => y, [])\n      .map((h) => h.hotkey);\n\n    return Array.from(this.hotkeys.values()).concat(sequenceKeys);\n  }\n\n  getShortcuts(): HotkeyGroup[] {\n    const hotkeys = this.getHotkeys();\n    const groups: HotkeyGroup[] = [];\n\n    for (const hotkey of hotkeys) {\n      if (!hotkey.showInHelpMenu) {\n        continue;\n      }\n\n      let group = groups.find((g) => g.group === hotkey.group);\n      if (!group) {\n        group = { group: hotkey.group, hotkeys: [] };\n        groups.push(group);\n      }\n\n      const normalizedKeys = normalizeKeys(hotkey.keys, hostPlatform());\n      group.hotkeys.push({ keys: normalizedKeys, description: hotkey.description });\n    }\n\n    return groups;\n  }\n\n  addSequenceShortcut(options: Hotkey): Observable<Hotkey> {\n    const getSequenceObserver = (element: HTMLElement, eventName: string) => {\n      let sequence = '';\n      return fromEvent<KeyboardEvent>(element, eventName).pipe(\n        tap(\n          (e) =>\n            (sequence = `${sequence}${sequence ? '>' : ''}${e.ctrlKey ? 'control.' : ''}${e.altKey ? 'alt.' : ''}${\n              e.shiftKey ? 'shift.' : ''\n            }${e.key}`),\n        ),\n        debounceTime(this.sequenceDebounce),\n        mergeMap(() => {\n          const resultSequence = sequence;\n          sequence = '';\n          const summary = this.sequenceMaps.get(element);\n          if (summary.hotkeyMap.has(resultSequence)) {\n            const hotkeySummary = summary.hotkeyMap.get(resultSequence);\n            hotkeySummary.subject.next(hotkeySummary.hotkey);\n            return of(hotkeySummary.hotkey);\n          } else {\n            return EMPTY;\n          }\n        }),\n      );\n    };\n\n    const mergedOptions = { ...this.defaults, ...options };\n    let normalizedKeys = normalizeKeys(mergedOptions.keys, hostPlatform());\n\n    const getSequenceCompleteObserver = (): Observable<Hotkey> => {\n      const hotkeySummary = {\n        subject: new Subject<Hotkey>(),\n        hotkey: mergedOptions,\n      };\n\n      const hotkeyElement = mergedOptions.global ? this.document.documentElement : mergedOptions.element;\n\n      if (this.sequenceMaps.has(hotkeyElement)) {\n        const sequenceSummary = this.sequenceMaps.get(hotkeyElement);\n\n        if (sequenceSummary.hotkeyMap.has(normalizedKeys)) {\n          console.error('Duplicated shortcut');\n          return of(null);\n        }\n\n        sequenceSummary.hotkeyMap.set(normalizedKeys, hotkeySummary);\n      } else {\n        const observer = getSequenceObserver(hotkeyElement, mergedOptions.trigger);\n        const subscription = observer.subscribe();\n\n        const hotkeyMap = new Map<string, HotkeySummary>([[normalizedKeys, hotkeySummary]]);\n        const sequenceSummary = { subscription, observer, hotkeyMap };\n        this.sequenceMaps.set(hotkeyElement, sequenceSummary);\n      }\n\n      return hotkeySummary.subject.asObservable();\n    };\n\n    return getSequenceCompleteObserver().pipe(\n      takeUntil<Hotkey>(this.dispose.pipe(filter((v) => v === normalizedKeys))),\n      filter((hotkey) => !this.targetIsExcluded(hotkey.allowIn)),\n      filter((hotkey) => this._isActive()),\n      tap((hotkey) => {\n        this.callbacks.forEach((cb) => cb(hotkey, normalizedKeys, hotkey.element));\n      }),\n      finalize(() => this.removeShortcuts(normalizedKeys)),\n    );\n  }\n\n  addShortcut(options: Hotkey): Observable<KeyboardEvent> {\n    const mergedOptions = { ...this.defaults, ...options };\n    const normalizedKeys = normalizeKeys(mergedOptions.keys, hostPlatform());\n\n    if (this.hotkeys.has(normalizedKeys)) {\n      console.error('Duplicated shortcut');\n      return of(null);\n    }\n\n    this.hotkeys.set(normalizedKeys, mergedOptions);\n    const event = `${mergedOptions.trigger}.${normalizedKeys}`;\n\n    return new Observable((observer) => {\n      const handler = (e: KeyboardEvent) => {\n        const hotkey = this.hotkeys.get(normalizedKeys);\n        const skipShortcutTrigger = this.targetIsExcluded(hotkey.allowIn);\n\n        if (skipShortcutTrigger) {\n          return;\n        }\n\n        if (mergedOptions.preventDefault) {\n          e.preventDefault();\n        }\n\n        if (this._isActive()) {\n          this.callbacks.forEach((cb) => cb(e, normalizedKeys, hotkey.element));\n          observer.next(e);\n        }\n      };\n\n      const dispose = this.eventManager.addEventListener(\n        mergedOptions.global ? this.document.documentElement : mergedOptions.element,\n        event,\n        handler,\n      );\n\n      return () => {\n        this.hotkeys.delete(normalizedKeys);\n        dispose();\n      };\n    }).pipe(\n      filter(() => this._isActive()),\n      takeUntil<KeyboardEvent>(this.dispose.pipe(filter((v) => v === normalizedKeys))),\n    );\n  }\n\n  removeShortcuts(hotkeys: string | string[]): void {\n    const coercedHotkeys = coerceArray(hotkeys).map((hotkey) => normalizeKeys(hotkey, hostPlatform()));\n    coercedHotkeys.forEach((hotkey) => {\n      this.hotkeys.delete(hotkey);\n      this.dispose.next(hotkey);\n\n      this.sequenceMaps.forEach((v, k) => {\n        const summary = v.hotkeyMap.get(hotkey);\n        if (summary) {\n          summary.subject.observers\n            .filter((o: Subscriber<Hotkey>) => !o.closed)\n            .forEach((o: Subscriber<Hotkey>) => o.unsubscribe());\n\n          v.hotkeyMap.delete(hotkey);\n        }\n        if (v.hotkeyMap.size === 0) {\n          v.subscription.unsubscribe();\n          this.sequenceMaps.delete(k);\n        }\n      });\n    });\n  }\n\n  setSequenceDebounce(debounce: number): void {\n    this.sequenceDebounce = debounce;\n  }\n\n  onShortcut(callback: HotkeyCallback): () => void {\n    this.callbacks.push(callback);\n\n    return () => (this.callbacks = this.callbacks.filter((cb) => cb !== callback));\n  }\n\n  registerHelpModal(openHelpModalFn: () => void, helpShortcut: string = '') {\n    this.addShortcut({ keys: helpShortcut || 'shift.?', showInHelpMenu: false, preventDefault: false }).subscribe(\n      (e) => {\n        const skipMenu =\n          /^(input|textarea|select)$/i.test(document.activeElement.nodeName) ||\n          (e.target as HTMLElement).isContentEditable;\n\n        if (!skipMenu && this.hotkeys.size) {\n          openHelpModalFn();\n        }\n      },\n    );\n  }\n\n  private targetIsExcluded(allowIn?: AllowInElement[]) {\n    const activeElement = this.document.activeElement;\n    const elementName = activeElement.nodeName;\n    const elementIsContentEditable = (activeElement as HTMLElement).isContentEditable;\n    let isExcluded = ['INPUT', 'SELECT', 'TEXTAREA'].includes(elementName) || elementIsContentEditable;\n\n    if (isExcluded && allowIn?.length) {\n      for (let t of allowIn) {\n        if (activeElement.nodeName === t || (t === 'CONTENTEDITABLE' && elementIsContentEditable)) {\n          isExcluded = false;\n          break;\n        }\n      }\n    }\n\n    return isExcluded;\n  }\n\n  pause() {\n    this._isActive.set(false);\n  }\n\n  resume() {\n    this._isActive.set(true);\n  }\n}\n","import {\n  computed,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { merge, Subscription } from 'rxjs';\nimport { mergeAll } from 'rxjs/operators';\n\nimport { Hotkey, HotkeysService, Options as ServiceOptions } from './hotkeys.service';\nimport { coerceArray } from './utils/array';\n\ntype Options = Omit<ServiceOptions, 'group' | 'element' | 'description'>;\n\n@Directive({\n  standalone: true,\n  selector: '[hotkeys]',\n})\nexport class HotkeysDirective implements OnChanges, OnDestroy {\n  private hotkeysService = inject(HotkeysService);\n  private elementRef = inject(ElementRef);\n  private subscription: Subscription;\n\n  hotkeys = input<string>();\n  // allows the user to set the value by just adding the attribute to the element\n  isSequence = input(false, {\n    transform: (value: boolean | string) => (typeof value === 'string' ? value === '' || value === 'true' : value),\n  });\n  isGlobal = input(false, {\n    transform: (value: boolean | string) => (typeof value === 'string' ? value === '' || value === 'true' : value),\n  });\n  hotkeysGroup = input<string>();\n  hotkeysOptions = input<Partial<Options>>({});\n  hotkeysDescription = input<string>();\n  @Output() hotkey = new EventEmitter<KeyboardEvent | Hotkey>();\n\n  private _hotkey = computed(() => ({\n    keys: this.hotkeys(),\n    group: this.hotkeysGroup(),\n    description: this.hotkeysDescription(),\n    global: this.isGlobal(),\n    ...this.hotkeysOptions(),\n  }));\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.deleteHotkeys();\n    if (!this.hotkeys) {\n      return;\n    }\n\n    this.setHotkeys(this._hotkey());\n  }\n\n  ngOnDestroy() {\n    this.deleteHotkeys();\n  }\n\n  private deleteHotkeys() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n    this.subscription = null;\n  }\n\n  private setHotkeys(hotkeys: Hotkey | Hotkey[]) {\n    const coercedHotkeys = coerceArray(hotkeys);\n    this.subscription = merge(\n      coercedHotkeys.map((hotkey) => {\n        return this.isSequence()\n          ? this.hotkeysService.addSequenceShortcut({ ...hotkey, element: this.elementRef.nativeElement })\n          : this.hotkeysService.addShortcut({ ...hotkey, element: this.elementRef.nativeElement });\n      }),\n    )\n      .pipe(mergeAll())\n      .subscribe((e) => this.hotkey.next(e));\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { hostPlatform } from './utils/platform';\nimport { CustomAliases } from './utils/alias';\n\nconst symbols = {\n  shift: '&#8679;',\n  backspace: '&#9003;',\n  tab: '&#8677;',\n  space: '&#9251;',\n  left: '&#8592;',\n  right: '&#8594;',\n  up: '&#8593;',\n  down: '&#8595;',\n  enter: '&#8996;',\n};\n\nconst appleSymbols = {\n  meta: '&#8984;',\n  altleft: '&#8997;',\n  control: '&#8963;',\n  escape: '&#9099;',\n};\n\nconst pcSymbols = {\n  control: 'Ctrl',\n  altleft: 'Alt',\n  escape: 'Esc',\n};\n\n@Pipe({\n  standalone: true,\n  name: 'hotkeysShortcut',\n})\nexport class HotkeysShortcutPipe implements PipeTransform {\n  private readonly symbols;\n  constructor() {\n    const platform = hostPlatform();\n    this.symbols = this.getPlatformSymbols(platform);\n  }\n\n  transform(value: string, dotSeparator = ' + ', thenSeparator = ' then ', aliases: CustomAliases = {}): any {\n    if (!value) {\n      return '';\n    }\n    return value\n      .split('>')\n      .map((s) =>\n        s\n          .split('.')\n          .map((c) => c.toLowerCase())\n          .map((c) => aliases[c] || this.symbols[c] || c)\n          .join(dotSeparator),\n      )\n      .join(thenSeparator);\n  }\n\n  private getPlatformSymbols(platform): any {\n    return platform === 'apple' ? { ...symbols, ...appleSymbols } : { ...symbols, ...pcSymbols };\n  }\n}\n","import { Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { HotkeysService } from '../hotkeys.service';\nimport { HotkeysShortcutPipe } from '../hotkeys-shortcut.pipe';\n\n@Component({\n  standalone: true,\n  imports: [HotkeysShortcutPipe],\n  templateUrl: './hotkeys-help.component.html',\n  styleUrls: ['./hotkeys-help.component.scss'],\n})\nexport class HotkeysHelpComponent {\n  private hotkeysService = inject(HotkeysService);\n  @Input() title = 'Available Shortcuts';\n  @Output() readonly dismiss = new EventEmitter();\n  hotkeys = this.hotkeysService.getShortcuts();\n\n  handleDismiss() {\n    this.dismiss.emit();\n  }\n}\n","<div class=\"modal-header\">\n  @if (title) {\n    <div class=\"hotkeys-help-header\">\n      <span class=\"hotkeys-help-header-title\">{{ title }}</span>\n    </div>\n  }\n  <button type=\"button\" class=\"hotkeys-help-header-dismiss-button\" (click)=\"handleDismiss()\">&#x2715;</button>\n</div>\n<div class=\"modal-body preview-modal-body\">\n  @for (hotkeyGroup of hotkeys; track $index) {\n    <table class=\"hotkeys-table-help\">\n      @if (hotkeyGroup.group) {\n        <thead>\n          <tr>\n            <th class=\"hotkeys-table-help-group\" colspan=\"2\">{{ hotkeyGroup.group }}</th>\n          </tr>\n        </thead>\n      }\n      <tbody>\n        @for (hotkey of hotkeyGroup.hotkeys; track hotkey) {\n          <tr class=\"hotkeys-table-help-shortcut\">\n            <td class=\"hotkeys-table-help-shortcut-description\">{{ hotkey.description }}</td>\n            <td class=\"hotkeys-table-help-shortcut-keys\">\n              <kbd [innerHTML]=\"hotkey.keys | hotkeysShortcut\"></kbd>\n            </td>\n          </tr>\n        }\n      </tbody>\n    </table>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}