{"version":3,"file":"talenra-ngx-base-dev-kit.mjs","sources":["../../../projects/ngx-base/dev-kit/src/click-outside/click-outside.directive.ts","../../../projects/ngx-base/dev-kit/src/click-stop-propagation/click-stop-propagation.directive.ts","../../../projects/ngx-base/dev-kit/src/double-click/double-click.directive.ts","../../../projects/ngx-base/dev-kit/src/deprecation/deprecation-warning.ts","../../../projects/ngx-base/dev-kit/src/guid/guid.ts","../../../projects/ngx-base/dev-kit/src/platform/platform.ts","../../../projects/ngx-base/dev-kit/talenra-ngx-base-dev-kit.ts"],"sourcesContent":["import { Directive, ElementRef, inject, output } from '@angular/core';\n\n/**\n * For binding clicks outside a component.\n *\n * ```html\n * <div class=\"overlay\" (clickOutside)=\"closeOverlay()\">\n *   ...\n * </div>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { DevKitModule } from '@talenra/ngx-base/dev-kit';\n * ```\n */\n@Directive({\n  selector: '[clickOutside]',\n  host: {\n    '(document:click)': 'onClick($event, $event.target)',\n  },\n})\nexport class ClickOutsideDirective {\n  /** Trigger for the click outside */\n  public clickOutside = output<MouseEvent>();\n\n  private elementRef = inject(ElementRef);\n\n  private onClick(event: MouseEvent, targetElement: HTMLElement): void {\n    if (!targetElement) return;\n    const clickedInside = this.elementRef.nativeElement.contains(targetElement);\n    if (!clickedInside) this.clickOutside.emit(event);\n  }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Prevent click event from bubbeling.\n *\n * Example usage\n *\n * @example\n * <!-- If `<span>` is clicked, it's direct click handler `clickHandler()` will be triggered, while `parentClickHandler()` won't.  -->\n * <div (click)=\"parentClickHandler()\">\n *   <span (click)=\"clickHandler()\" clickStopPropagation><span>\n * </div>\n *\n *\n * ### Import\n *\n * ```typescript\n * import { ClickStopPropagationDirective } from '@talenra/ngx-base/dev-kit';\n * ```\n */\n@Directive({\n  selector: '[clickStopPropagation]',\n  host: {\n    '(click)': 'onClick($event)',\n  },\n})\nexport class ClickStopPropagationDirective {\n  /** @internal */\n  public onClick(event: MouseEvent): void {\n    event.stopPropagation();\n  }\n}\n","import { DestroyRef, Directive, inject, input, OnInit, output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { buffer, debounceTime, Subject } from 'rxjs';\n\n/**\n * Support double click event. Double click is catched with `doubleClick`. Single clicks can still be catched with\n * `singleClick`. Note that single clicks are emitted delayed as we have to \"wait\" for a potential second click event.\n * Common `click` event is not masked and can be used side by side with `singleClick` and `doubleClick`.\n *\n * ```html\n * <div (singleClick)=\"onSingleClick($event)\" (doubleClick)=\"onDoubleClick($event)\">...</div>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { DoubleClickDirective } from '@talenra/ngx-base/dev-kit';\n * ```\n */\n@Directive({\n  selector: '[singleClick],[doubleClick]',\n  host: {\n    '(click)': 'click$.next($event)',\n  },\n})\nexport class DoubleClickDirective implements OnInit {\n  /**\n   * Delay in milliseconds to wait for a second click event to be considered as double click. Default is 250ms.\n   *\n   * ```html\n   * <div (doubleClick)=\"onDoubleClick($event)\" [doubleClickDelay]=\"500\">...</div>\n   * ```\n   */\n  public doubleClickDelay = input<number>(250);\n\n  /**\n   * Emits single click events. Note that single click events are emitted delayed by `doubleClickDelay` milliseconds.\n   *\n   * ```html\n   * <div (singleClick)=\"onSingleClick($event)\">...</div>\n   * ```\n   */\n  public singleClick = output<MouseEvent>();\n\n  /**\n   * Emits double click events.\n   *\n   * ```html\n   * <div (doubleClick)=\"onSingleClick($event)\">...</div>\n   * ```\n   */\n  public doubleClick = output<MouseEvent>();\n\n  private click$ = new Subject<MouseEvent>();\n  private destroyRef: DestroyRef = inject(DestroyRef);\n\n  /** @internal */\n  ngOnInit() {\n    this.click$\n      .pipe(buffer(this.click$.pipe(debounceTime(this.doubleClickDelay()))), takeUntilDestroyed(this.destroyRef))\n      .subscribe((events: MouseEvent[]) => {\n        if (events.length === 1) this.singleClick.emit(events[0]);\n        else this.doubleClick.emit(events[1]);\n      });\n  }\n}\n","/** @internal */\nconst DEFAULTS = {\n  // The name of the package that contains the deprecated code\n  packageName: '@talenra/ngx-base',\n};\n\n/**\n * Stores the tokens of all warnings that have been printed\n *\n * @internal\n */\nconst memory: string[] = [];\n\n/**\n * Model of arguments passed to deprecation warning\n */\nexport interface DeprecationWarningArguments {\n  /** Name of the affected package, e.g. @talenra/ngx-base */\n  packageName?: string;\n  /** Name of the affected submodule, e.g. 'form-field' for import @talenra/ngx-base/form-field  */\n  submodule?: string;\n  /** Name of the affected class. Hint: use `this.constructor.name` for dynamic classes. */\n  className?: string;\n  /** Name of the affected member (typically a property or method) */\n  member?: string;\n  /** Instructions for the user. What needs to be done? e.g. \"Use xy instead.\" */\n  instructions?: string;\n}\n\n/**\n * Print a deprecation warning to the console.\n *\n * @internal\n */\nexport const deprecationWarning = (args: DeprecationWarningArguments): void => {\n  const { packageName, submodule, className, member, instructions } = { ...DEFAULTS, ...args };\n  // -- Do not throw duplicate warnings --\n  // 1. Create a token from given arguments\n  const token = `${packageName}|${submodule}|${className}|${member}|${instructions}`;\n  // 2. Abort if token is already in memory\n  if (memory.find((item) => item === token)) return;\n  // 3. Store token in memory\n  memory.push(token);\n\n  // Build the entry-point name\n  const ressource: string = [[packageName, submodule].filter(Boolean).join('/'), className].filter(Boolean).join(', ');\n\n  // Finally print the warning to the console\n  console.warn(\n    `${ressource}: ${member} is deprecated and will be removed in a future version. ${instructions} Refer to the upgrade guide for details.`\n  );\n};\n","/**\n * Generate and return a random UUID\n *\n * s. https://stackoverflow.com/a/2117523/5325012\n */\nexport function guid(): string {\n  // https://stackoverflow.com/a/2117523/5325012\n  return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) =>\n    (+c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (+c / 4)))).toString(16)\n  );\n}\n","/**\n * Values returned by the `getPlatform` function.\n *\n * ### Import\n *\n * ```typescript\n * import { Platform } from '@talenra/ngx-base/dev-kit';\n * ```\n */\nexport const Platform = {\n  Linux: 'linux',\n  MacOS: 'macos',\n  Windows: 'windows',\n  Unknown: 'unknown',\n} as const;\n\n/**\n * Type of values returned by the `getPlatform` function.\n *\n * ### Import\n *\n * ```typescript\n * import { TPlatform } from '@talenra/ngx-base/dev-kit';\n * ```\n */\nexport type TPlatform = (typeof Platform)[keyof typeof Platform];\n\n/**\n * Returns the platform/os the user is running on.\n *\n * Used to align the app's behavior with the user's expectations (e.g. keyboard shortcuts).\n *\n * ```typescript\n * import { getPlatform } from '@talenra/ngx-base/dev-kit';\n * console.log(`running on ${getPlatform()}`);\n * ```\n */\nexport function getPlatform(): TPlatform {\n  if (!('navigator' in window)) return Platform.Unknown;\n  let platform: string = '';\n  // Get platform from `navigator.userAgentData` if supported …\n  // s. https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n  if ('userAgentData' in navigator) platform = (navigator.userAgentData as { platform: string }).platform;\n  // … fallback to deprecated `navigator.platform` if not.\n  else platform = navigator.platform;\n  // Normalize string\n  platform = platform.toLowerCase();\n  // Guess and return platform\n  if (platform.startsWith('win')) return Platform.Windows;\n  if (platform.startsWith('mac')) return Platform.MacOS;\n  if (platform.startsWith('linux')) return Platform.Linux;\n  return Platform.Unknown;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}