{"version":3,"file":"zaybu-focusly.mjs","sources":["../../../projects/focusly/src/lib/models/focus-item.model.ts","../../../projects/focusly/src/lib/models/keymap/models/key-chord.model.ts","../../../projects/focusly/src/lib/models/keymap/models/key-press-action.model.ts","../../../projects/focusly/src/lib/injection-tokens/keymap.token.ts","../../../projects/focusly/src/lib/services/focusly.service.ts","../../../projects/focusly/src/lib/directives/focusly-group-host.directive.ts","../../../projects/focusly/src/lib/directives/focusly-focus.directive.ts","../../../projects/focusly/src/lib/directives/focusly.directive.ts","../../../projects/focusly/src/lib/directives/focusly-shortcut.directive.ts","../../../projects/focusly/src/lib/directives/focusly-shortcut-host.directive.ts","../../../projects/focusly/src/lib/helpers/is-element-visible.ts","../../../projects/focusly/src/lib/components/focusly-listener/focusly-listener.component.ts","../../../projects/focusly/src/lib/components/focusly-listener/focusly-listener.component.html","../../../projects/focusly/src/lib/components/focusly-subscriber/focusly-subscriber.component.ts","../../../projects/focusly/src/lib/models/focus-service-api.model.ts","../../../projects/focusly/src/lib/components/focusly-enter-key-subscriber/focusly-enter-key-subscriber.component.ts","../../../projects/focusly/src/lib/components/focusly-enter-key-subscriber/focusly-enter-key-subscriber.component.html","../../../projects/focusly/src/zaybu-focusly.ts"],"sourcesContent":["export type FocuslyItem = FocuslyTargetItem | FocuslyCellItem;\n\nexport type FocuslyTargetItem = {\n  id: string;\n  groupId: number;\n};\n\nexport type FocuslyCellItem = FocuslyTargetItem & {\n  row: number;\n  column: number;\n};\n\nexport type FocusRequest = {\n  requestId: string;\n  id: string;\n  groupId?: number;\n  preventScroll?: boolean;\n  // optional: whether to keep retrying until visible\n  waitForVisible?: boolean;\n  timeoutMs?: number;\n};\n\nexport type FocusAck = {\n  requestId: string;\n  id: string;\n  groupId?: number;\n  success: boolean;\n  reason?: 'not-found' | 'not-visible' | 'not-focusable' | 'timeout';\n};\n\nexport function isCellItem(x: FocuslyItem): x is FocuslyCellItem {\n  return (x as any).row != null && (x as any).column != null;\n}\n","import { FocuslyKeyChord } from './key-press-action.model';\n\nconst MOD_ALIASES: Record<string, keyof KeyChordConfig> = {\n  alt: 'alt',\n  option: 'alt',\n\n  ctrl: 'ctrl',\n  control: 'ctrl',\n  ctl: 'ctrl',\n\n  shift: 'shift',\n\n  meta: 'meta',\n  cmd: 'meta',\n  command: 'meta',\n};\n\nexport type ModifierKey = 'alt' | 'ctrl' | 'shift' | 'meta';\n\nexport interface KeyChordConfig {\n  key: string;\n  alt?: boolean;\n  ctrl?: boolean;\n  shift?: boolean;\n  meta?: boolean;\n}\n\n/**\n * Canonicalise a key chord:\n * - modifiers in order: alt, shift, ctrl, meta\n * - key lowercased\n * - joined by '+', e.g. \"ctrl+arrowup\"\n */\nexport function canonicaliseKeyChord(config: KeyChordConfig): string {\n  const parts: string[] = [];\n\n  if (config.alt) parts.push('alt');\n  if (config.shift) parts.push('shift');\n  if (config.ctrl) parts.push('ctrl');\n  if (config.meta) parts.push('meta');\n\n  parts.push((config.key ?? '').toLowerCase());\n\n  return parts.join('+');\n}\n\nexport function createKeyChord(config: KeyChordConfig): string;\nexport function createKeyChord(...configs: KeyChordConfig[]): FocuslyKeyChord;\nexport function createKeyChord(...configs: KeyChordConfig[]): FocuslyKeyChord {\n  if (configs.length === 0) {\n    throw new Error('createKeyChord requires at least one KeyChordConfig');\n  }\n\n  const chords = configs.map(canonicaliseKeyChord);\n\n  const deduped = Array.from(new Set(chords));\n\n  return deduped.length === 1 ? deduped[0] : deduped;\n}\n\nexport function parseKeyChord(raw: string): KeyChordConfig | null {\n  const cleaned = (raw ?? '').trim().toLowerCase().replace(/\\s+/g, '');\n  if (!cleaned) return null;\n\n  const parts = cleaned.split('+').filter(Boolean);\n  if (!parts.length) return null;\n\n  const cfg: KeyChordConfig = { key: '' };\n\n  for (const p of parts) {\n    const mod = MOD_ALIASES[p];\n    if (mod) {\n      (cfg as any)[mod] = true;\n    } else {\n      // last non-modifier wins\n      cfg.key = p;\n    }\n  }\n\n  if (!cfg.key) return null;\n  return cfg;\n}\n\nexport function normaliseKeyChordString(raw: string): string {\n  const cfg = parseKeyChord(raw);\n  return cfg ? canonicaliseKeyChord(cfg) : '';\n}\n\nexport function chordFromKeyboardEvent(e: KeyboardEvent): string {\n  // IMPORTANT: use e.key directly; do not infer shift from uppercase letters.\n  // Shift should be represented by e.shiftKey.\n  const cfg: KeyChordConfig = {\n    key: e.key,\n    alt: e.altKey,\n    ctrl: e.ctrlKey,\n    shift: e.shiftKey,\n    meta: e.metaKey,\n  };\n\n  return canonicaliseKeyChord(cfg);\n}\n","import { createKeyChord } from './key-chord.model';\n\nexport type KeyPressAction =\n  | 'up'\n  | 'down'\n  | 'left'\n  | 'right'\n  | 'home'\n  | 'end'\n  | 'pageUp'\n  | 'pageDown';\n\nexport type FocuslyKeyChord = string | string[];\n\nexport type FocuslyKeyMap = Partial<Record<KeyPressAction, FocuslyKeyChord>>;\n\nexport const DEFAULT_FOCUSLY_KEYMAP: FocuslyKeyMap = {\n  down: createKeyChord({ alt: true, key: 'ArrowDown' }),\n  up: createKeyChord({ alt: true, key: 'ArrowUp' }),\n  left: createKeyChord({ alt: true, key: 'ArrowLeft' }),\n  right: createKeyChord({ alt: true, key: 'ArrowRight' }),\n  home: createKeyChord({ key: 'Home' }),\n  end: createKeyChord({ key: 'End' }),\n  pageUp: createKeyChord({ key: 'PageUp' }),\n  pageDown: createKeyChord({ key: 'PageDown' }),\n};\n","import { InjectionToken, ValueProvider } from '@angular/core';\nimport {\n  DEFAULT_FOCUSLY_KEYMAP,\n  FocuslyKeyMap,\n} from '../models/keymap/models/key-press-action.model';\n\nexport const FOCUSLY_KEYMAP = new InjectionToken<FocuslyKeyMap>('FOCUSLY_KEYMAP', {\n  providedIn: 'root',\n  factory: () => DEFAULT_FOCUSLY_KEYMAP,\n});\n\nexport function provideFocuslyKeymap(map: FocuslyKeyMap): ValueProvider {\n  return {\n    provide: FOCUSLY_KEYMAP,\n    useValue: map,\n  };\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n  FocuslyItem,\n  FocuslyCellItem,\n  isCellItem,\n  FocusRequest,\n  FocusAck,\n} from '../models/focus-item.model';\nimport { FOCUSLY_KEYMAP } from '../injection-tokens/keymap.token';\nimport {\n  DEFAULT_FOCUSLY_KEYMAP,\n  FocuslyKeyChord,\n  FocuslyKeyMap,\n  KeyPressAction,\n} from '../models/keymap/models/key-press-action.model';\nimport { chordFromKeyboardEvent } from '../models/keymap/models/key-chord.model';\nimport { FocuslyServiceApi } from '../models/focus-service-api.model';\nimport { FocuslyShortcutRegistration, ShortcutStore } from '../models/short-cut.model';\n\ntype GroupStore = {\n  byId: Map<string, FocuslyItem>;\n  byCell: Map<string, FocuslyCellItem>;\n  maxRow: number;\n  maxCol: number;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class FocuslyService implements FocuslyServiceApi {\n  private endStopSubject = new Subject<FocuslyItem>();\n  readonly endStopHit$ = this.endStopSubject.asObservable();\n\n  private focusRegistry = new Map<number, GroupStore>();\n  readonly currentFocus = signal<FocuslyItem | null>(null);\n\n  private focusKeyMap = inject<FocuslyKeyMap>(FOCUSLY_KEYMAP);\n  private readonly _keymap = signal<FocuslyKeyMap>({\n    ...DEFAULT_FOCUSLY_KEYMAP,\n    ...this.focusKeyMap,\n  });\n  readonly keyMap = this._keymap.asReadonly();\n\n  private readonly keyPressActionHandlers: Record<KeyPressAction, () => void> = {\n    up: () => this.up(),\n    down: () => this.down(),\n    left: () => this.left(),\n    right: () => this.right(),\n    home: () => this.home(),\n    end: () => this.end(),\n    pageUp: () => this.pageUp(),\n    pageDown: () => this.pageDown(),\n  };\n\n  readonly keyHandlers = computed<Record<string, () => void>>(() => {\n    const effective = this.keyMap();\n    const handlers: Record<string, () => void> = {};\n\n    for (const [action, keyPressConfig] of Object.entries(effective) as [\n      KeyPressAction,\n      FocuslyKeyChord,\n    ][]) {\n      if (!keyPressConfig) continue;\n      const fn = this.keyPressActionHandlers[action];\n      if (!fn) continue;\n\n      const keyPresses = Array.isArray(keyPressConfig) ? keyPressConfig : [keyPressConfig];\n      for (const keyPress of keyPresses) {\n        if (!keyPress) continue;\n        handlers[keyPress] = fn;\n      }\n    }\n\n    return handlers;\n  });\n\n  private shortcutGlobal: ShortcutStore = { byChord: new Map(), byId: new Map() };\n  private shortcutByGroup = new Map<number, ShortcutStore>();\n  private shortcutByElement = new Map<string, ShortcutStore>();\n\n  private readonly focusRequestSubject = new Subject<FocusRequest>();\n  readonly focusRequests$ = this.focusRequestSubject.asObservable();\n\n  private readonly focusAckSubject = new Subject<FocusAck>();\n  readonly focusAcks$ = this.focusAckSubject.asObservable();\n\n  private pendingRequests = new Map<string, (ack: FocusAck) => void>();\n\n  constructor() {\n    this.focusAcks$.subscribe((ack) => {\n      const resolver = this.pendingRequests.get(ack.requestId);\n      if (resolver) resolver(ack);\n    });\n  }\n\n  getHandlerForKeyboardEvent(e: KeyboardEvent): (() => void) | undefined {\n    const shortcut = this.getShortcutHandlerForKeyboardEvent(e);\n    if (shortcut) return () => shortcut(e);\n\n    const chord = chordFromKeyboardEvent(e);\n    return this.keyHandlers()[chord];\n  }\n\n  tryHandleShortcutEvent(\n    e: KeyboardEvent,\n    context?: { groupId?: number; elementId?: string },\n  ): boolean {\n    const handler = this.getShortcutHandlerForKeyboardEvent(e, context);\n    if (!handler) return false;\n    handler(e);\n    return true;\n  }\n\n  getShortcutHandlerForKeyboardEvent(\n    e: KeyboardEvent,\n    context?: { groupId?: number; elementId?: string },\n  ): ((e: KeyboardEvent) => void) | undefined {\n    const chord = chordFromKeyboardEvent(e);\n\n    const inTextInput = this.isTextInputTarget(e.target);\n    const current = this.currentFocus();\n\n    const currentElementId = context?.elementId ?? current?.id;\n    const currentGroupId = context?.groupId ?? current?.groupId;\n\n    // 1) element scoped\n    if (currentElementId) {\n      const store = this.shortcutByElement.get(currentElementId);\n      const list = store?.byChord.get(chord);\n      const hit = list?.find((r) => !r.preventInTextActions || !inTextInput);\n      if (hit) return (evt) => hit.handler(evt);\n    }\n\n    // 2) group scoped\n    if (currentGroupId != null) {\n      const store = this.shortcutByGroup.get(currentGroupId);\n      const list = store?.byChord.get(chord);\n      const hit = list?.find((r) => !r.preventInTextActions || !inTextInput);\n      if (hit) return (evt) => hit.handler(evt);\n    }\n\n    // 3) global\n    {\n      const list = this.shortcutGlobal.byChord.get(chord);\n      const hit = list?.find((r) => !r.preventInTextActions || !inTextInput);\n      if (hit) return (evt) => hit.handler(evt);\n    }\n\n    return undefined;\n  }\n\n  updateKeymap(partial: FocuslyKeyMap) {\n    this._keymap.update((current) => ({ ...current, ...partial }));\n  }\n\n  private cellKey(row: number, col: number): string {\n    return `${row}:${col}`;\n  }\n\n  private getOrCreateStore(groupId: number): GroupStore {\n    let store = this.focusRegistry.get(groupId);\n    if (!store) {\n      store = { byId: new Map(), byCell: new Map(), maxRow: 0, maxCol: 0 };\n      this.focusRegistry.set(groupId, store);\n    }\n    return store;\n  }\n\n  private getStore(groupId: number | undefined): GroupStore | undefined {\n    if (groupId == null) return undefined;\n    return this.focusRegistry.get(groupId);\n  }\n\n  private recomputeMaximum(store: GroupStore): void {\n    // Only called when we may have removed the current max row/col\n    let maxRow = 0;\n    let maxCol = 0;\n\n    for (const item of store.byCell.values()) {\n      if (item.row > maxRow) maxRow = item.row;\n      if (item.column > maxCol) maxCol = item.column;\n    }\n\n    store.maxRow = maxRow;\n    store.maxCol = maxCol;\n  }\n\n  onFocus(focus: FocuslyItem): void {\n    const store = this.getStore(focus.groupId);\n    if (!store) {\n      this.currentFocus.set(focus);\n      return;\n    }\n\n    const found = store.byId.get(focus.id);\n    this.currentFocus.set(found ?? focus);\n  }\n\n  up(): void {\n    this.moveRow(-1, (row) => row >= 0);\n  }\n\n  down(): void {\n    this.moveRow(1, (row) => row <= this.currentFocusMaxRow());\n  }\n\n  left(): void {\n    this.moveColumn(-1, (col) => col >= 0);\n  }\n\n  right(): void {\n    this.moveColumn(1, (col) => col <= this.currentFocusMaxColumn());\n  }\n\n  home(): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n    this.moveColumn(-currentFocus.column, (col) => col >= 0);\n  }\n\n  end(): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n    const max = this.currentFocusMaxColumn();\n    this.moveColumn(max - currentFocus.column, (col) => col <= max);\n  }\n\n  pageUp(): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n    this.moveRow(-currentFocus.row, (row) => row >= 0);\n  }\n\n  pageDown(): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n    const max = this.currentFocusMaxRow();\n    this.moveRow(max - currentFocus.row, (row) => row <= max);\n  }\n\n  registerItemFocus(focus: FocuslyItem): void {\n    if (focus.groupId == null || !focus.id) return;\n\n    const store = this.getOrCreateStore(focus.groupId);\n\n    // If this id already exists, remove its old cell mapping (row/col might have changed)\n    const existing = store.byId.get(focus.id);\n    if (existing && isCellItem(existing)) {\n      store.byCell.delete(this.cellKey(existing.row, existing.column));\n    }\n\n    store.byId.set(focus.id, focus);\n\n    if (isCellItem(focus)) {\n      store.byCell.set(this.cellKey(focus.row, focus.column), focus);\n      if (focus.row > store.maxRow) store.maxRow = focus.row;\n      if (focus.column > store.maxCol) store.maxCol = focus.column;\n    }\n  }\n\n  unRegisterItemFocus(focus: FocuslyItem): void {\n    const store = this.getStore(focus.groupId);\n    if (!store) return;\n\n    const existing = store.byId.get(focus.id);\n    if (!existing) return;\n\n    store.byId.delete(focus.id);\n\n    if (isCellItem(existing)) {\n      store.byCell.delete(this.cellKey(existing.row, existing.column));\n\n      if (existing.row === store.maxRow || existing.column === store.maxCol) {\n        this.recomputeMaximum(store);\n      }\n    }\n\n    if (store.byId.size === 0) {\n      this.focusRegistry.delete(focus.groupId);\n    }\n  }\n\n  isCurrentFocus(id: string): boolean {\n    const currentFocus = this.currentFocus();\n    return !!currentFocus && currentFocus.id === id;\n  }\n\n  registerShortcut(reg: FocuslyShortcutRegistration): void {\n    // Basic validation\n    if (!reg.keys?.length) return;\n\n    this.unregisterShortcut(reg.id);\n\n    if (reg.scope === 'global') {\n      this.addToStore(this.shortcutGlobal, reg);\n      return;\n    }\n\n    if (reg.scope === 'group') {\n      if (reg.groupId == null) return;\n      const store = this.getOrCreateShortcutStore(this.shortcutByGroup, reg.groupId);\n      this.addToStore(store, reg);\n      return;\n    }\n\n    // element scope\n    if (reg.scope === 'element') {\n      if (!reg.elementId) return;\n      const store = this.getOrCreateShortcutStore(this.shortcutByElement, reg.elementId);\n      this.addToStore(store, reg);\n    }\n  }\n\n  unregisterShortcut(id: string): void {\n    // Global\n    if (this.shortcutGlobal.byId.has(id)) this.removeFromStore(this.shortcutGlobal, id);\n\n    // Groups\n    for (const [groupId, store] of this.shortcutByGroup) {\n      if (store.byId.has(id)) {\n        this.removeFromStore(store, id);\n        if (store.byId.size === 0) this.shortcutByGroup.delete(groupId);\n      }\n    }\n\n    // Elements\n    for (const [elementId, store] of this.shortcutByElement) {\n      if (store.byId.has(id)) {\n        this.removeFromStore(store, id);\n        if (store.byId.size === 0) this.shortcutByElement.delete(elementId);\n      }\n    }\n  }\n\n  setFocusByElementId(\n    id: string,\n    groupId?: number,\n    opts?: { timeoutMs?: number; waitForVisible?: boolean; preventScroll?: boolean },\n  ): Promise<boolean> {\n    const targetId = (id ?? '').trim();\n    if (!targetId) return Promise.resolve(false);\n\n    const requestId = crypto.randomUUID?.() ?? `${Date.now()}-${Math.random()}`;\n    const timeoutMs = opts?.timeoutMs ?? 2000;\n\n    return new Promise<boolean>((resolve) => {\n      const timer = window.setTimeout(() => {\n        this.pendingRequests.delete(requestId);\n        resolve(false);\n      }, timeoutMs);\n\n      this.pendingRequests.set(requestId, (ack) => {\n        window.clearTimeout(timer);\n        this.pendingRequests.delete(requestId);\n        resolve(ack.success);\n      });\n\n      this.focusRequestSubject.next({\n        requestId,\n        id: targetId,\n        groupId,\n        preventScroll: opts?.preventScroll ?? true,\n        waitForVisible: opts?.waitForVisible ?? true,\n        timeoutMs,\n      });\n    });\n  }\n\n  ackFocus(ack: FocusAck): void {\n    this.focusAckSubject.next(ack);\n  }\n\n  // ---------------- Private ----------------\n\n  private findRegisteredFocus(\n    column: number,\n    row: number,\n    groupId?: number,\n  ): FocuslyItem | undefined {\n    const effectiveGroup = groupId ?? this.currentFocus()?.groupId;\n    if (effectiveGroup == null) return undefined;\n\n    const store = this.focusRegistry.get(effectiveGroup);\n    if (!store) return undefined;\n\n    const maxCol = store.maxCol ?? 0;\n    let col = Math.min(Math.max(column, 0), maxCol);\n\n    // Try same column, then move left until we find something\n    while (col >= 0) {\n      const hit = store.byCell.get(this.cellKey(row, col));\n      if (hit) return hit;\n      col--;\n    }\n\n    return undefined;\n  }\n\n  private moveRow(offset: number, endCondition: (row: number) => boolean): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n\n    this.moveFocus(currentFocus.row, offset, endCondition, (row) =>\n      this.findRegisteredFocus(currentFocus.column, row, currentFocus.groupId),\n    );\n  }\n\n  private moveColumn(offset: number, endCondition: (column: number) => boolean): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus || !isCellItem(currentFocus)) return;\n\n    this.moveFocus(currentFocus.column, offset, endCondition, (col) =>\n      this.findRegisteredFocus(col, currentFocus.row, currentFocus.groupId),\n    );\n  }\n\n  private moveFocus(\n    condition: number,\n    offset: number,\n    endCondition: (x: number) => boolean,\n    findNextFocus: (condition: number) => FocuslyItem | undefined,\n  ): void {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus) return;\n\n    condition += offset;\n    let nextFocus: FocuslyItem | undefined;\n\n    while (endCondition(condition) && !nextFocus) {\n      nextFocus = findNextFocus(condition);\n      if (!nextFocus) condition += offset;\n    }\n\n    if (nextFocus) {\n      void this.setFocusByElementId(nextFocus.id, nextFocus.groupId);\n    } else if (!endCondition(condition)) {\n      this.endStopSubject.next(currentFocus);\n    }\n  }\n\n  private currentFocusMaxRow(): number {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus) return 0;\n    return this.focusRegistry.get(currentFocus.groupId)?.maxRow ?? 0;\n  }\n\n  private currentFocusMaxColumn(): number {\n    const currentFocus = this.currentFocus();\n    if (!currentFocus) return 0;\n    return this.focusRegistry.get(currentFocus.groupId)?.maxCol ?? 0;\n  }\n\n  private getOrCreateShortcutStore(map: Map<any, ShortcutStore>, key: any): ShortcutStore {\n    let store = map.get(key);\n    if (!store) {\n      store = { byChord: new Map(), byId: new Map() };\n      map.set(key, store);\n    }\n    return store;\n  }\n\n  private addToStore(store: ShortcutStore, reg: FocuslyShortcutRegistration): void {\n    store.byId.set(reg.id, reg);\n\n    for (const chord of reg.keys) {\n      const list = store.byChord.get(chord) ?? [];\n      // upsert by id in case directive updates\n      const existingIndex = list.findIndex((x) => x.id === reg.id);\n      if (existingIndex >= 0) list.splice(existingIndex, 1);\n      list.push(reg);\n      // keep highest priority first\n      list.sort((a, b) => b.priority - a.priority);\n      store.byChord.set(chord, list);\n    }\n  }\n\n  private removeFromStore(store: ShortcutStore, id: string): void {\n    const reg = store.byId.get(id);\n    if (!reg) return;\n    store.byId.delete(id);\n\n    for (const chord of reg.keys) {\n      const list = store.byChord.get(chord);\n      if (!list) continue;\n      const idx = list.findIndex((x) => x.id === id);\n      if (idx >= 0) list.splice(idx, 1);\n      if (list.length === 0) store.byChord.delete(chord);\n    }\n  }\n\n  private isTextInputTarget(target: EventTarget | null): boolean {\n    const el = target as HTMLElement | null;\n    if (!el) return false;\n    const tag = el.tagName?.toLowerCase();\n    if (tag === 'textarea') return true;\n    if (tag === 'input') {\n      const type = (el as HTMLInputElement).type?.toLowerCase();\n      // treat most input types as typing contexts\n      return !['checkbox', 'radio', 'button', 'submit', 'reset', 'range', 'color', 'file'].includes(\n        type,\n      );\n    }\n    return el.isContentEditable === true;\n  }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n  selector: '[focuslyGroupHost]',\n  exportAs: 'focuslyGroupHost',\n  standalone: true,\n})\nexport class FocuslyGroupHostDirective {\n  private _groupId?: number;\n\n  @Input({ required: true })\n  set focuslyGroupHost(value: number) {\n    this._groupId = value;\n  }\n\n  get focuslyGroupHost(): number | undefined {\n    return this._groupId;\n  }\n\n  resolveGroup(): number | undefined {\n    return this._groupId;\n  }\n}\n","import {\n  computed,\n  Directive,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FocuslyService } from '../services/focusly.service';\nimport { FocuslyItem, FocuslyTargetItem, FocusRequest } from '../models/focus-item.model';\nimport { FocuslyGroupHostDirective } from './focusly-group-host.directive';\n\n@Directive({\n  selector: '[focusly-focus]',\n  standalone: true,\n})\nexport class FocuslyFocusDirective implements OnInit, OnDestroy {\n  protected readonly groupHost = inject(FocuslyGroupHostDirective, { optional: true });\n\n  @Input({ required: false }) set focuslyGroup(group: number) {\n    this._focuslyGroup = group;\n    this.syncRegistration();\n  }\n\n  @Input({ required: false }) set focuslyElementId(id: string) {\n    this._focuslyElementId = id;\n    this.syncRegistration();\n  }\n\n  get focuslyElementId(): string {\n    return this._focuslyElementId?.trim() || this.uniqueId;\n  }\n\n  get focuslyGroup(): number | undefined {\n    return this._focuslyGroup;\n  }\n\n  protected readonly uniqueId = crypto.randomUUID();\n  protected _focuslyGroup: number | undefined;\n  protected _focuslyElementId: string | undefined;\n\n  protected readonly elementRef = inject(ElementRef<HTMLElement>);\n  protected readonly focusService = inject(FocuslyService);\n\n  private readonly limitHitSubscription: Subscription;\n  private focusRequestSub?: Subscription;\n\n  protected lastRegistered: FocuslyItem | null = null;\n\n  private focusRafId: number | null = null;\n  private focusAttempt = 0;\n  private readonly maxFocusAttempts = 120; // ~2s at 60fps\n\n  private activeRequestId: string | null = null;\n\n  get resolvedGroup(): number | undefined {\n    return this.focuslyGroup ?? this.groupHost?.resolveGroup();\n  }\n\n  protected get focusItem(): FocuslyTargetItem {\n    return {\n      groupId: this.resolvedGroup,\n      id: this.focuslyElementId,\n    } as FocuslyTargetItem;\n  }\n\n  protected onElementFocus: () => void = () => {\n    const host = this.elementRef.nativeElement as any;\n    if (host.select) host.select();\n  };\n\n  protected selectCustomElement: (() => void) | undefined;\n\n  readonly isActive = computed(() => this.focusService.isCurrentFocus(this.focuslyElementId));\n\n  @HostBinding('class.focusly-active')\n  get activeClass(): boolean {\n    return this.isActive();\n  }\n\n  constructor() {\n    this.limitHitSubscription = this.focusService.endStopHit$.subscribe(() => {\n      // unchanged behaviour; optional to keep\n      if (this.focusService.isCurrentFocus(this.focuslyElementId)) {\n        const host = this.elementRef.nativeElement;\n        queueMicrotask(() => {\n          (host as any).blur?.();\n          (host as any).focus?.();\n        });\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.syncRegistration();\n\n    this.focusRequestSub = this.focusService.focusRequests$.subscribe((req) => {\n      // match by id + group\n      if (req.id !== this.focuslyElementId) return;\n\n      const group = this.resolvedGroup;\n      if (req.groupId != null && group != null && req.groupId !== group) return;\n      if (req.groupId != null && group == null) return;\n\n      this.ensureDomFocusForRequest(req);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.cancelFocusRetry();\n    this.activeRequestId = null;\n\n    if (this.lastRegistered) {\n      this.focusService.unRegisterItemFocus(this.lastRegistered);\n      this.lastRegistered = null;\n    }\n\n    this.limitHitSubscription.unsubscribe();\n    this.focusRequestSub?.unsubscribe();\n  }\n\n  protected buildItem(): FocuslyTargetItem | null {\n    const groupId = this.resolvedGroup;\n    const id = this.focuslyElementId;\n    if (groupId == null || !id) return null;\n    return { groupId, id };\n  }\n\n  protected syncRegistration(): void {\n    const next = this.buildItem();\n\n    if (!next) {\n      if (this.lastRegistered) {\n        this.focusService.unRegisterItemFocus(this.lastRegistered);\n        this.lastRegistered = null;\n      }\n      return;\n    }\n\n    if (\n      this.lastRegistered &&\n      this.lastRegistered.groupId === next.groupId &&\n      this.lastRegistered.id === next.id\n    ) {\n      return;\n    }\n\n    if (this.lastRegistered && this.lastRegistered.groupId !== next.groupId) {\n      this.focusService.unRegisterItemFocus(this.lastRegistered);\n    }\n\n    this.focusService.registerItemFocus(next);\n    this.lastRegistered = next;\n  }\n\n  private cancelFocusRetry(): void {\n    if (this.focusRafId != null) {\n      cancelAnimationFrame(this.focusRafId);\n      this.focusRafId = null;\n    }\n    this.focusAttempt = 0;\n  }\n\n  private isActuallyFocusableNow(el: HTMLElement): boolean {\n    if (!el.isConnected) return false;\n    const anyEl = el as any;\n    if (anyEl.disabled) return false;\n\n    const style = getComputedStyle(el);\n    if (style.display === 'none' || style.visibility === 'hidden') return false;\n\n    const rects = el.getClientRects();\n    if (!rects || rects.length === 0) return false;\n\n    let p: HTMLElement | null = el;\n    while (p) {\n      if (p.getAttribute?.('aria-hidden') === 'true') return false;\n      p = p.parentElement;\n    }\n\n    return true;\n  }\n\n  private didDomFocusLand(host: HTMLElement): boolean {\n    const active = document.activeElement as HTMLElement | null;\n    return !!active && (active === host || host.contains(active));\n  }\n\n  private applyDomFocusOnce(host: HTMLElement, req: FocusRequest): void {\n    const anyHost = host as any;\n\n    if (this.selectCustomElement) {\n      this.selectCustomElement();\n    } else {\n      anyHost.focus?.({ preventScroll: req.preventScroll ?? true });\n      if (anyHost.select) anyHost.select();\n    }\n\n    this.onElementFocus();\n  }\n\n  private ensureDomFocusForRequest(req: FocusRequest): void {\n    this.activeRequestId = req.requestId;\n    this.cancelFocusRetry();\n\n    const host = this.elementRef.nativeElement;\n    const maxAttempts =\n      req.timeoutMs != null ? Math.max(1, Math.ceil(req.timeoutMs / 16)) : this.maxFocusAttempts;\n\n    const attempt = () => {\n      // superseded by a newer request\n      if (this.activeRequestId !== req.requestId) return;\n\n      this.focusAttempt++;\n\n      if (!this.isActuallyFocusableNow(host)) {\n        if (this.focusAttempt >= maxAttempts) {\n          this.focusService.ackFocus({\n            requestId: req.requestId,\n            id: req.id,\n            groupId: req.groupId,\n            success: false,\n            reason: 'not-visible',\n          });\n          this.activeRequestId = null;\n          this.cancelFocusRetry();\n          return;\n        }\n        this.focusRafId = requestAnimationFrame(attempt);\n        return;\n      }\n\n      this.applyDomFocusOnce(host, req);\n\n      if (!this.didDomFocusLand(host)) {\n        if (this.focusAttempt >= maxAttempts) {\n          this.focusService.ackFocus({\n            requestId: req.requestId,\n            id: req.id,\n            groupId: req.groupId,\n            success: false,\n            reason: 'not-focusable',\n          });\n          this.activeRequestId = null;\n          this.cancelFocusRetry();\n          return;\n        }\n        this.focusRafId = requestAnimationFrame(attempt);\n        return;\n      }\n\n      this.focusService.ackFocus({\n        requestId: req.requestId,\n        id: req.id,\n        groupId: req.groupId,\n        success: true,\n      });\n      this.activeRequestId = null;\n      this.cancelFocusRetry();\n    };\n\n    queueMicrotask(() => attempt());\n  }\n\n  @HostListener('focus', ['$event'])\n  @HostListener('focusin', ['$event'])\n  protected handleFocusIn(event: FocusEvent): void {\n    this.focusService.onFocus(this.focusItem);\n    this.onFocusIn(event);\n  }\n\n  @HostListener('focusout', ['$event'])\n  protected handleFocusOut(event: FocusEvent): void {\n    this.onFocusOut(event);\n  }\n\n  @HostListener('mousedown', ['$event'])\n  protected handleMouseDown(event: MouseEvent): void {\n    this.onMouseDown(event);\n  }\n\n  @HostListener('keydown', ['$event'])\n  protected handleKeydown(e: KeyboardEvent): void {\n    const handler = this.focusService.getHandlerForKeyboardEvent(e);\n    if (handler) {\n      e.preventDefault();\n      e.stopPropagation();\n      handler();\n    }\n    this.onKeydown(e);\n  }\n\n  @HostListener('keydown.enter', ['$event'])\n  protected handleEnterKey(e: Event): void {\n    this.onEnterKey(e as KeyboardEvent);\n  }\n\n  protected onFocusIn(event: FocusEvent): void {}\n  protected onFocusOut(event: FocusEvent): void {}\n  protected onMouseDown(event: MouseEvent): void {}\n  protected onKeydown(event: KeyboardEvent): void {}\n  protected onEnterKey(event: KeyboardEvent): void {}\n}\n","import { Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FocuslyCellItem } from '../models/focus-item.model';\nimport { FocuslyFocusDirective } from './focusly-focus.directive';\n\n@Directive({\n  selector: '[focusly]',\n  standalone: true,\n})\nexport class FocuslyDirective extends FocuslyFocusDirective implements OnInit, OnDestroy {\n  @Input({ required: true }) set focuslyColumn(column: number) {\n    this._focuslyColumn = column;\n    this.syncRegistration();\n  }\n\n  @Input({ required: true }) set focuslyRow(row: number) {\n    this._focuslyRow = row;\n    this.syncRegistration();\n  }\n\n  get focuslyColumn(): number | undefined {\n    return this._focuslyColumn;\n  }\n\n  get focuslyRow(): number | undefined {\n    return this._focuslyRow;\n  }\n\n  private _focuslyColumn: number | undefined;\n  private _focuslyRow: number | undefined;\n\n  protected override buildItem(): FocuslyCellItem | null {\n    const base = super.buildItem();\n    if (!base) return null;\n    const row = this.focuslyRow;\n    const column = this.focuslyColumn;\n    if (row == null || column == null) return null;\n    return { ...base, row, column };\n  }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { FocuslyShortcutRegistration, FocuslyShortcutScope } from '../models/short-cut.model';\nimport { normaliseKeyChordString } from '../models/keymap/models/key-chord.model';\n\n@Directive({\n  selector: '[focuslyShortcut]',\n  standalone: true,\n})\nexport class FocuslyShortcutDirective {\n  @Input({ required: true }) focuslyKey!: string | string[];\n  @Input() focuslyShortcutScope: FocuslyShortcutScope = 'group';\n  @Input() focuslyGroup?: number;\n  @Input() focuslyPreventInTextActions = false;\n  @Input() focuslyPriority = 0;\n  @Input() focuslyElementId?: string;\n  @Input() focuslyDescription?: string;\n\n  @Output() focuslyAction = new EventEmitter<KeyboardEvent>();\n\n  /** Host calls this when it needs current declaration */\n  getRegistration(defaults: {\n    groupId?: number;\n    elementId?: string;\n  }): Omit<FocuslyShortcutRegistration, 'id'> | null {\n    const raw = this.focuslyKey;\n    const keysRaw = Array.isArray(raw) ? raw : [raw];\n\n    const keys = Array.from(new Set(keysRaw.map(normaliseKeyChordString).filter(Boolean)));\n    if (!keys.length) return null;\n\n    const scope = this.focuslyShortcutScope ?? 'group';\n    const groupId = scope === 'group' ? (this.focuslyGroup ?? defaults.groupId) : undefined;\n    const elementId =\n      scope === 'element' ? (this.focuslyElementId ?? defaults.elementId) : undefined;\n\n    if (scope === 'group' && groupId == null) return null;\n    if (scope === 'element' && !elementId) return null;\n\n    return {\n      keys,\n      scope,\n      groupId,\n      elementId,\n      preventInTextActions: !!this.focuslyPreventInTextActions,\n      priority: this.focuslyPriority ?? 0,\n      handler: (e) => this.focuslyAction.emit(e),\n    };\n  }\n}\n","import {\n  AfterContentInit,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  inject,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n} from '@angular/core';\nimport { FocuslyService } from '../services/focusly.service';\nimport { FocuslyGroupHostDirective } from './focusly-group-host.directive';\nimport {\n  FocuslyShortcutDef,\n  FocuslyShortcutRegistration,\n  FocuslyShortcuts,\n} from '../models/short-cut.model';\nimport { FocuslyShortcutDirective } from './focusly-shortcut.directive';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { normaliseKeyChordString } from '../models/keymap/models/key-chord.model';\n\n@Directive({\n  selector: '[focuslyShortcutHost]',\n  standalone: true,\n})\nexport class FocuslyShortcutHostDirective\n  implements OnInit, OnDestroy, AfterContentInit, OnChanges\n{\n  private readonly el = inject(ElementRef<HTMLElement>);\n  private readonly zone = inject(NgZone);\n  private readonly focuslyService = inject(FocuslyService);\n  private readonly groupHost = inject(FocuslyGroupHostDirective, { optional: true });\n\n  @Input() focuslyShortcuts: FocuslyShortcuts | null = null;\n  @Input() focuslyIncludeChildShortcuts = true;\n  @Input() focuslyGroup?: number;\n  @Input() focuslyElementId?: string;\n\n  @ContentChildren(FocuslyShortcutDirective, { descendants: true })\n  private readonly childShortcuts?: QueryList<FocuslyShortcutDirective>;\n\n  private keySub?: Subscription;\n  private childSub?: Subscription;\n\n  private readonly hostId = crypto.randomUUID();\n  private registeredIds: string[] = [];\n\n  ngOnInit(): void {\n    this.zone.runOutsideAngular(() => {\n      this.keySub = fromEvent<KeyboardEvent>(this.el.nativeElement, 'keydown', {\n        capture: true,\n      }).subscribe((e) => {\n        const handled = this.focuslyService.tryHandleShortcutEvent(e, {\n          groupId: this.resolveGroupId(),\n          elementId: this.focuslyElementId,\n        });\n\n        if (handled) {\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    });\n  }\n\n  ngAfterContentInit(): void {\n    // Initial register + track changes\n    this.rebuildRegistrations();\n\n    if (this.childShortcuts) {\n      this.childSub = this.childShortcuts.changes.subscribe(() => this.rebuildRegistrations());\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.keySub?.unsubscribe();\n    this.childSub?.unsubscribe();\n    this.unregisterAll();\n  }\n\n  ngOnChanges(): void {\n    // if inputs change (shortcuts/group/elementId), rebuild\n    this.rebuildRegistrations();\n  }\n\n  private resolveGroupId(): number | undefined {\n    return this.focuslyGroup ?? this.groupHost?.resolveGroup();\n  }\n\n  private rebuildRegistrations(): void {\n    this.unregisterAll();\n\n    const groupId = this.resolveGroupId();\n    const elementId = this.focuslyElementId;\n\n    const regs: FocuslyShortcutRegistration[] = [];\n\n    // 1) host shortcuts input\n    const input = this.focuslyShortcuts;\n    regs.push(...this.toRegistrationsFromHostInput(input, { groupId, elementId }));\n\n    // 2) child declarations\n    if (this.focuslyIncludeChildShortcuts && this.childShortcuts) {\n      for (const child of this.childShortcuts.toArray()) {\n        const decl = child.getRegistration({ groupId, elementId });\n        if (!decl) continue;\n\n        regs.push({\n          id: `${this.hostId}:child:${crypto.randomUUID()}`,\n          ...decl,\n        });\n      }\n    }\n\n    // register all\n    for (const reg of regs) {\n      this.focuslyService.registerShortcut(reg);\n      this.registeredIds.push(reg.id);\n    }\n  }\n\n  private unregisterAll(): void {\n    for (const id of this.registeredIds) {\n      this.focuslyService.unregisterShortcut(id);\n    }\n    this.registeredIds = [];\n  }\n\n  private toRegistrationsFromHostInput(\n    input: FocuslyShortcuts | null,\n    defaults: { groupId?: number; elementId?: string },\n  ): FocuslyShortcutRegistration[] {\n    if (!input) return [];\n\n    const toKeys = (k: string | string[]) =>\n      Array.from(\n        new Set((Array.isArray(k) ? k : [k]).map(normaliseKeyChordString).filter(Boolean)),\n      );\n\n    const make = (def: FocuslyShortcutDef): FocuslyShortcutRegistration[] => {\n      const keys = toKeys(def.key);\n      if (!keys.length) return [];\n\n      const scope = def.scope ?? 'group';\n      const groupId = scope === 'group' ? (def.groupId ?? defaults.groupId) : undefined;\n      const elementId = scope === 'element' ? (def.elementId ?? defaults.elementId) : undefined;\n\n      if (scope === 'group' && groupId == null) return [];\n      if (scope === 'element' && !elementId) return [];\n\n      return [\n        {\n          id: `${this.hostId}:host:${crypto.randomUUID()}`,\n          keys,\n          scope,\n          groupId,\n          elementId,\n          preventInTextActions: !!def.preventInTextActions,\n          priority: def.priority ?? 0,\n          description: def.description,\n          source: 'host',\n          handler: def.handler,\n        },\n      ];\n    };\n\n    if (Array.isArray(input)) {\n      return input.flatMap(make);\n    }\n\n    // map form\n    return Object.entries(input).flatMap(([key, handler]) => make({ key, handler }));\n  }\n}\n","import { ElementRef } from '@angular/core';\n/**\n * @deprecated\n * This function is deprecated and will be removed in a future version.\n */\nexport function isElementVisible(element: ElementRef): boolean {\n  const rect = element.nativeElement.getBoundingClientRect();\n  const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n  return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  input,\n  inject,\n} from '@angular/core';\n\nimport { Subject, Subscription, filter, fromEvent } from 'rxjs';\nimport { isElementVisible } from '../../helpers/is-element-visible';\n\n/**\n * @deprecated\n * This component is deprecated and will be removed in a future version.\n *\n * Use {@link FocuslyShortcutDirective} instead:\n *\n * ```html\n * <button\n *   focuslyShortcut\n *   [focuslyKey]=\"'enter'\"\n *   (focuslyAction)=\"onEnterKey()\"\n * >\n * ```\n */\n@Component({\n  selector: 'focusly-listener',\n  templateUrl: './focusly-listener.component.html',\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FocuslyListenerComponent implements OnInit, OnDestroy {\n  elementRef = inject(ElementRef);\n  private readonly ngZone = inject(NgZone);\n\n  readonly keyDownEvents = input.required<string[]>();\n\n  private keyboardEventsDictionary: Map<string, any> = new Map<string, any>();\n  private keyboardEventSubscription: Subscription | undefined;\n\n  private broadcastKeyDownEventSubject = new Subject<KeyboardEvent>();\n  public broadcastKeyDownEvent$ = this.broadcastKeyDownEventSubject.asObservable();\n\n  ngOnInit(): void {\n    this.keyDownEvents().forEach((keyboardEvent) =>\n      this.keyboardEventsDictionary.set(keyboardEvent, true),\n    );\n\n    this.ngZone.runOutsideAngular(() => {\n      this.keyboardEventSubscription = fromEvent<KeyboardEvent>(\n        this.elementRef.nativeElement,\n        'keydown',\n      )\n        .pipe(\n          filter((keyboardEvent: KeyboardEvent) =>\n            this.keyboardEventsDictionary.get(keyboardEvent.key),\n          ),\n          filter(() => isElementVisible(this.elementRef)),\n        )\n        .subscribe((keyboardEvent) => {\n          this.broadcastKeyDownEventSubject.next(keyboardEvent);\n        });\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.keyboardEventSubscription?.unsubscribe();\n  }\n}\n","<ng-content></ng-content>\n","import {\n  AfterViewInit,\n  Component,\n  Injector,\n  input,\n  output,\n  inject,\n  DestroyRef,\n} from '@angular/core';\nimport { throttleTime } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FocuslyListenerComponent } from '../focusly-listener/focusly-listener.component';\n\n/**\n * @deprecated\n * This component is deprecated and will be removed in a future version.\n *\n * Use {@link FocuslyShortcutDirective} instead:\n *\n * ```html\n * <button\n *   focuslyShortcut\n *   [focuslyKey]=\"'enter'\"\n *   (focuslyAction)=\"onEnterKey()\"\n * >\n * ```\n */\n@Component({\n  selector: 'focusly-subscriber',\n  template: ``,\n  standalone: true,\n})\nexport class FocuslySubscriberComponent implements AfterViewInit {\n  protected injector = inject(Injector);\n  private readonly destroyRef = inject(DestroyRef);\n\n  readonly keyboardEvent = output<KeyboardEvent>();\n  readonly throttleKey = input.required<string>();\n  readonly throttleTime = input.required<number>();\n\n  private eventListener: FocuslyListenerComponent | null | undefined;\n\n  ngAfterViewInit(): void {\n    try {\n      this.eventListener = this.injector.get<FocuslyListenerComponent>(FocuslyListenerComponent);\n\n      this.eventListener.broadcastKeyDownEvent$\n        .pipe(throttleTime(this.throttleTime()), takeUntilDestroyed(this.destroyRef))\n        .subscribe((keyEvent) => {\n          keyEvent.stopPropagation();\n          this.keyboardEvent.emit(keyEvent);\n        });\n    } catch (error) {\n      throw new Error('Unable to find keyboardListener. Check there is one in the parent DOM');\n    }\n  }\n}\n","import { InjectionToken, inject, Signal } from '@angular/core';\nimport { FocuslyKeyMap } from './keymap/models/key-press-action.model';\nimport { FocuslyService } from '../services/focusly.service';\n\nexport interface FocuslyServiceApi {\n  readonly keyMap: Signal<FocuslyKeyMap>;\n  updateKeymap(partial: FocuslyKeyMap): void;\n  setFocusByElementId(\n    id: string,\n    groupId?: number,\n    opts?: { timeoutMs: number; waitForVisible?: boolean; preventScroll?: boolean },\n  ): Promise<boolean>;\n}\n\nexport const FOCUSLY_SERVICE_API = new InjectionToken<FocuslyServiceApi>('FOCUSLY_SERVICE_API', {\n  providedIn: 'root',\n  factory: () => inject(FocuslyService),\n});\n","import { Component, output } from '@angular/core';\nimport { FocuslySubscriberComponent } from '../focusly-subscriber/focusly-subscriber.component';\n\n/**\n * @deprecated\n * This component is deprecated and will be removed in a future version.\n *\n * Use {@link FocuslyShortcutDirective} instead:\n *\n * ```html\n * <button\n *   focuslyShortcut\n *   [focuslyKey]=\"'enter'\"\n *   (focuslyAction)=\"onEnterKey()\"\n * >\n * ```\n */\n@Component({\n  selector: 'focusly-enter-key-subscriber',\n  templateUrl: './focusly-enter-key-subscriber.component.html',\n  imports: [FocuslySubscriberComponent],\n  standalone: true,\n})\nexport class FocuslyEnterKeySubscriberComponent {\n  readonly keyboardEvent = output();\n\n  onKeyboardEvent(): void {\n    this.keyboardEvent.emit();\n  }\n}\n","<focusly-subscriber\n  [throttleKey]=\"'Enter'\"\n  [throttleTime]=\"1000\"\n  (keyboardEvent)=\"onKeyboardEvent()\"\n>\n</focusly-subscriber>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}