{"version":3,"file":"zaybu-focusly-src-lib-models-keymap.mjs","sources":["../../../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/models/keymap/zaybu-focusly-src-lib-models-keymap.ts"],"sourcesContent":["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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}