{"version":3,"file":"tailwind-ng-core.mjs","sources":["../../../packages/core/src/guards/is-arrow-down.ts","../../../packages/core/src/guards/is-arrow-right.ts","../../../packages/core/src/guards/is-arrow-down-or-right.ts","../../../packages/core/src/guards/is-arrow-left.ts","../../../packages/core/src/guards/is-arrow-up.ts","../../../packages/core/src/guards/is-arrow-up-or-down.ts","../../../packages/core/src/guards/is-arrow-up-or-left.ts","../../../packages/core/src/guards/is-enter.ts","../../../packages/core/src/guards/is-space.ts","../../../packages/core/src/guards/is-enter-or-space.ts","../../../packages/core/src/guards/is-escape.ts","../../../packages/core/src/guards/is-html-element.ts","../../../packages/core/src/guards/is-input-element.ts","../../../packages/core/src/guards/is-keyboard-event.ts","../../../packages/core/src/guards/is-label-element.ts","../../../packages/core/src/guards/is-navigation-key.ts","../../../packages/core/src/guards/is-tab.ts","../../../packages/core/src/directives/base.directive.ts","../../../packages/core/src/utils/classname.ts","../../../packages/core/src/directives/option.directive.ts","../../../packages/core/src/tokens/injection-token.factory.ts","../../../packages/core/src/tokens/crypto.token.ts","../../../packages/core/src/tokens/window.token.ts","../../../packages/core/src/services/z-index.service.ts","../../../packages/core/src/utils/type-assertion.ts","../../../packages/core/src/utils/object.util.ts","../../../packages/core/src/utils/benchmark.ts","../../../packages/core/src/utils/merge-config.ts","../../../packages/core/src/directives/popup.directive.ts","../../../packages/core/src/directives/tw-if.directive.ts","../../../packages/core/src/bases/avatar.ts","../../../packages/core/src/bases/badge.ts","../../../packages/core/src/bases/button-group.ts","../../../packages/core/src/bases/dropdown.ts","../../../packages/core/src/bases/dialog.ts","../../../packages/core/src/bases/combobox.ts","../../../packages/core/src/bases/button.ts","../../../packages/core/src/bases/checkbox.ts","../../../packages/core/src/bases/combobox-item.ts","../../../packages/core/src/bases/icon.ts","../../../packages/core/src/bases/input-radio.ts","../../../packages/core/src/bases/input-text.ts","../../../packages/core/src/bases/toggle.ts","../../../packages/core/src/services/theme.service.ts","../../../packages/core/src/tailwind-ng-core.ts"],"sourcesContent":["export type ArrowDownKey = 'ArrowDown'\nexport function isArrowDown(key: ArrowDownKey | (string & {})): key is ArrowDownKey {\n  return key === 'ArrowDown'\n}\n","export type ArrowRightKey = 'ArrowRight'\nexport function isArrowRight(key: ArrowRightKey | (string & {})): key is ArrowRightKey {\n  return key === 'ArrowRight'\n}\n","import { ArrowDownKey, isArrowDown } from './is-arrow-down'\nimport { ArrowRightKey, isArrowRight } from './is-arrow-right'\n\nexport type ArrowDownOrRightKey = ArrowDownKey | ArrowRightKey\nexport function isArrowDownOrRight(\n  key: ArrowDownOrRightKey | (string & {})\n): key is ArrowDownOrRightKey {\n  return isArrowDown(key) || isArrowRight(key)\n}\n","export type ArrowLeftKey = 'ArrowLeft'\nexport function isArrowLeft(key: ArrowLeftKey | (string & {})): key is ArrowLeftKey {\n  return key === 'ArrowLeft'\n}\n","export type ArrowUpKey = 'ArrowUp'\nexport function isArrowUp(key: ArrowUpKey | (string & {})): key is ArrowUpKey {\n  return key === 'ArrowUp'\n}\n","import { ArrowDownKey, isArrowDown } from './is-arrow-down'\nimport { ArrowUpKey, isArrowUp } from './is-arrow-up'\n\nexport function isArrowUpOrDown(\n  key: ArrowUpKey | ArrowDownKey | (string & {})\n): key is ArrowUpKey | ArrowDownKey {\n  return isArrowUp(key) || isArrowDown(key)\n}\n","import { ArrowLeftKey, isArrowLeft } from './is-arrow-left'\nimport { ArrowUpKey, isArrowUp } from './is-arrow-up'\n\nexport type ArrowUpOrLeftKey = ArrowUpKey | ArrowLeftKey\nexport function isArrowUpOrLeft(key: ArrowUpOrLeftKey | (string & {})): key is ArrowUpOrLeftKey {\n  return isArrowUp(key) || isArrowLeft(key)\n}\n","export type EnterKey = 'Enter'\nexport function isEnter(key: string): key is EnterKey {\n  return key === 'Enter'\n}\n","export type SpaceKey = ' '\nexport function isSpace(key: string): key is SpaceKey {\n  return key === ' '\n}\n","import { EnterKey, isEnter } from './is-enter'\nimport { SpaceKey, isSpace } from './is-space'\n\nexport type EnterOrSpaceKey = EnterKey | SpaceKey\nexport function isEnterOrSpace(key: EnterOrSpaceKey | (string & {})): key is EnterOrSpaceKey {\n  return isEnter(key) || isSpace(key)\n}\n","export type EscapeKey = 'Escape' | 'Esc'\nexport function isEscape(key: string): key is EscapeKey {\n  return key === 'Escape' || key === 'Esc'\n}\n","/**\n * Check if the given value is an HTMLElement.\n */\nexport function isHTMLElement(element: unknown): element is HTMLElement {\n  return element instanceof HTMLElement\n}\n","/**\n * Check if the given element is an input element.\n */\nexport function isInputElement(element: unknown): element is HTMLInputElement {\n  return element instanceof HTMLInputElement\n}\n","export function isKeyboardEvent(event: Event): event is KeyboardEvent {\n  return event instanceof KeyboardEvent && event.key !== undefined\n}\n","/**\n * Type guard for HTMLLabelElement\n */\nexport function isLabelElement(element: unknown): element is HTMLLabelElement {\n  return element instanceof HTMLLabelElement\n}\n","import { ArrowDownKey, isArrowDown } from './is-arrow-down'\nimport { ArrowLeftKey, isArrowLeft } from './is-arrow-left'\nimport { ArrowRightKey, isArrowRight } from './is-arrow-right'\nimport { ArrowUpKey, isArrowUp } from './is-arrow-up'\n\nexport type NavigationKey = ArrowUpKey | ArrowDownKey | ArrowLeftKey | ArrowRightKey\nexport function isNavigation(key: NavigationKey | (string & {})): key is NavigationKey {\n  return isArrowDown(key) || isArrowUp(key) || isArrowLeft(key) || isArrowRight(key)\n}\n","export type TabKey = 'Tab'\nexport function isTab(key: string): key is TabKey {\n  return key === 'Tab'\n}\n","import {\n  Directive,\n  ElementRef,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  runInInjectionContext,\n} from '@angular/core'\nimport { DOCUMENT } from '@angular/common'\nimport { isEnterOrSpace, isNavigation } from '../guards'\n\n/**\n * @TailwindNG Component's base props.\n */\nexport interface BaseProps<T extends HTMLElement = HTMLElement> {\n  /**\n   * A property to customize the component's style.\n   *\n   * Get the final class list value using:\n   * - `<componentRef>.classList.value` or\n   * - `<componentRef>.nativeElement.className`.\n   */\n  readonly class: string | null\n  /**\n   * A reference to the component's native element.\n   */\n  readonly nativeElement: T\n  /**\n   * Whether the component is disabled.\n   */\n  readonly disabled: boolean\n  /**\n   * Whether the component is focused.\n   */\n  readonly isFocused: boolean\n  /**\n   * Whether the component or one of its descendant has focus.\n   */\n  readonly hasFocus: boolean\n  /**\n   * Whether the component has visual focus.\n   */\n  readonly hasVisualFocus: boolean\n  /**\n   * Whether the component is hovered.\n   */\n  readonly isHovered: boolean\n}\n\n/**\n * @TailwindNG Component's base actions.\n */\nexport interface BaseActions {\n  /**\n   * Focuses an element and return it.\n   * If it cannot be focused, nothing is done and `undefined` is returned.\n   */\n  focus(options?: FocusOptions): HTMLElement | undefined\n\n  /**\n   * Sets visual focus on an element and return it.\n   * If it cannot be visual focused, nothing is done and `undefined` is returned.\n   * Visual focus is set by adding the `data-visual-focused` attribute on that element.\n   * @NOTE The visual focus appearance should be defined in the component's style/config.\n   */\n  setVisualfocus(options: FocusOptions): HTMLElement | undefined\n  /**\n   * Removes visual focus on target element.\n   *\n   * Default target is the component's native element.\n   */\n  removeVisualfocus(target?: HTMLElement): void\n  /**\n   * Scrolls element into the view. Making it visible to the user.\n   */\n  scrollIntoView(options?: ScrollIntoViewOptions, element?: HTMLElement): void\n}\n\ntype FocusBehavior = 'self' | 'nextSibling' | 'previousSibling' | 'firstChild' | 'lastChild'\n/**\n * Focus options.\n */\nexport interface FocusOptions {\n  /**\n   * The target element to focus. Default is the component's native element.\n   */\n  target?: HTMLElement\n  /**\n   * The focus behavior.\n   *  - `self`: Focus the component's itself. (default)\n   *  - `nextSibling`: Focus the target's next sibling.\n   *  - `previousSibling`: Focus the target's previous sibling.\n   *  - `firstChild`: Focus the target's first child.\n   *  - `lastChild`: Focus the target's last child.\n   *\n   */\n  behavior?: FocusBehavior\n  /**\n   * Whether to prevent scrolling the target element into view. Default it's true.\n   */\n  preventScroll?: boolean\n}\n\n/**\n * @TailwindNG Base component directive.\n */\n@Directive({\n  host: {\n    '[attr.disabled]': 'disabled || null',\n    '[attr.aria-disabled]': 'disabled || null',\n  },\n})\nexport abstract class BaseDirective<T extends HTMLElement = HTMLElement>\n  implements BaseProps<T>, BaseActions, OnInit, OnDestroy\n{\n  readonly nativeElement: T = inject(ElementRef<T>).nativeElement\n  protected readonly _document = inject(DOCUMENT)\n  private readonly _injector = inject(Injector)\n  private _isInitialized = false\n\n  protected get isInitialized(): boolean {\n    return this._isInitialized\n  }\n\n  @Input() class: string | null = null\n\n  private _isDisabled = false\n\n  @Input()\n  set disabled(value: boolean | '') {\n    const newState = value === '' || value\n    if (this._isDisabled !== newState) {\n      this._isDisabled = newState\n    }\n  }\n  get disabled(): boolean {\n    return this._isDisabled || this.nativeElement.matches(':disabled')\n  }\n\n  get isFocused(): boolean {\n    return this.nativeElement === this._document.activeElement\n  }\n\n  get hasFocus(): boolean {\n    return this.nativeElement.contains(this._document.activeElement)\n  }\n\n  get isHovered(): boolean {\n    return this.nativeElement.matches(':hover')\n  }\n\n  ngOnInit(): void {\n    runInInjectionContext(this._injector, () => {\n      this.buildStyle()\n    })\n    this.addEventListeners()\n    this._isInitialized = true\n  }\n\n  ngOnDestroy(): void {\n    this.removeEventListeners()\n  }\n\n  /**\n   * Build the component's style.\n   * @NOTE This method automatically runs inside an injection context, only during the component's initialization. If you have injected dependencies and want to call this method manually, make sure to run it inside an injection context using `runInInjectionContext` Angular's function for instance.\n   */\n  protected abstract buildStyle(): void\n\n  /**\n   * Adds event listeners to the component.\n   *\n   * This method is called during the component's initialization.\n   * Override this method to add additional event listeners.\n   * Those listeners will be removed when the component is destroyed.\n   */\n  protected addEventListeners() {\n    this.nativeElement.addEventListener('click', this.preventInteractionIfDisabled.bind(this), true)\n    this.nativeElement.addEventListener(\n      'pointerdown',\n      this.preventInteractionIfDisabled.bind(this),\n      true\n    )\n    this.nativeElement.addEventListener('keydown', this.onKeyboardEvent.bind(this), false)\n  }\n\n  /**\n   * Removes event listeners from the component.\n   *\n   * This method is called when the component is destroyed.\n   * Override this method to remove additional event listeners.\n   */\n  protected removeEventListeners() {\n    this.nativeElement.removeEventListener(\n      'click',\n      this.preventInteractionIfDisabled.bind(this),\n      true\n    )\n    this.nativeElement.removeEventListener(\n      'pointerdown',\n      this.preventInteractionIfDisabled.bind(this),\n      true\n    )\n    this.nativeElement.removeEventListener('keydown', this.onKeyboardEvent.bind(this), false)\n  }\n\n  // A disabled element should not be interactive.\n  protected preventInteractionIfDisabled(event: Event): void {\n    if (this.disabled) {\n      event.preventDefault()\n      event.stopImmediatePropagation()\n    }\n  }\n\n  protected onKeyboardEvent(event: KeyboardEvent): void {\n    // Prevent scrolling when using arrow up and down keys.\n    if (isEnterOrSpace(event.key) || isNavigation(event.key)) {\n      event.preventDefault()\n    }\n  }\n\n  focus(options: FocusOptions = {}): HTMLElement | undefined {\n    if (this.disabled) return\n    const { behavior = 'self', preventScroll = true } = options\n    let { target = this.nativeElement } = options\n\n    if (!target) return\n\n    if (behavior === 'self') {\n      requestAnimationFrame(() => {\n        target.focus({ preventScroll: preventScroll })\n      })\n      return target\n    }\n\n    switch (behavior) {\n      case 'nextSibling':\n        target = target?.nextElementSibling as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.nextElementSibling as HTMLElement\n        }\n        break\n      case 'previousSibling':\n        target = target?.previousElementSibling as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.previousElementSibling as HTMLElement\n        }\n        break\n      case 'firstChild':\n        target = target?.firstElementChild as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.nextElementSibling as HTMLElement\n        }\n        break\n      case 'lastChild':\n        target = target?.lastElementChild as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.previousElementSibling as HTMLElement\n        }\n        break\n    }\n    requestAnimationFrame(() => {\n      target?.focus({ preventScroll: preventScroll })\n    })\n    return target\n  }\n\n  private currentVisualFocusedElement?: HTMLElement\n  setVisualfocus(options: FocusOptions = {}): HTMLElement | undefined {\n    if (this.disabled) return\n\n    const { behavior = 'self' } = options\n    let { target = this.nativeElement } = options\n\n    if (!target) return\n\n    if (behavior === 'self') {\n      if (this.currentVisualFocusedElement) {\n        this.currentVisualFocusedElement.removeAttribute('data-visual-focused')\n      }\n      target.setAttribute('data-visual-focused', '')\n      this.currentVisualFocusedElement = target\n      return target\n    }\n\n    switch (behavior) {\n      case 'nextSibling':\n        target = target?.nextElementSibling as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.nextElementSibling as HTMLElement\n        }\n        break\n      case 'previousSibling':\n        target = target?.previousElementSibling as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.previousElementSibling as HTMLElement\n        }\n        break\n      case 'firstChild':\n        target = target?.firstElementChild as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.nextElementSibling as HTMLElement\n        }\n        break\n      case 'lastChild':\n        target = target?.lastElementChild as HTMLElement\n        while (target && this.isDisabledElement(target)) {\n          target = target?.previousElementSibling as HTMLElement\n        }\n        break\n    }\n    if (this.currentVisualFocusedElement) {\n      this.currentVisualFocusedElement.removeAttribute('data-visual-focused')\n    }\n    if (target) {\n      target.setAttribute('data-visual-focused', '')\n      this.scrollIntoView({ block: 'nearest', inline: 'nearest' }, target)\n    }\n    this.currentVisualFocusedElement = target\n    return target\n  }\n\n  removeVisualfocus(target: HTMLElement = this.nativeElement): void {\n    if (target === this.currentVisualFocusedElement) {\n      this.currentVisualFocusedElement = undefined\n    }\n    target.removeAttribute('data-visual-focused')\n  }\n\n  scrollIntoView(\n    options: ScrollIntoViewOptions = {},\n    element: HTMLElement = this.nativeElement\n  ): void {\n    requestAnimationFrame(() => {\n      const { block = 'nearest', inline = 'nearest', behavior = 'instant' } = options\n      element.scrollIntoView({\n        block: block,\n        inline: inline,\n        behavior: behavior,\n      })\n    })\n  }\n\n  get hasVisualFocus(): boolean {\n    return this.nativeElement.hasAttribute('data-visual-focused')\n  }\n\n  private isDisabledElement(element: HTMLElement): boolean {\n    return element.hasAttribute('disabled') || element.ariaDisabled === 'true'\n  }\n\n  /**\n   * Generates a basic random ID.\n   */\n  protected randomId(prefix = 'tw'): string {\n    return `${prefix}-${Math.random().toString(16)}`\n  }\n}\n","interface MergeOptions {\n  /** Whether to keep the class-deletor in the target array. */\n  keepClassDeletor?: boolean\n  /** The minimum string length. Default is 2.\n   */\n  minStringLength?: number\n}\n\nconst NON_COLORS = ['transparent', 'white', 'black']\n\n/** Returns an array of merged values from source to target.\n *\n * The first argument is the target and the rest are source arrays.\n * - Replace target values that partially or fully match source value(s).\n * - Adds to target, source value(s) that does not end by the '-' character.\n * @param values The target and source values to resolve.\n * @param options The options for merging.\n * */\nfunction merge(...arg: ClassNameValue[] | [...ClassNameValue[], MergeOptions]): string {\n  if (!arg.length) return ''\n  const lastValue = arg[arg.length - 1]\n  const classNames = [...arg] as ClassNameValue[]\n\n  if (lastValue && typeof lastValue === 'string') {\n    classNames.push(lastValue)\n  }\n  const { keepClassDeletor = false, minStringLength = 2 } = (lastValue as MergeOptions) || {}\n\n  return (\n    (classNames.length &&\n      classNames.reduce((t, s) => {\n        /* Given an array of strings to merge from source to target\n          For each value in source, remove target values that partially or fully match the source value.\n          If the source value don't ends by the character '-' (class-deletor), add it to target.\n        */\n        const temp: string[] = []\n        let target = (t?.length && t.split(' ')) || []\n        const source = (s?.length && s.split(' ')) || []\n\n        for (const className of source) {\n          if (className.length >= minStringLength) {\n            // If the class name is a class-deletor, target values starting with source value is removed.\n            // Ex: bg-red-' remove 'bg-red-*', 'bg-' remove 'bg-*' etc.\n            if (className.charAt(className.length - 1) === '-') {\n              const lengthsEqual = className.length === minStringLength\n              const searchString = className.substring(\n                0,\n                lengthsEqual ? className.length : className.length - 1\n              )\n              target = target.filter((value) => {\n                return !value.startsWith(searchString)\n              })\n              // Keep the class-deletor in the target array.\n              // Usefull when setting the initial class list of a component.\n              if (keepClassDeletor) {\n                temp.push(className)\n              }\n            } else {\n              // ClassName is not a class-deletor\n              let lastIndexOfSeperator = className.lastIndexOf('-')\n              let searchString =\n                lastIndexOfSeperator > 0 ? className.substring(0, lastIndexOfSeperator) : className\n              const foundInSource = className.match(/-/g)?.length ?? 0\n\n              target = target.filter((value) => {\n                const foundInTarget = value.match(/-/g)?.length ?? 0\n                // This is a heuristic formula that allow merging values accurately.\n                const matchPercentage = (value.length * 100) / className.length\n\n                // If target is for instance 'bg-blue-*' and source 'bg-red-*'\n                if (foundInSource >= foundInTarget && foundInSource > 1) {\n                  // If source is for instance 'text-blue-600' and target is 'text-sm'\n                  if (foundInSource > foundInTarget && foundInTarget === 1) {\n                    const found = NON_COLORS.find((x) => value.endsWith(x))\n\n                    // keep non color class that does not have a value in source to merge with.\n                    if (found && !searchString.startsWith(value.substring(0, value.indexOf('-')))) {\n                      return true\n                    }\n\n                    // If target is a non color value and there is a source value to merge with, remove it\n                    // Otherwise, keep target value\n                    return !found\n                  }\n\n                  // If target is for instance 'bg-blue-*' and source is 'bg-blue-*'\n                  if (value.startsWith(searchString)) return false\n\n                  // Else, we need to extract another string segment\n                  // searchString 'bg-red' is truncate to 'bg'\n                  lastIndexOfSeperator = searchString.lastIndexOf('-')\n                  if (lastIndexOfSeperator > 0) {\n                    searchString = searchString.substring(0, lastIndexOfSeperator)\n                  }\n                  return !value.startsWith(searchString)\n                } else if (foundInSource === foundInTarget) {\n                  if (matchPercentage < 150) {\n                    return !value.startsWith(searchString)\n                  } else {\n                    // If target is 'ring-2' and source is 'ring-inset' or\n                    // target is `rounded-md` and source is `ring-2` for instance\n                    if (matchPercentage < 170) {\n                      return true\n                    }\n                    return !value.startsWith(searchString)\n                  }\n                } else if (foundInSource < foundInTarget) {\n                  // If target value is for instance scale-y-100 and source value is scale-100\n                  if (matchPercentage < 150) {\n                    return !value.startsWith(searchString)\n                  }\n                }\n                return true\n              })\n              temp.push(className)\n            }\n          }\n        }\n        return [...target, ...temp].join(' ')\n      }, lastValue as string)) ||\n    ''\n  )\n}\nexport type ClassNameValue = string | undefined | null\n\n/** Transfroms string value to an array then returns it.\n * Returns an empty array if value is undefined. */\nexport function stringToArray(value: unknown, separator = ' '): string[] {\n  return typeof value === 'string' ? (value as string).split(separator) : []\n}\n\n/** Returns a string of merged class names from right to left. */\nexport const classNameMerge = merge\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from './base.directive'\nimport {\n  isArrowDownOrRight,\n  isArrowUpOrDown,\n  isArrowUpOrLeft,\n  isEnterOrSpace,\n  isSpace,\n} from '../guards'\nimport { classNameMerge } from '../utils/classname'\n\n@Directive({\n  selector: 'tw-option, [tw-option], [twOption]',\n  exportAs: 'twOption',\n  host: {\n    role: 'option',\n    '[tabindex]': 'disabled ? null : 0',\n  },\n})\nexport class OptionDirective extends BaseDirective {\n  protected override buildStyle(): void {\n    this.nativeElement.className = classNameMerge(\n      'focus:bg-black/5 focus:dark:bg-white/5 focus:outline-0',\n      this.class\n    )\n  }\n\n  protected override addEventListeners(): void {\n    super.addEventListeners()\n    this.nativeElement.addEventListener('keyup', this.onKeyup.bind(this), false)\n  }\n  protected override removeEventListeners(): void {\n    super.removeEventListeners()\n    this.nativeElement.removeEventListener('keyup', this.onKeyup.bind(this), false)\n  }\n\n  protected onKeyup(event: KeyboardEvent): void {\n    if (isArrowUpOrDown(event.key) || isSpace(event.key)) {\n      event.preventDefault()\n      event.stopPropagation()\n    }\n    if (isEnterOrSpace(event.key)) {\n      this.nativeElement.click()\n    } else if (isArrowDownOrRight(event.key)) {\n      if (!this.focus({ behavior: 'nextSibling' })) {\n        this.focus({\n          behavior: 'nextSibling',\n          target: this.nativeElement.parentElement!,\n        })\n      }\n    } else if (isArrowUpOrLeft(event.key)) {\n      if (!this.focus({ behavior: 'previousSibling' })) {\n        this.focus({\n          behavior: 'previousSibling',\n          target: this.nativeElement.parentElement!,\n        })\n      }\n    }\n  }\n}\n","import { InjectionToken } from '@angular/core'\n\nexport abstract class InjectionTokenFactory {\n  static create<T>(token: T, desc: string): InjectionToken<T> {\n    return new InjectionToken<T>(desc, {\n      providedIn: 'root',\n      factory: () => token,\n    })\n  }\n}\n","import { InjectionTokenFactory } from './injection-token.factory'\n\n/**\n * Basic cryptography features available in the root EnvironmentInjector.\n * It allows access to a cryptographically strong random number generator and to cryptographic primitives.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto)\n */\nexport const CRYPTO = InjectionTokenFactory.create(crypto, 'CRYPTO')\n","import { InjectionTokenFactory } from './injection-token.factory'\n\nexport const WINDOW = InjectionTokenFactory.create(window, 'WINDOW')\n","import { inject, Injectable } from '@angular/core'\nimport { InjectionTokenFactory } from '../tokens'\n\n/**\n * @TailwindNG Z-Index Seed\n * @returns The z-index seed value. Default is 50.\n */\nexport const Z_INDEX_SEED = InjectionTokenFactory.create(50, 'Z_INDEX_SEED')\n\n/**\n * @TailwindNG ZIndexer - A lightweight z-index service.\n * - Provides a unique z-index value on each call to `next`.\n * - The first z-index value is provided by the `Z_INDEX_SEED` injection token.\n * - The seed value can be overridden by providing a new value. default is 50.\n * @Example\n * ```ts\n *  providers: [ { provide: Z_INDEX_SEED, useValue: 100 }, ZIndexer ]\n * ```\n * @returns The z-index value\n */\n@Injectable({ providedIn: 'root' })\nexport class ZIndexer {\n  private zIndex = inject(Z_INDEX_SEED)\n  get next(): number {\n    return this.zIndex++\n  }\n\n  get current(): number {\n    return this.zIndex\n  }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Config = Record<string, any>\nexport function isObject(value: unknown): value is object {\n  return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nexport function isConfigObject(value: unknown): value is Config {\n  return isObject(value) && !isEmptyObject(value)\n}\n\nexport function isEmptyConfigObject(value: unknown): value is Config {\n  return isObject(value) && isEmptyObject(value)\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport function isEmptyObject(value: unknown): value is {} {\n  return isObject(value) && Object.keys(value || {}).length === 0\n}\n// eslint-disable-next-line  @typescript-eslint/no-unsafe-function-type\nexport function isFunction(value: unknown): value is Function {\n  return typeof value === 'function'\n}\n\nexport function isString(value: unknown): value is string {\n  return typeof value === 'string'\n}\n\nexport function isNumber(value: unknown): value is number {\n  return typeof value === 'number'\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean'\n}\n\n/**\n * Returns true if value is an array and has at least one element, otherwise false.\n */\nexport function isArray(value: unknown): value is [] {\n  return Array.isArray(value) && value.length > 0\n}\n\nexport function isUndefined(value: unknown): value is undefined {\n  return typeof value === 'undefined'\n}\n\nexport function isUndefinedOrNull(value: unknown): value is undefined | null {\n  return isUndefined(value) || value === null\n}\n","import { classNameMerge } from './classname'\nimport {\n  isArray,\n  isConfigObject,\n  isEmptyConfigObject,\n  isEmptyObject,\n  isObject,\n  isString,\n} from './type-assertion'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Config = Record<string, any>\n/** Returns the object properties values, including properties values of it child objects in a string.*/\nfunction toString(obj: Config, separator = ' '): string {\n  /* Given an object with values to extract\n\n  1. If the object is undefined, return an empty string\n  2. Else, create a variable named res and initialized with an empty string\n  3. Iterate over the properties values of the object.\n    For each property:\n      1. If the property value is a string, add a single space on it then add it in res\n      2. Else, if it is an object, make a recursion on it and store the result in res\n  4. Return res.\n  */\n  let res = ''\n\n  if (!isObject(obj)) return res\n\n  for (const value of Object.values(obj)) {\n    if (isString(value)) {\n      if (res.length === 0) {\n        res += value\n      } else {\n        res += separator + value\n      }\n    } else if (isObject(value)) {\n      res += separator + toString(value, separator)\n    }\n  }\n  return res\n}\n\n/** Returns the object properties values, including properties values of it child objects in an array.*/\nfunction toArray(obj: Config): string[] {\n  /* Given an object with values to extract\n\n  1. If the object is undefined, return an empty []\n  2. Else, create a variable named res and initialized with an empty []\n  3. Iterate over the properties values of the object.\n    For each property:\n      1. If the property value is a string, add it in res\n      2. Else, if it is an object, make a recursion on it and store the result in res\n  4. Return res.\n  */\n  const res: string[] = []\n\n  if (!isObject(obj) || isEmptyObject(obj)) return res\n\n  for (const value of Object.values(obj)) {\n    if (isString(value)) {\n      res.push(value)\n    } else if (isArray(value)) {\n      res.concat(value)\n    } else if (isObject(value)) {\n      res.concat(toArray(value))\n    }\n  }\n  return res\n}\n\n/** Simply merges objects from source to target.\n * @NOTE Empty child objet(s) of source are ignored during the merge.\n * @param target - The target object to update\n * @param source - The source objects to merge\n * @returns The merged object\n */\nfunction simpleMerge<T extends Config>(...arg: (T | Partial<T>)[]): T {\n  /* Given a list of objects to merge in a target object\n\n  1. Loop through each object of source objects\n    1. Loop through each property in the current source object\n      1. If target object has a matching property and it's an object,\n        make a recursion call with the target object property as target\n        and the current source object property as source.\n      2. Else if it matches and it's not an object,\n        update the target value with the current source object value\n  2. Return the target object\n  */\n\n  const [target, ...source] = arg\n\n  if (!target) return {} as T\n\n  for (const obj of source) {\n    for (const k in obj) {\n      if (isString(obj[k])) {\n        if (isString(target[k])) {\n          const s = obj[k] as string\n          const t = target[k] as string\n          const res = classNameMerge(t, s, {\n            keepClassDeletor: true,\n          })\n          Object.assign(target, { [k]: res })\n        } else {\n          Object.assign(target, { [k]: obj[k] })\n        }\n      } else if (isConfigObject(obj[k])) {\n        if (!target[k]) {\n          Object.assign(target, { [k]: obj[k] })\n        } else if (isConfigObject(target[k])) {\n          simpleMerge(target[k], obj[k])\n        }\n      }\n    }\n  }\n  return target as T\n}\n\n/** Strictly merges objects from source to target.\n * @NOTE Empty child objet(s) of source are not ignored during the merge.\n * @param target - The target object to update\n * @param source - The source object to merge\n * @returns The merged object\n */\nfunction strictMerge<T extends Config>(...arg: (T | Partial<T>)[]): T {\n  /* Given a list of objects to merge in target object\n    1. Loop through each object in source objects\n      1. If source object is empty, return it.\n      2. Else, loop through each property of the current source object\n        1. If target object has a matching property and it is an object,\n          make a recursion call with the target object property as target\n          and the current source object property as source\n          and store the result in the target object property\n        2. Else if it matches and it's not an object,\n          update the target value with the current source object value\n    2. Return the target object\n   */\n\n  const [target, ...source] = arg\n\n  if (!target) return {} as T\n\n  for (const obj of source) {\n    for (const k in obj) {\n      if (isString(obj[k])) {\n        Object.assign(target, { [k]: obj[k] })\n      } else if (isEmptyConfigObject(obj[k])) {\n        Object.assign(target, { [k]: obj[k] })\n      } else if (isConfigObject(obj[k]) && isConfigObject(target[k])) {\n        strictMerge(target[k], obj[k])\n      }\n    }\n  }\n  return target as T\n}\n\n/**\n * Object helper class with static methods for object manipulation.\n */\nexport abstract class Obj {\n  /** Returns the object properties values,\n   * including properties values of it child objects in a string.\n   * */\n  static readonly toString = toString\n\n  /** Returns the object properties values,\n   * including properties values of it child objects in an array.\n   * */\n  static readonly toArray = toArray\n  static readonly merge = {\n    /**\n     * Merges objects from source to target ignoring empty child objects from source.\n     */\n    simple: simpleMerge,\n    /**\n     * Merges objects from source to target including empty child objects from source. If a property exists in both objects, the value from the source object will be used.\n     */\n    strict: strictMerge,\n  }\n}\n","export function benchmark(runners: Runner[], times = 1, round = 1) {\n  for (const runner of runners) {\n    for (let r = 1; r <= round; r++) {\n      console.time(`${runner.label} ran ${times} time(s)`)\n      for (let i = 0; i < times; i++) {\n        runner.run()\n      }\n      console.timeEnd(`${runner.label} ran ${times} time(s)`)\n    }\n    console.log('')\n  }\n}\ninterface Runner {\n  label: string\n  run: CallableFunction\n}\n","import { Obj } from './object.util'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Config = Record<string, any>\n\n/**\n * Merges configurations into a single configuration object and returns it.\n * @param arg Configurations to merge.\n * @param options Options for merging.\n */\nexport function mergeConfig<T extends Config>(\n  arg: [...(T | Partial<T>)[]],\n  { strict = false }: MergeOptions = {}\n): T {\n  if (strict) {\n    return Obj.merge.strict(...arg)\n  }\n  return Obj.merge.simple(...arg)\n}\n\ninterface MergeOptions {\n  /**\n   * If true, empty child object(s) of source are not ignored during the merge. Default is false.\n   */\n  strict?: boolean\n}\n","import { Directive, Input, inject, model, output } from '@angular/core'\nimport { BaseDirective } from './base.directive'\nimport { ZIndexer } from '../services/z-index.service'\nimport { isObject } from '../utils'\nimport { ModelSignal, OutputEmitterRef } from '@angular/core'\nimport { BaseActions, BaseProps } from './base.directive'\n\n/**\n * @TailwindNG Popup base props.\n */\nexport interface PopupProps<T extends HTMLElement = HTMLElement> extends BaseProps<T> {\n  readonly id: string\n  /**\n   * Restores focus to the popup's trigger when the popup closes.\n   */\n  readonly restoreFocus?: boolean | PopupTrigger\n  readonly isOpened: ModelSignal<boolean>\n}\nexport interface PopupTrigger {\n  focus(): unknown\n}\n\n/**\n * @TailwindNG Popup basic actions.\n */\nexport interface PopupBaseActions extends BaseActions {\n  /**\n   * Toggles the component.\n   */\n  toggle(): void\n  /**\n   * Opens the component.\n   */\n  open(): void\n  /**\n   * Closes the component.\n   */\n  close(): void\n}\n\n/**\n * @TailwindNG Popup advanced actions.\n */\nexport interface PopupAdvancedActions {\n  /**\n   * Closes the component after the given delay in milliseconds without `ms` suffix.\n   * - Acceptable delay is between `[1000, 10_000]`. The default value is `2000`.\n   * - If the given delay is out of range, the default value is used.\n   * @param delay The delay in milliseconds.\n   */\n  closeAfter(delay: number): void\n}\n\nexport interface Popup<T extends HTMLElement = HTMLElement>\n  extends PopupProps<T>,\n    PopupBaseActions,\n    PopupAdvancedActions {\n  /**\n   * A signal that indicates whether the popup is opened. Emits `true` when the popup opens and `false` when it closes.\n   */\n  readonly opened: OutputEmitterRef<Popup>\n  /**\n   * Event emitted when the popup closes.\n   */\n  readonly closed: OutputEmitterRef<Popup>\n}\n\n@Directive({\n  host: {\n    '[attr.id]': 'id',\n    '[attr.open]': 'isOpened() || null',\n    '[attr.aria-expanded]': 'isOpened()',\n  },\n})\nexport abstract class PopupDirective<T extends HTMLElement = HTMLElement>\n  extends BaseDirective<T>\n  implements Popup<T>\n{\n  private readonly _zIndex = inject(ZIndexer)\n  @Input() id = this.randomId('popup')\n  @Input() restoreFocus: boolean | PopupTrigger = false\n  readonly isOpened = model(false)\n  readonly opened = output<Popup>()\n  readonly closed = output<Popup>()\n\n  protected get zIndex(): string {\n    return `${this._zIndex.next}`\n  }\n\n  toggle(): void {\n    if (this.isOpened()) {\n      this.close()\n    } else {\n      this.open()\n    }\n  }\n\n  private trigger: unknown = null\n\n  open(): void {\n    if (!this.isOpened()) {\n      if (this.restoreFocus && !this.trigger) {\n        if (isObject(this.restoreFocus) && 'focus' in this.restoreFocus) {\n          this.trigger = this.restoreFocus\n        } else {\n          this.trigger = this._document.activeElement as HTMLElement\n        }\n      }\n      this.isOpened.set(true)\n      this.nativeElement.style.zIndex = this.zIndex\n      this.opened.emit(this)\n    }\n  }\n\n  close(): void {\n    if (this.isOpened()) {\n      if (this.restoreFocus && this.trigger) {\n        ;(this.trigger as PopupTrigger).focus()\n      }\n      this.isOpened.set(false)\n      this.nativeElement.style.zIndex = ''\n      this.closed.emit(this)\n    }\n  }\n\n  private timer: unknown\n\n  closeAfter(delay?: number): void {\n    if (!isAcceptableDelay(delay || 0)) {\n      delay = 2000\n    }\n    if (this.timer) return\n    this.timer = setInterval(() => {\n      if (!this.isHovered) {\n        this.close()\n        clearInterval(this.timer as number)\n        this.timer = undefined\n      }\n    }, delay)\n  }\n}\n\nfunction isAcceptableDelay(delay: number): boolean {\n  return delay >= 1000 && delay <= 1000 * 10\n}\n","import { Directive, inject, Input, TemplateRef, ViewContainerRef } from '@angular/core'\n\n/**\n * A structural directive that conditionally render a template in the view and defer its removal in the DOM.\n * As Tailwind NG components animations are Tailwind based, this directive it used to\n * defer the removal of template in the view using the given delay if set or after 300ms.\n * For eager removal, use the Angular built-in `*ngIf` or `@if` directive.\n * @publicApi\n */\n@Directive({ selector: '[twIf]' })\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class TwIf {\n  private readonly templateRef = inject(TemplateRef)\n  private readonly viewContainerRef = inject(ViewContainerRef)\n\n  /**\n   * The delay in milliseconds before removing the component from the view.\n   * Default value is `300`ms. The delay must be between 25ms and 5000ms.\n   * Prefer using the Angular built-in `*ngIf` or `@if` directive for eager removal.\n   */\n  @Input() set twIfDelay(delay: number) {\n    if (delay >= 25 && delay <= 5000) {\n      this.delay = delay\n    }\n  }\n\n  private _shouldDisplay = false\n\n  /**\n   * The condition that determines whether the component should be rendered or not.\n   */\n  @Input() set twIf(condition: boolean) {\n    this._shouldDisplay = condition\n    // Only render the component if the condition is true and\n    // the component is not already rendered.\n    if (this._shouldDisplay && !this.timer) {\n      this.viewContainerRef.createEmbeddedView(this.templateRef)\n    } else {\n      this.deferRemoval()\n    }\n  }\n\n  private delay = 300\n  private timer: unknown\n\n  private deferRemoval() {\n    // Nothing should be done if there is already a removal scheduled.\n    if (this.timer) return\n    this.timer = setTimeout(() => {\n      // Only remove the component if the condition is still false.\n      // This is to avoid removing a component that was supposed\n      // to be removed at the time of the removal schedule but\n      // it condition become true before the end of the removal delay.\n      if (!this._shouldDisplay) {\n        this.viewContainerRef.clear()\n      }\n      this.timer = undefined\n    }, this.delay)\n  }\n}\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { SizeOption } from '../types/size-options.type'\nimport { BaseActions, BaseProps } from '../directives'\n\n/**\n * @TailwindNG Avatar component interface.\n */\nexport interface Avatar extends BaseProps, BaseActions {\n  size: SizeOption\n}\n\nexport interface AvatarConfig extends Partial<Record<SizeOption, string>> {\n  className?: string\n}\n\n/**\n * Checks if the component is an Avatar.\n * If so, you can safely access the Avatar members inside this block scope.\n */\nexport function isAvatar(component: unknown): component is Avatar {\n  return component instanceof AvatarBase\n}\nexport const AVATAR_CONFIG = InjectionTokenFactory.create<Partial<AvatarConfig>>(\n  {},\n  'AVATAR_CONFIG'\n)\n\n@Directive()\nexport abstract class AvatarBase extends BaseDirective {}\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { SizeOption } from '../types/size-options.type'\nimport { BaseActions, BaseProps } from '../directives'\n\n/**\n * @TailwindNG Badge component interface.\n */\nexport interface Badge extends BaseProps, BaseActions {\n  size: SizeOption\n}\n\nexport interface BadgeConfig extends Partial<Record<SizeOption, string>> {\n  className?: string\n}\n\n/**\n * Checks if the component is a Badge.\n * If so, you can safely access the Badge members inside this block scope.\n */\nexport function isBadge(component: unknown): component is Badge {\n  return component instanceof BadgeBase\n}\nexport const BADGE_CONFIG = InjectionTokenFactory.create<Partial<BadgeConfig>>({}, 'BADGE_CONFIG')\n\n@Directive()\nexport abstract class BadgeBase extends BaseDirective {}\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\n\nexport const BUTTON_GROUP_CONFIG = InjectionTokenFactory.create<string>('', 'BUTTON_GROUP_CONFIG')\n\n@Directive()\nexport abstract class ButtonGroupBase extends BaseDirective {}\n","import { Directive, forwardRef } from '@angular/core'\nimport { PopupDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { Popup } from '../directives'\n\n/**\n * @TailwindNG Dropdown component interface.\n */\nexport interface Dropdown extends Popup {\n  /**\n   * Close the dropdown when the user clicks outside of it.\n   */\n  closeOnBlur?: boolean\n}\n\nexport const DROPDOWN_CONFIG = InjectionTokenFactory.create<string>('', 'DROPDOWN_CONFIG')\n\n@Directive({\n  host: {\n    '[attr.tabindex]': '-1',\n  },\n  providers: [\n    {\n      provide: PopupDirective,\n      useExisting: forwardRef(() => DropdownBase),\n    },\n  ],\n})\nexport abstract class DropdownBase extends PopupDirective {}\n\n/**\n * Checks if the component is a Dropdown.\n * If so, you can safely access the Dropdown members inside this block scope.\n */\nexport function isDropdown(component: unknown): component is Dropdown {\n  return component instanceof DropdownBase\n}\n","import { Directive, forwardRef, Input, OnInit } from '@angular/core'\nimport { PopupDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { PopupAdvancedActions, PopupBaseActions, PopupProps } from '../directives'\n\n/**\n * @TailwindNG Dialog component interface.\n */\nexport interface Dialog extends PopupProps, PopupBaseActions, PopupAdvancedActions {\n  /**\n   * Whether the dialog should close automatically after the given `displayDuration`.\n   * Default is `false`.\n   */\n  readonly autoClose: boolean\n  /**\n   * Whether to automatically focus the dialog's primary action when its open.\n   * If no primary action button is found, the dialog's icon (if any), will be focused instead.\n   * Default is `true`.\n   */\n  readonly autoFocus: boolean\n  /**\n   * The delay to display the dialog before it auto closes. Only applicable if `autoClose` is `true`.\n   * - Range in milliseconds: `[min: 1000, max: 10000]`; Default is `2000`.\n   * - If the given delay is outside this range, the default delay will be used.\n   */\n  readonly displayDelay?: number\n  /**\n   * Whether the dialog is modal. If `true`, the dialog will be modal and will prevent any interaction with the rest of the page.\n   * Default is `true`.\n   */\n  readonly isModal: boolean\n}\n\nexport interface DialogConfig {\n  scrim: string\n  container: string\n  backdrop: string\n}\n\nexport const DIALOG_CONFIG = InjectionTokenFactory.create<Partial<DialogConfig>>(\n  {},\n  'DIALOG_CONFIG'\n)\n\n@Directive({\n  host: {\n    role: 'dialog',\n    '[attr.aria-modal]': 'isModal',\n  },\n  providers: [\n    {\n      provide: PopupDirective,\n      useExisting: forwardRef(() => DialogBase),\n    },\n  ],\n})\nexport abstract class DialogBase\n  extends PopupDirective<HTMLDialogElement>\n  implements Dialog, OnInit\n{\n  @Input() isModal = true\n  @Input() displayDelay?: number\n  @Input() autoClose = false\n  @Input() autoFocus = true\n  @Input() override restoreFocus = true\n\n  override ngOnInit(): void {\n    super.ngOnInit()\n    if (this.autoClose) {\n      this.restoreFocus = false\n    }\n    this.opened.subscribe(() => {\n      if (this.autoFocus) {\n        this.focusPrimaryAction()\n      }\n      if (this.autoClose) {\n        this.closeAfter(this.displayDelay)\n      }\n      if (!this.nativeElement.ariaLabel) {\n        queueMicrotask(() => {\n          this.nativeElement.ariaLabel =\n            this.nativeElement.querySelector('h1')?.textContent?.trim() || null\n          if (!this.nativeElement.ariaLabel) {\n            this.nativeElement.ariaLabel =\n              this.nativeElement.querySelector('h2')?.textContent?.trim() || null\n          }\n          if (!this.nativeElement.ariaLabel) {\n            this.nativeElement.ariaLabel =\n              this.nativeElement.querySelector('h3')?.textContent?.trim() || null\n          }\n        })\n      }\n    })\n  }\n\n  private primaryAction: HTMLElement | null = null\n  private primaryActionQueried = false\n  protected focusPrimaryAction() {\n    if (this.primaryAction) {\n      setTimeout(() => this.primaryAction?.focus(), 100)\n    } else if (!this.primaryAction && !this.primaryActionQueried) {\n      this.primaryActionQueried = true\n      setTimeout(() => {\n        this.primaryAction = this.nativeElement.querySelector(\n          'button[variant=primary],tw-button[variant=primary]'\n        ) as HTMLElement\n        this.primaryAction?.focus()\n      }, 100)\n    }\n  }\n}\n\n/**\n * Checks if the component is a Dialog.\n * If so, you can safely access the Dialog members inside this block scope.\n */\nexport function isDialog(component: unknown): component is Dialog {\n  return component instanceof DialogBase\n}\n","import { Directive, forwardRef, Input } from '@angular/core'\nimport { PopupDirective, PopupBaseActions, Popup, PopupProps } from '../directives'\nimport { isArrowUp } from '../guards'\nimport { ModelSignal, OutputEmitterRef, Signal } from '@angular/core'\nimport { ComboboxItem } from './combobox-item'\nimport { InputText } from './input-text'\n\n/**\n * @TailwindNG Combobox component state\n */\nexport interface ComboboxState extends PopupProps {\n  /**\n   * The combobox's input text.\n   */\n  readonly input: Signal<InputText | undefined>\n  /**\n   * The combobox's dropdown.\n   */\n  readonly dropdown: Signal<Popup | undefined>\n  /**\n   * The combobox's selection mode. Default is 'single'.\n   */\n  readonly selectionMode: ComboboxSelectionMode\n  /**\n   * The combobox's selected values.\n   */\n  readonly selectedValues: ModelSignal<Set<string>>\n  /**\n   * The combobox's active element.\n   */\n  readonly activeElement?: HTMLElement\n}\n\nexport type ComboboxSelectionMode = 'single' | 'multi'\n\n/**\n * @TailwindNG Combobox component actions\n */\nexport interface ComboboxActions extends PopupBaseActions {\n  /**\n   * Resets the combobox.\n   */\n  reset(): void\n  /**\n   * Sets the combobox's active item.\n   * @param item The item to set as active.\n   */\n  setActiveItem(item: ComboboxItem): void\n}\n\nexport interface Combobox extends ComboboxState, ComboboxActions {\n  /**\n   * Emits when the combobox is reset.\n   */\n  readonly resetted: OutputEmitterRef<void>\n}\n\n/**\n * Checks if the component is a Combobox.\n * If so, you can safely access the Combobox members inside this block scope.\n */\nexport function isCombobox(component: unknown): component is Combobox {\n  return component instanceof ComboboxBase\n}\n\n@Directive({\n  host: {\n    role: 'combobox',\n    '[attr.aria-expanded]': 'isOpened()',\n    '[attr.aria-activedescendant]': 'activeElement?.textContent?.trim() || null',\n  },\n  providers: [\n    {\n      provide: PopupDirective,\n      useExisting: forwardRef(() => ComboboxBase),\n    },\n  ],\n})\nexport abstract class ComboboxBase extends PopupDirective {\n  activeElement?: HTMLElement\n  @Input() override id = this.randomId('combobox')\n\n  // Override default keyboard event prevention.\n  protected override onKeyboardEvent(event: Event): void {\n    this.preventInteractionIfDisabled(event)\n  }\n\n  // prevent the cursor to move left inside the input when pressing the arrow up key.\n  protected onKeydown(event: KeyboardEvent): void {\n    if (isArrowUp(event.key)) {\n      event.preventDefault()\n    }\n  }\n\n  protected override addEventListeners(): void {\n    super.addEventListeners()\n    this.nativeElement.addEventListener('keydown', this.onKeydown.bind(this), true)\n  }\n\n  protected override removeEventListeners(): void {\n    super.removeEventListeners()\n    this.nativeElement.removeEventListener('keydown', this.onKeydown.bind(this), true)\n  }\n}\n","import { Directive, Input, OnInit } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { Popup } from '../directives'\nimport { isDropdown } from './dropdown'\nimport { isDialog } from './dialog'\nimport { isCombobox } from './combobox'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { SizeOption } from '../types/size-options.type'\nimport {\n  isArrowDown,\n  isArrowDownOrRight,\n  isArrowUp,\n  isArrowUpOrDown,\n  isArrowUpOrLeft,\n  isEnterOrSpace,\n  isEscape,\n  isTab,\n} from '../guards'\n\n/**\n * @TailwindNG Button component interface.\n */\nexport interface Button {\n  readonly popup?: Popup\n  readonly size: SizeOption\n  readonly isFab: boolean\n  readonly tabIndex: number\n  readonly variant: ButtonVariant\n}\n/** Button variant */\nexport type ButtonVariant = 'primary' | 'secondary' | 'tonal' | 'text'\n\nexport interface ButtonConfig\n  extends Partial<Record<ButtonVariant, string> & Record<SizeOption, string>> {\n  base?: string\n  fab?: string\n}\n\nexport const BUTTON_CONFIG = InjectionTokenFactory.create<Partial<ButtonConfig>>(\n  {},\n  'BUTTON_CONFIG'\n)\n\n@Directive({\n  host: {\n    '[attr.variant]': 'variant',\n    '[tabindex]': 'disabled ? null : tabIndex',\n    '[attr.aria-expanded]': 'isPopupExpanded || null',\n  },\n})\nexport abstract class ButtonBase\n  extends BaseDirective<HTMLButtonElement>\n  implements Button, OnInit\n{\n  @Input() tabIndex = 0\n  @Input() popup?: Popup\n  @Input() isFab = false\n  @Input() size: SizeOption = 'md'\n  @Input() variant: ButtonVariant = 'primary'\n\n  override ngOnInit(): void {\n    super.ngOnInit()\n    if (this.popup) {\n      if (isDropdown(this.popup)) {\n        this.nativeElement.setAttribute('aria-haspopup', 'menu')\n      } else if (isDialog(this.popup)) {\n        this.nativeElement.setAttribute('aria-haspopup', 'dialog')\n      } else if (isCombobox(this.popup)) {\n        this.nativeElement.setAttribute('aria-haspopup', 'listbox')\n      } else {\n        this.nativeElement.setAttribute('aria-haspopup', 'true')\n      }\n    }\n  }\n\n  protected get isPopupExpanded(): boolean {\n    return this.popup?.isOpened() || false\n  }\n\n  protected onPointerUp(event: Event): void {\n    event.stopPropagation()\n    if (isDropdown(this.popup)) {\n      setTimeout(() => {\n        if (this.popup?.isOpened()) {\n          this.popup?.focus({ behavior: 'firstChild' })\n        }\n      }, 100)\n    }\n  }\n\n  protected onKeyup(event: KeyboardEvent): void {\n    if (!isEscape(event.key)) {\n      event.stopPropagation()\n    }\n    if (isTab(event.key)) {\n      event.preventDefault()\n    } else if (isEnterOrSpace(event.key)) {\n      this.nativeElement.click()\n      if (isDropdown(this.popup) && this.popup.isOpened()) {\n        setTimeout(() => {\n          this.popup?.focus({ behavior: 'firstChild' })\n        }, 50)\n      }\n    } else if (isArrowUpOrDown(event.key) && isDropdown(this.popup)) {\n      if (isArrowDown(event.key)) {\n        if (!this.popup.isOpened()) {\n          this.popup.open()\n        }\n        setTimeout(() => {\n          this.popup?.focus({ behavior: 'firstChild' })\n        }, 50)\n      } else if (isArrowUp(event.key)) {\n        if (this.popup.isOpened()) {\n          this.popup.close()\n        } else {\n          this.popup.open()\n          setTimeout(() => {\n            this.popup?.focus({ behavior: 'lastChild' })\n          }, 50)\n        }\n      }\n    } else if (isArrowDownOrRight(event.key)) {\n      if (!this.focus({ behavior: 'nextSibling' })) {\n        this.focus({\n          behavior: 'firstChild',\n          target: this.nativeElement.parentElement as HTMLElement,\n        })\n      }\n    } else if (isArrowUpOrLeft(event.key)) {\n      if (!this.focus({ behavior: 'previousSibling' })) {\n        this.focus({\n          behavior: 'lastChild',\n          target: this.nativeElement.parentElement as HTMLElement,\n        })\n      }\n    }\n  }\n\n  protected override addEventListeners(): void {\n    super.addEventListeners()\n    if (this.popup) {\n      this.nativeElement.addEventListener('pointerup', this.onPointerUp.bind(this), false)\n    }\n    this.nativeElement.addEventListener('keyup', this.onKeyup.bind(this), false)\n  }\n\n  protected override removeEventListeners(): void {\n    super.removeEventListeners()\n    if (this.popup) {\n      this.nativeElement.removeEventListener('pointerup', this.onPointerUp.bind(this), false)\n    }\n    this.nativeElement.removeEventListener('keyup', this.onKeyup.bind(this), false)\n  }\n}\n\n/**\n * Checks if the component is a Button.\n * If so, you can have access to the Button members inside this block scope.\n */\nexport function isButton(component: unknown): component is Button {\n  return component instanceof ButtonBase\n}\n\n/**\n * Checks if the component is a Primary Button.\n * If so, you can safely access the Button members inside this block scope.\n */\nexport function isPrimaryButton(component: unknown): component is Button {\n  return isButton(component) && component.variant === 'primary'\n}\n\n/**\n * Checks if the component is a Secondary Button.\n * If so, you can safely access the Button members inside this block scope.\n */\nexport function isSecondaryButton(component: unknown): component is Button {\n  return isButton(component) && component.variant === 'secondary'\n}\n\n/**\n * Checks if the component is a Tonal Button.\n * If so, you can safely access the Button members inside this block scope.\n */\nexport function isTonalButton(component: unknown): component is Button {\n  return isButton(component) && component.variant === 'tonal'\n}\n\n/**\n * Checks if the component is a Text Button.\n * If so, you can safely access the Button members inside this block scope.\n */\nexport function isTextButton(component: unknown): component is Button {\n  return isButton(component) && component.variant === 'text'\n}\n","import { Directive, OutputEmitterRef } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { SizeOption } from '../types/size-options.type'\n\n/**\n * The mutable properties of the checkbox.\n */\nexport interface CheckboxMutableProps {\n  /**\n   * Whether the checkbox is checked. default is false\n   */\n  readonly checked: boolean\n  /**\n   * Whether the checkbox is indeterminate. default is false\n   */\n  readonly indeterminate?: boolean\n  /**\n   * The checkbox's children if any.\n   */\n  readonly children?: Checkbox[]\n}\n\nexport interface CheckboxActions {\n  /**\n   * Toggles the checkbox from origin.\n   * @param options The options for the toggle.\n   * @returns A promise that resolves with the changes.\n   */\n  toggle(options?: CheckboxToggleOptions): void\n}\n\nexport interface CheckboxEvents {\n  /**\n   * Emits when the checkbox state changes.\n   */\n  readonly changes: OutputEmitterRef<CheckboxMutableProps>\n  /**\n   * Emits when the checkbox checked state changes.\n   */\n  readonly checkedChange: OutputEmitterRef<boolean>\n  /**\n   * Emits when the checkbox indeterminate state changes.\n   */\n  readonly indeterminateChange: OutputEmitterRef<boolean>\n}\n\ntype EventOrigin = 'self' | 'parent' | 'child'\nexport interface CheckboxToggleOptions {\n  /**\n   * The origin of the event. Default is `'self'`.\n   */\n  origin?: EventOrigin\n  /**\n   * The event that triggered the toggle.\n   */\n  event?: Event\n}\n\nexport interface Checkbox extends CheckboxActions, CheckboxEvents, CheckboxMutableProps {\n  readonly id: string\n  readonly inputRef: HTMLInputElement\n}\n\n/**\n * The icon to display when the checkbox is indeterminate or checked.\n * Default is `{ indeterminate: 'minus', checked: 'check' }`\n */\nexport interface CheckboxIcon {\n  /**\n   * The name of the icon to display when the checkbox is indeterminate.\n   * Default is `'minus'`. The icon must be configured. Otherwise, it will not display.\n   */\n  indeterminate: string\n  /**\n   * The name of the icon to display when the checkbox is checked.\n   * Default is `'check'`. The icon must be configured. Otherwise, it will not display.\n   */\n  checked: string\n  /**\n   * The size of the icon. Default is `'sm'`.\n   */\n  size: SizeOption\n}\n\nexport const CHECKBOX_CONFIG = InjectionTokenFactory.create<string>('', 'CHECKBOX_CONFIG')\n\nexport const CHECKBOX_ICON = InjectionTokenFactory.create<CheckboxIcon>(\n  {\n    indeterminate: 'minus',\n    checked: 'check',\n    size: 'sm',\n  },\n  'CHECKBOX_ICON'\n)\n\n@Directive()\nexport abstract class CheckboxBase extends BaseDirective {\n  protected parent: CheckboxBase | null = null\n}\n\n/**\n * Checks if the component is a Checkbox.\n * If so, you can safely access the Checkbox members inside this block scope.\n */\nexport function isCheckbox(component: unknown): component is Checkbox {\n  return component instanceof CheckboxBase\n}\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { ModelSignal } from '@angular/core'\nimport { BaseActions, BaseProps } from '../directives'\n\n/**\n * @TailwindNG Combobox Item component interface.\n */\nexport interface ComboboxItem extends BaseProps, BaseActions {\n  readonly value: string\n  /**\n   * Selects the item.\n   */\n  select(): void\n  /**\n   * Deselects the item.\n   */\n  deselect(): void\n  /**\n   * Whether the item is selected.\n   * Emits true when the item is selected and false when it is not.\n   */\n  selected: ModelSignal<boolean>\n}\n\nexport const COMBOBOX_ITEM_CONFIG = InjectionTokenFactory.create<string>('', 'COMBOBOX_ITEM_CONFIG')\n\n@Directive()\nexport abstract class ComboboxItemBase extends BaseDirective {}\n","import { Directive, Input } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { SizeOption } from '../types/size-options.type'\n\n/**\n * @TailwindNG Icon component interface.\n */\nexport interface Icon {\n  name: IconName\n  size: SizeOption\n}\n\nexport interface IconConfig extends Partial<Record<SizeOption, string>> {\n  className?: string\n  map?: IconMap\n}\n\n/**\n * Checks if the component is an Icon.\n * If so, you can safely access the Icon members inside this block scope.\n */\nexport function isIcon(component: unknown): component is Icon {\n  return component instanceof IconBase\n}\nexport const ICON_CONFIG = InjectionTokenFactory.create<Partial<IconConfig>>({}, 'ICON_CONFIG')\n\n@Directive()\nexport abstract class IconBase extends BaseDirective implements Icon {\n  @Input({ required: true }) name!: IconName\n  @Input() size: SizeOption = 'md'\n}\n\nexport type IconMap = Partial<Record<IconName, string>>\nexport type IconName =\n  | (string & {})\n  | 'minus'\n  | 'check'\n  | 'tailwind-ng'\n  | 'cmd-k'\n  | 'dot'\n  | 'npm'\n  | 'github'\n  | 'burger-menu'\n  | 'strash'\n  | 'star'\n  | 'share'\n  | 'arrow-right-circle'\n  | 'archive-box'\n  | 'document-duplicate'\n  | 'chevron-down'\n  | 'pencil-square'\n  | 'user'\n  | 'swatch'\n  | 'language'\n  | 'check-circle'\n  | 'plus-circle'\n  | 'cloud-arrow-down'\n  | 'megaphone'\n  | 'arrow-left-end-on'\n  | 'video-camera'\n  | 'arrow-up'\n  | 'bars-3'\n  | 'chevron-right'\n  | 'chevron-left'\n  | 'content-copy'\n  | 'close'\n  | 'check-2'\n  | 'add'\n  | 'more-ver'\n  | 'more-horiz'\n  | 'arrow-drop-down'\n  | 'format-color-reset'\n  | 'moon'\n  | 'sun'\n  | 'sparkles'\n  | 'check-badge'\n  | 'beaker'\n  | 'rocket'\n  | 'bolt'\n  | 'accessibility'\n  | 'mix-vertical'\n  | 'license'\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\n\nexport const INPUT_RADIO_CONFIG = InjectionTokenFactory.create<string>('', 'INPUT_RADIO_CONFIG')\n\n@Directive()\nexport abstract class InputRadioBase extends BaseDirective<HTMLInputElement> {\n  constructor() {\n    super()\n    // remove default keyboard event prevention.\n    // As necessary to navigate through radio inputs.\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    this.onKeyboardEvent = () => {}\n  }\n}\n","import { Directive, Input, output, OutputEmitterRef } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { BaseActions, BaseProps } from '../directives'\nimport { SizeOption } from '../types'\n\n/**\n * @TailwindNG Input component interface.\n * @NOTE This directive can only be used on the follwing input types:\n * - text\n * - password\n * - email\n * - number\n * - tel\n * - url\n */\nexport interface InputText extends BaseProps<HTMLInputElement>, BaseActions {\n  /**\n   * The input's size.\n   */\n  readonly size: SizeOption\n  /**\n   * The input's value.\n   */\n  readonly value: string\n  /**\n   * The input's normalized value.\n   */\n  readonly normalizedValue: string\n  /**\n   * Whether the input is valid.\n   */\n  readonly isValid: boolean\n  /**\n   * Whether the input is empty.\n   */\n  readonly isEmpty: boolean\n  /**\n   * Emits the input's value when it changes.\n   */\n  readonly valueChange: OutputEmitterRef<string>\n  /**\n   * Emits the input's value when it changes.\n   */\n  readonly changes: OutputEmitterRef<string>\n  clear(): void\n}\n\nexport interface InputConfig extends Partial<Record<SizeOption, string>> {\n  className?: string\n}\n\nexport const INPUT_TEXT_CONFIG = InjectionTokenFactory.create<InputConfig>({}, 'INPUT_TEXT_CONFIG')\n\nexport function isInputText(component: unknown): component is InputText {\n  return component instanceof InputTextBase\n}\n\n@Directive()\nexport abstract class InputTextBase extends BaseDirective<HTMLInputElement> implements InputText {\n  @Input() size: SizeOption = 'md'\n\n  @Input() set value(value: string) {\n    this.nativeElement.value = value\n  }\n  get value(): string {\n    return this.nativeElement.value\n  }\n  get isValid(): boolean {\n    return this.nativeElement.validity.valid\n  }\n  get isEmpty(): boolean {\n    return this.value.trim().length === 0\n  }\n  get normalizedValue(): string {\n    return this.value.trim().toLocaleLowerCase()\n  }\n\n  valueChange = output<string>()\n\n  changes = output<string>()\n\n  clear(): void {\n    this.value = ''\n  }\n\n  protected onChange(event: Event): void {\n    event.stopPropagation()\n    this.valueChange.emit(this.value)\n  }\n\n  protected onInput(event: Event): void {\n    event.stopPropagation()\n    this.changes.emit(this.value)\n  }\n\n  protected override addEventListeners(): void {\n    super.addEventListeners()\n    this.nativeElement.addEventListener('change', this.onChange.bind(this), false)\n    this.nativeElement.addEventListener('input', this.onInput.bind(this), false)\n  }\n\n  protected override removeEventListeners(): void {\n    super.removeEventListeners()\n    this.nativeElement.removeEventListener('change', this.onChange.bind(this), false)\n    this.nativeElement.removeEventListener('input', this.onInput.bind(this), false)\n  }\n\n  // Override default keyboard event preventions.\n  protected override onKeyboardEvent(event: Event): void {\n    this.preventInteractionIfDisabled(event)\n  }\n}\n","import { Directive } from '@angular/core'\nimport { BaseDirective } from '../directives'\nimport { InjectionTokenFactory } from '../tokens/injection-token.factory'\nimport { ModelSignal } from '@angular/core'\nimport { BaseActions, BaseProps } from '../directives'\n\nexport interface Toggle extends BaseProps, BaseActions {\n  readonly tabIndex: number\n  /**\n   * Toggles the toggle's state.\n   */\n  toggle(): void\n  /**\n   * The toggle's state. Default is `false`.\n   * Emits the state's changes when toggled.\n   */\n  checked: ModelSignal<boolean>\n}\n/**\n * Checks if the component is a Toggle.\n * If so, you can safely access the Toggle members inside this block scope.\n */\nexport function isToggle(component: unknown): component is Toggle {\n  return component instanceof ToggleBase\n}\n\nexport const TOGGLE_CONFIG = InjectionTokenFactory.create<string>('', 'TOGGLE_CONFIG')\n\n@Directive()\nexport abstract class ToggleBase extends BaseDirective {}\n","import { Injectable } from '@angular/core'\n\n/**\n * A service that allows the user to toggle between light and dark themes.\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n  private initialized = false\n  /**\n   * Toggle the theme between light and dark.\n   */\n  toggle() {\n    document.documentElement.classList.toggle('dark')\n    localStorage.setItem('theme', this.isDark ? 'dark' : 'default')\n  }\n  /**\n   * Initialize the theme based on the user's previous theme preference.\n   *\n   * If there is no previous theme preference, the default theme will be used.\n   * @param theme The theme to initialize. If setted, this will override previous user's theme preference.\n   */\n  init(theme: 'default' | 'dark' = 'default') {\n    if (this.initialized) return\n    if (theme === 'dark' && !this.isDark) {\n      this.toggle()\n    } else if (localStorage.getItem('theme') === 'dark' && !this.isDark) {\n      this.toggle()\n    }\n    this.initialized = true\n  }\n  /**\n   * Returns true if the current theme is dark. Otherwise, returns false.\n   */\n  get isDark() {\n    return document.documentElement.classList.contains('dark')\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}