{"version":3,"file":"ng-elementum.mjs","sources":["../../../../libs/ng-elementum/src/lib/utils.ts","../../../../libs/ng-elementum/src/lib/extract-projectable-nodes.ts","../../../../libs/ng-elementum/src/lib/component-strategy.ts","../../../../libs/ng-elementum/src/lib/provide-platform-effect-interop.ts","../../../../libs/ng-elementum/src/lib/provide-platform-resource-interop.ts","../../../../libs/ng-elementum/src/lib/platform.ts","../../../../libs/ng-elementum/src/lib/create-application-sync.ts","../../../../libs/ng-elementum/src/lib/create-custom-element.ts","../../../../libs/ng-elementum/src/index.ts","../../../../libs/ng-elementum/src/ng-elementum.ts"],"sourcesContent":["import {\n  ComponentMirror,\n  isSignal,\n  WritableSignal,\n  InputSignal,\n  InputSignalWithTransform,\n} from '@angular/core';\nimport { SIGNAL } from '@angular/core/primitives/signals';\n\n/**\n * Convert a camelCased string to kebab-cased.\n */\nexport function camelToDashCase(input: string): string {\n  return input.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);\n}\n\n/**\n * Check whether the input is an `Element`.\n */\nexport function isElement(node: Node | null): node is Element {\n  return !!node && node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * Convert a kebab-cased string to camelCased.\n */\nexport function kebabToCamelCase(input: string): string {\n  return input.replace(/-([a-z\\d])/g, (_, char) => char.toUpperCase());\n}\n\nexport function matchesSelector(el: Element, selector: string): boolean {\n  return el.nodeType === Node.ELEMENT_NODE ? el.matches(selector) : false;\n}\n\n/** Gets a map of default set of attributes to observe and the properties they affect. */\nexport function getDefaultAttributeToPropertyInputs(\n  inputs: ComponentMirror<unknown>['inputs']\n) {\n  const attributeToPropertyInputs: {\n    [key: string]: [\n      propName: string,\n      transform: ((value: any) => any) | undefined\n    ];\n  } = {};\n  inputs.forEach(({ propName, templateName, transform }) => {\n    attributeToPropertyInputs[camelToDashCase(templateName)] = [\n      propName,\n      transform,\n    ];\n  });\n\n  return attributeToPropertyInputs;\n}\n\nexport function isWritableSignal(\n  value: unknown\n): value is WritableSignal<unknown> {\n  return isSignal(value) && 'set' in value;\n}\n\nexport function isInputWithTransform(\n  value: unknown\n): value is InputSignalWithTransform<unknown, unknown> {\n  return (\n    isSignal(value) &&\n    !!value[SIGNAL] &&\n    typeof value[SIGNAL] === 'object' &&\n    'transformFn' in value[SIGNAL] &&\n    value[SIGNAL].transformFn !== undefined\n  );\n}\n","import { isElement, matchesSelector } from './utils';\n\nexport function extractProjectableNodes(\n  host: HTMLElement,\n  ngContentSelectors: readonly string[]\n): Node[][] {\n  const nodes = host.childNodes;\n  const projectableNodes: Node[][] = ngContentSelectors.map(() => []);\n  let wildcardIndex = -1;\n\n  ngContentSelectors.some((selector, i) => {\n    if (selector === '*') {\n      wildcardIndex = i;\n      return true;\n    }\n    return false;\n  });\n\n  for (let i = 0, ii = nodes.length; i < ii; ++i) {\n    const node = nodes[i];\n    const ngContentIndex = findMatchingIndex(\n      node,\n      ngContentSelectors,\n      wildcardIndex\n    );\n\n    if (ngContentIndex !== -1) {\n      projectableNodes[ngContentIndex].push(node);\n    }\n  }\n\n  return projectableNodes;\n}\n\nfunction findMatchingIndex(\n  node: Node,\n  selectors: readonly string[],\n  defaultIndex: number\n): number {\n  let matchingIndex = defaultIndex;\n\n  if (isElement(node)) {\n    selectors.some((selector, i) => {\n      if (selector !== '*' && matchesSelector(node, selector)) {\n        matchingIndex = i;\n        return true;\n      }\n      return false;\n    });\n  }\n\n  return matchingIndex;\n}\n","import {\n  APP_BOOTSTRAP_LISTENER,\n  ApplicationRef,\n  ComponentMirror,\n  ComponentRef,\n  createComponent,\n  EventEmitter,\n  isSignal,\n  OutputRef,\n  reflectComponentType,\n  Type,\n  ɵChangeDetectionScheduler as ChangeDetectionScheduler,\n  ɵisViewDirty as isViewDirty,\n  ɵmarkForRefresh as markForRefresh,\n  ɵNotificationSource as NotificationSource,\n  ɵViewRef as ViewRef,\n} from '@angular/core';\n\nimport { extractProjectableNodes } from './extract-projectable-nodes';\nimport {\n  camelToDashCase,\n  isInputWithTransform,\n  isWritableSignal,\n} from './utils';\n\nexport const UNAVAILABLE = Symbol('UNAVAILABLE');\n\nfunction pick<T>(value: T): T {\n  return value;\n}\n\n/**\n * Creates and destroys a component ref using a component factory and handles change detection\n * in response to input changes.\n */\nexport class NgElementumStrategy {\n  /** Reference to the component that was created on connect. */\n  private componentRef: ComponentRef<any> | null = null;\n\n  /** Callback function that when called will cancel a scheduled destruction on the component. */\n  private scheduledDestroy: symbol | null = null;\n\n  /** Initial input values that were set before the component was created. */\n  private readonly initialInputValues = new Map<string, any>();\n\n  /**\n   * Angular's change detection scheduler, which works independently of zone.js.\n   */\n  private cdScheduler: ChangeDetectionScheduler;\n\n  private readonly inputMap = new Map<string, string>();\n\n  private readonly componentMirror: ComponentMirror<unknown>;\n\n  constructor(private component: Type<any>, private appRef: ApplicationRef) {\n    this.componentMirror = reflectComponentType(component)!;\n\n    for (const input of this.componentMirror.inputs) {\n      this.inputMap.set(input.propName, input.templateName);\n    }\n\n    this.cdScheduler = appRef.injector.get(ChangeDetectionScheduler);\n  }\n\n  /**\n   * Initializes a new component if one has not yet been created and cancels any scheduled\n   * destruction.\n   */\n  connect(element: HTMLElement) {\n    // If the element is marked to be destroyed, cancel the task since the component was\n    // reconnected\n    if (this.scheduledDestroy !== null) {\n      this.scheduledDestroy = null;\n      return;\n    }\n\n    if (this.componentRef === null) {\n      this.initializeComponent(element);\n    }\n  }\n\n  /**\n   * Schedules the component to be destroyed after some small delay in case the element is just\n   * being moved across the DOM.\n   */\n  disconnect() {\n    // Return if there is no componentRef or the component is already scheduled for destruction\n    if (this.componentRef === null || this.scheduledDestroy !== null) {\n      return;\n    }\n\n    // Schedule the component to be destroyed after a small timeout in case it is being\n    // moved elsewhere in the DOM\n    this.scheduledDestroy = Symbol();\n\n    queueMicrotask(() => {\n      if (this.scheduledDestroy === null) {\n        return;\n      }\n\n      this.scheduledDestroy = null;\n\n      if (this.componentRef !== null) {\n        this.componentRef.destroy();\n        this.appRef.components.splice(\n          this.appRef.components.indexOf(this.componentRef),\n          1\n        );\n        this.appRef.componentTypes.splice(\n          this.appRef.componentTypes.indexOf(this.component),\n          1\n        );\n        this.componentRef = null;\n      }\n    });\n  }\n\n  /**\n   * Returns the component property value. If the component has not yet been created, the value is\n   * retrieved from the cached initialization values.\n   */\n  getValue(property: string): any {\n    const value = this.componentRef?.instance[property];\n\n    if (isInputWithTransform(value)) {\n      // We cannot read the value of an input with a transform function,\n      // because it's type can be different from the type of the property.\n      return UNAVAILABLE;\n    }\n\n    if (isSignal(value)) {\n      return value();\n    }\n\n    return UNAVAILABLE;\n  }\n\n  /**\n   * Sets the input value for the property. If the component has not yet been created, the value is\n   * cached and set when the component is created.\n   */\n  setValue(property: string, value: any): void {\n    if (this.componentRef === null) {\n      return;\n    }\n\n    if (\n      this.componentMirror.inputs.some((input) => input.propName === property)\n    ) {\n      this.componentRef.setInput(\n        this.inputMap.get(property) ?? property,\n        value\n      );\n    } else if (isWritableSignal(this.componentRef.instance[property])) {\n      this.componentRef.instance[property].set(value);\n    } else {\n      return;\n    }\n\n    // `setInput` won't mark the view dirty if the input didn't change from its previous value.\n    if (isViewDirty(this.componentRef!.hostView as ViewRef<unknown>)) {\n      // `setInput` will have marked the view dirty already, but also mark it for refresh. This\n      // guarantees the view will be checked even if the input is being set from within change\n      // detection. This provides backwards compatibility, since we used to unconditionally\n      // schedule change detection in addition to the current zone run.\n      markForRefresh(this.componentRef!.changeDetectorRef as ViewRef<unknown>);\n\n      // Notifying the scheduler with `NotificationSource.CustomElement` causes a `tick()` to be\n      // scheduled unconditionally, even if the scheduler is otherwise disabled.\n      this.cdScheduler.notify(pick<NotificationSource.CustomElement>(6));\n    }\n  }\n\n  applyMethod(methodName: keyof any, args: any[]): any {\n    if (!this.componentRef) {\n      throw new Error('Component is detached from DOM');\n    }\n\n    return this.componentRef.instance[methodName](...args);\n  }\n\n  /**\n   * Creates a new component through the component factory with the provided element host and\n   * sets up its initial inputs, listens for outputs changes, and runs an initial change detection.\n   */\n  protected initializeComponent(element: HTMLElement) {\n    const projectableNodes = extractProjectableNodes(\n      element,\n      this.componentMirror.ngContentSelectors\n    );\n\n    const componentRef = (this.componentRef = createComponent(this.component, {\n      environmentInjector: this.appRef.injector,\n      projectableNodes: projectableNodes,\n      hostElement: element,\n    }));\n\n    this.initializeOutputs(element, componentRef);\n\n    this.appRef.attachView(componentRef.hostView);\n    componentRef.hostView.detectChanges();\n\n    this.appRef.components.push(componentRef);\n    this.appRef.componentTypes.push(this.component);\n\n    const listeners = this.appRef.injector.get(APP_BOOTSTRAP_LISTENER, []);\n\n    listeners.forEach((listener) => listener(componentRef));\n  }\n\n  /** Sets up listeners for the component's outputs so that the events stream emits the events. */\n  protected initializeOutputs(\n    element: HTMLElement,\n    componentRef: ComponentRef<any>\n  ): void {\n    for (const { propName, templateName } of this.componentMirror.outputs) {\n      const emitter: EventEmitter<any> | OutputRef<any> =\n        componentRef.instance[propName];\n\n      const subscription = emitter.subscribe((detail: any) => {\n        element.dispatchEvent(\n          new CustomEvent(camelToDashCase(templateName), { detail })\n        );\n      });\n\n      componentRef.onDestroy(() => subscription.unsubscribe());\n    }\n  }\n}\n","import {\n  ErrorHandler,\n  inject,\n  Injectable,\n  StaticProvider,\n  ɵChangeDetectionScheduler,\n  ɵEffectScheduler,\n} from '@angular/core';\n\ntype SchedulableEffect = {\n  run(): void;\n  dirty: boolean;\n};\n\n@Injectable()\nclass PlatformEffectScheduler extends ɵEffectScheduler {\n  private dirtyEffectCount = 0;\n  private readonly queue = new Set<SchedulableEffect>();\n  private readonly errorHandler = inject(ErrorHandler, { optional: true });\n\n  public add(handle: SchedulableEffect): void {\n    this.enqueue(handle);\n    this.schedule(handle);\n  }\n\n  public schedule(handle: SchedulableEffect): void {\n    if (!handle.dirty) {\n      return;\n    }\n\n    this.dirtyEffectCount++;\n  }\n\n  public remove(handle: SchedulableEffect): void {\n    this.queue.delete(handle);\n\n    if (handle.dirty) {\n      this.dirtyEffectCount--;\n    }\n  }\n\n  public flush(): void {\n    while (this.dirtyEffectCount > 0) {\n      if (!this.flushQueue()) {\n        this.dirtyEffectCount = 0;\n      }\n    }\n  }\n\n  private enqueue(handle: SchedulableEffect): void {\n    this.queue.add(handle);\n  }\n\n  private flushQueue(): boolean {\n    let ranOneEffect = false;\n\n    for (const handle of this.queue) {\n      if (!handle.dirty) {\n        continue;\n      }\n\n      this.dirtyEffectCount--;\n      ranOneEffect = true;\n\n      try {\n        handle.run();\n      } catch (error) {\n        if (!this.errorHandler) {\n          throw error;\n        }\n\n        this.errorHandler.handleError(error);\n      }\n    }\n\n    return ranOneEffect;\n  }\n}\n\n@Injectable()\nclass PlatformChangeDetectionScheduler extends ɵChangeDetectionScheduler {\n  private readonly effectScheduler = inject(ɵEffectScheduler);\n  private isChangeDetectionScheduled = false;\n  public runningTick = false;\n\n  public notify(): void {\n    if (this.isChangeDetectionScheduled) {\n      return;\n    }\n\n    this.isChangeDetectionScheduled = true;\n    queueMicrotask(() => {\n      this.tick();\n    });\n  }\n\n  private tick(): void {\n    this.isChangeDetectionScheduled = false;\n    this.runningTick = true;\n    this.effectScheduler.flush();\n    this.runningTick = false;\n  }\n}\n\nexport function providePlatformEffectInterop(): StaticProvider[] {\n  return [\n    {\n      provide: ɵChangeDetectionScheduler,\n      useClass: PlatformChangeDetectionScheduler,\n      deps: [],\n    },\n    {\n      provide: ɵEffectScheduler,\n      useClass: PlatformEffectScheduler,\n      deps: [],\n    },\n  ];\n}\n","import { PendingTasks, StaticProvider } from '@angular/core';\n\nclass NoopPendingTasks implements Pick<PendingTasks, keyof PendingTasks> {\n  add(): () => void {\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    return () => {};\n  }\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  run(): void {}\n}\n\nexport function providePlatformResourceInterop(): StaticProvider[] {\n  return [\n    {\n      provide: PendingTasks,\n      useClass: NoopPendingTasks,\n    },\n  ];\n}\n","import {\n  createPlatformFactory,\n  DestroyRef,\n  inject,\n  PlatformRef,\n  providePlatformInitializer,\n} from '@angular/core';\nimport { platformBrowser } from '@angular/platform-browser';\nimport { providePlatformEffectInterop } from './provide-platform-effect-interop';\nimport { providePlatformResourceInterop } from './provide-platform-resource-interop';\n\nconst onCreatePlatformListeners = new Set<() => void>();\n\nexport function onCreatePlatform(cb: () => void): void {\n  onCreatePlatformListeners.add(cb);\n}\n\nexport function offCreatePlatform(cb: () => void): void {\n  onCreatePlatformListeners.delete(cb);\n}\n\nexport const platformElementum = createPlatformFactory(\n  platformBrowser,\n  'ng-elementum',\n  [\n    // @ts-expect-error Angular typing issue\n    providePlatformInitializer(() => {\n      onCreatePlatformListeners.forEach((cb) => cb());\n\n      // TODO remove after resolving issue https://github.com/angular/angular/issues/67095\n      const platform = inject(PlatformRef);\n      const destroyRef = inject(DestroyRef);\n\n      platform.onDestroy(() => {\n        queueMicrotask(() => {\n          if (!destroyRef.destroyed) {\n            // @ts-expect-error typing issue\n            destroyRef.destroy();\n          }\n        });\n      });\n    }),\n    providePlatformEffectInterop(),\n    providePlatformResourceInterop(),\n  ]\n);\n","import {\n  ApplicationConfig,\n  ApplicationInitStatus,\n  ApplicationRef,\n  mergeApplicationConfig,\n} from '@angular/core';\nimport { createApplication } from '@angular/platform-browser';\n\ntype Resolve<T> = (value: T | SyncPromise<T> | PromiseLike<T>) => void;\ntype Reject = (reason?: any) => void;\n\ntype State = 'pending' | 'fulfilled' | 'rejected';\n\nexport class SyncPromise<T = unknown> implements Promise<T> {\n  [Symbol.toStringTag] = 'SyncPromise';\n  private state: State = 'pending';\n  private value!: T;\n  private reason: any;\n\n  private onFulfilledQueue: Array<(v: any) => void> = [];\n  private onRejectedQueue: Array<(e: any) => void> = [];\n\n  constructor(executor: (resolve: Resolve<T>, reject: Reject) => void) {\n    const resolve: Resolve<T> = (x) => this.resolveWith(x);\n    const reject: Reject = (e) => this.rejectWith(e);\n\n    try {\n      executor(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  }\n\n  // --- Public API ------------------------------------------------------------\n\n  then<TResult1 = T, TResult2 = never>(\n    onFulfilled?:\n      | ((value: T) => TResult1 | PromiseLike<TResult1> | SyncPromise<TResult1>)\n      | null,\n    onRejected?:\n      | ((\n          reason: any\n        ) => TResult2 | PromiseLike<TResult2> | SyncPromise<TResult2>)\n      | null\n  ): SyncPromise<TResult1 | TResult2> {\n    return new SyncPromise<TResult1 | TResult2>((resolve, reject) => {\n      const handleFulfilled = (v: T) => {\n        if (!onFulfilled) return resolve(v as any);\n        this.runHandler(() => onFulfilled(v), resolve, reject);\n      };\n\n      const handleRejected = (e: any) => {\n        if (!onRejected) return reject(e);\n        this.runHandler(() => onRejected(e), resolve, reject);\n      };\n\n      if (this.state === 'fulfilled') handleFulfilled(this.value);\n      else if (this.state === 'rejected') handleRejected(this.reason);\n      else {\n        this.onFulfilledQueue.push(handleFulfilled as any);\n        this.onRejectedQueue.push(handleRejected as any);\n      }\n    });\n  }\n\n  catch<TResult = never>(\n    onRejected?:\n      | ((reason: any) => TResult | PromiseLike<TResult> | SyncPromise<TResult>)\n      | null\n  ): SyncPromise<T | TResult> {\n    return this.then(null, onRejected);\n  }\n\n  finally(onFinally?: (() => void) | null): SyncPromise<T> {\n    return this.then(\n      (v) => {\n        if (onFinally) onFinally();\n        return v;\n      },\n      (e) => {\n        if (onFinally) onFinally();\n        throw e;\n      }\n    );\n  }\n\n  // --- Static helpers (optional, but handy) ----------------------------------\n\n  static resolve<T>(\n    value: T | PromiseLike<T> | SyncPromise<T>\n  ): SyncPromise<T> {\n    return new SyncPromise<T>((res) => res(value));\n  }\n\n  static reject<T = never>(reason: any): SyncPromise<T> {\n    return new SyncPromise<T>((_, rej) => rej(reason));\n  }\n\n  static all<T>(\n    items: Array<T | PromiseLike<T> | SyncPromise<T>>\n  ): SyncPromise<T[]> {\n    return new SyncPromise<T[]>((resolve, reject) => {\n      const out: T[] = new Array(items.length);\n      let remaining = items.length;\n\n      if (remaining === 0) return resolve([]);\n\n      items.forEach((it, i) => {\n        SyncPromise.resolve(it).then((v) => {\n          out[i] = v;\n          remaining -= 1;\n          if (remaining === 0) resolve(out);\n        }, reject);\n      });\n    });\n  }\n\n  static runWithSyncPromise<T>(fn: () => T): T {\n    const originalPromise = globalThis.Promise;\n\n    globalThis.Promise = SyncPromise as any;\n\n    try {\n      return fn();\n    } finally {\n      globalThis.Promise = originalPromise;\n    }\n  }\n\n  // --- Internals -------------------------------------------------------------\n\n  private fulfill(v: T) {\n    if (this.state !== 'pending') return;\n    this.state = 'fulfilled';\n    this.value = v;\n\n    const q = this.onFulfilledQueue;\n    this.onFulfilledQueue = [];\n    this.onRejectedQueue = [];\n    for (const fn of q) fn(v);\n  }\n\n  private rejectWith(e: any) {\n    if (this.state !== 'pending') return;\n    this.state = 'rejected';\n    this.reason = e;\n\n    const q = this.onRejectedQueue;\n    this.onFulfilledQueue = [];\n    this.onRejectedQueue = [];\n    for (const fn of q) fn(e);\n  }\n\n  private resolveWith(x: any) {\n    if (this.state !== 'pending') return;\n\n    // защита от self-resolution\n    if (x === this)\n      return this.rejectWith(\n        new TypeError('Cannot resolve promise with itself')\n      );\n\n    // SyncPromise\n    if (x instanceof SyncPromise) {\n      return x.then(\n        (v) => this.fulfill(v as any),\n        (e) => this.rejectWith(e)\n      );\n    }\n\n    // thenable / PromiseLike\n    if (x !== null && (typeof x === 'object' || typeof x === 'function')) {\n      let then: any;\n      try {\n        then = (x as any).then;\n      } catch (e) {\n        return this.rejectWith(e);\n      }\n\n      if (typeof then === 'function') {\n        let called = false;\n        try {\n          then.call(\n            x,\n            (y: any) => {\n              if (called) return;\n              called = true;\n              this.resolveWith(y);\n            },\n            (e: any) => {\n              if (called) return;\n              called = true;\n              this.rejectWith(e);\n            }\n          );\n        } catch (e) {\n          if (!called) this.rejectWith(e);\n        }\n        return;\n      }\n    }\n\n    // обычное значение\n    this.fulfill(x as T);\n  }\n\n  private runHandler<R>(\n    fn: () => R | PromiseLike<R> | SyncPromise<R>,\n    resolve: (v: any) => void,\n    reject: (e: any) => void\n  ) {\n    try {\n      const r = fn();\n      resolve(r as any); // дальше resolveWith разрулит thenables\n    } catch (e) {\n      reject(e);\n    }\n  }\n}\n\nexport function createApplicationSync(\n  applicationConfig: ApplicationConfig\n): ApplicationRef {\n  let appRef: ApplicationRef | undefined;\n\n  applicationConfig = mergeApplicationConfig(applicationConfig, {\n    providers: [\n      {\n        provide: ApplicationInitStatus,\n        useFactory: () =>\n          SyncPromise.runWithSyncPromise(() => new ApplicationInitStatus()),\n      },\n    ],\n  });\n\n  createApplication(applicationConfig).then((ref) => {\n    appRef = ref;\n  });\n\n  if (!appRef) {\n    throw new Error('ApplicationRef is not initialized');\n  }\n\n  return appRef;\n}\n","import {\n  ApplicationConfig,\n  ComponentMirror,\n  ElementRef,\n  getPlatform,\n  InputSignal,\n  mergeApplicationConfig,\n  provideZonelessChangeDetection,\n  reflectComponentType,\n  runInInjectionContext,\n  Signal,\n  Type,\n  WritableSignal,\n} from '@angular/core';\n\nimport { NgElementumStrategy, UNAVAILABLE } from './component-strategy';\nimport { getDefaultAttributeToPropertyInputs } from './utils';\nimport { offCreatePlatform, onCreatePlatform } from './platform';\nimport { createApplicationSync } from './create-application-sync';\n\n/**\n * Prototype for a class constructor based on an Angular component\n * that can be used for custom element registration. Implemented and returned\n * by the {@link createCustomElement createCustomElement() function}.\n *\n * @see [Angular Elements Overview](guide/elements \"Turning Angular components into custom elements\")\n *\n * @publicApi\n */\nexport interface NgElementumConstructor<\n  T,\n  M extends keyof T,\n  S extends keyof T\n> {\n  /**\n   * Initializes a constructor instance.\n   */\n  new (): NgElementum &\n    ExposeInputs<T> &\n    ExposeSignals<T, S> &\n    ExposeMethods<T, M>;\n}\n\n/**\n * Implements the functionality needed for a custom element.\n *\n * @publicApi\n */\nexport abstract class NgElementum extends HTMLElement {\n  readonly #ngElementumInputsCache = new Map<string, any>();\n  readonly #ngElementumSignalsCache = new Map<string, any>();\n  readonly #ngElementumComponentType: ComponentMirror<any>;\n  readonly #ngElementumAttributeInputs: Record<string, [string, any]>;\n  readonly #ngElementumOnCreatePlatformCallback = () =>\n    this.connectedCallback();\n  #ngElementumCachedStrategy: NgElementumStrategy | undefined;\n  #ngElementumPreventRemove = false;\n  #ngElementumConfig: NgElementumConfig<string, string>;\n\n  constructor(\n    componentType: ComponentMirror<any>,\n    config: NgElementumConfig<string, string>\n  ) {\n    super();\n\n    this.#ngElementumConfig = config;\n    this.#ngElementumComponentType = componentType;\n    this.#ngElementumAttributeInputs = getDefaultAttributeToPropertyInputs(\n      componentType.inputs\n    );\n  }\n\n  /**\n   * Prototype for a handler that responds to a change in an observed attribute.\n   * @param attrName The name of the attribute that has changed.\n   * @param oldValue The old value of the attribute.\n   * @param newValue The new value of the attribute.\n   * @returns Nothing.\n   */\n  attributeChangedCallback(\n    attrName: string,\n    oldValue: string,\n    newValue: string\n  ) {\n    const [propName] = this.#ngElementumAttributeInputs[attrName];\n\n    this.ngElementumSetValue(propName, newValue);\n  }\n\n  /**\n   * Prototype for a handler that responds to the insertion of the custom element in the DOM.\n   * @returns Nothing.\n   */\n  connectedCallback() {\n    const strategy = this.#ngElementumStrategy;\n\n    if (!strategy) {\n      onCreatePlatform(this.#ngElementumOnCreatePlatformCallback);\n      return;\n    }\n\n    strategy.connect(this);\n\n    for (const [attrName, [propName, transform]] of Object.entries(\n      this.#ngElementumAttributeInputs\n    )) {\n      if (!this.hasAttribute(attrName)) {\n        continue;\n      }\n\n      const value = this.getAttribute(attrName)!;\n\n      strategy.setValue(propName, transform ? transform(value) : value);\n    }\n\n    for (const [key, value] of this.#ngElementumInputsCache) {\n      strategy.setValue(key, value);\n    }\n  }\n\n  /**\n   * Prototype for a handler that responds to the deletion of the custom element from the DOM.\n   * @returns Nothing.\n   */\n  disconnectedCallback() {\n    offCreatePlatform(this.#ngElementumOnCreatePlatformCallback);\n    const strategy = this.#ngElementumCachedStrategy;\n\n    if (!strategy) {\n      return;\n    }\n\n    strategy.disconnect();\n  }\n\n  protected ngElementumGetValue(propName: string): any {\n    if (this.#ngElementumCachedStrategy) {\n      const value = this.#ngElementumCachedStrategy.getValue(propName);\n\n      if (value !== UNAVAILABLE) {\n        this.#ngElementumInputsCache.set(propName, value);\n      }\n    }\n\n    return this.#ngElementumInputsCache.get(propName) ?? null;\n  }\n\n  protected ngElementumSetValue(propName: string, newValue: string): void {\n    this.#ngElementumInputsCache.set(propName, newValue);\n\n    this.#ngElementumCachedStrategy?.setValue(propName, newValue);\n  }\n\n  setSignalValue(propName: string, newValue: string): void {\n    this.#ngElementumSignalsCache.set(propName, newValue);\n\n    this.#ngElementumCachedStrategy?.setValue(propName, newValue);\n  }\n\n  override remove(): void {\n    if (this.#ngElementumPreventRemove) {\n      if (this.shadowRoot) {\n        this.shadowRoot.innerHTML = '';\n      } else {\n        this.innerHTML = '';\n      }\n    } else {\n      super.remove();\n    }\n  }\n\n  override attachShadow(init: ShadowRootInit): ShadowRoot {\n    return this.shadowRoot ?? super.attachShadow(init);\n  }\n\n  #ngElementumCreateStrategy(): NgElementumStrategy | undefined {\n    const applicationConfig = getApplicationConfig(\n      this,\n      this.#ngElementumConfig.applicationConfig\n    );\n\n    if (!applicationConfig) {\n      return;\n    }\n\n    const applicationRef = createApplicationSync(applicationConfig);\n\n    if (applicationRef.destroyed) {\n      return;\n    }\n\n    getPlatform()?.onDestroy(() => {\n      this.#ngElementumPreventRemove = true;\n      applicationRef.destroy();\n      this.#ngElementumPreventRemove = false;\n\n      if (this.isConnected) {\n        onCreatePlatform(this.#ngElementumOnCreatePlatformCallback);\n      }\n    });\n\n    applicationRef.onDestroy(() => {\n      this.#ngElementumCachedStrategy = undefined;\n    });\n\n    return new NgElementumStrategy(\n      this.#ngElementumComponentType.type,\n      applicationRef\n    );\n  }\n\n  /**\n   * The strategy that controls how a component is transformed in a custom element.\n   */\n  get #ngElementumStrategy(): NgElementumStrategy | undefined {\n    return (this.#ngElementumCachedStrategy ??=\n      this.#ngElementumCreateStrategy());\n  }\n\n  protected get ngElementumCachedStrategy(): NgElementumStrategy | undefined {\n    return this.#ngElementumCachedStrategy;\n  }\n}\n\nexport type ExtractMethods<T> = {\n  [K in keyof T]: K extends string\n    ? T[K] extends (...args: any[]) => any\n      ? T[K] extends Signal<any>\n        ? never\n        : K\n      : never\n    : never;\n}[keyof T];\n\nexport type ExtractSignals<T> = {\n  [K in keyof T]: K extends string\n    ? T[K] extends Signal<any>\n      ? K\n      : never\n    : never;\n}[keyof T];\n\ntype UnwrapSignal<T> = T extends Signal<infer V> ? V | null : never;\n\nexport type ExposeInputs<T> = {\n  -readonly [K in keyof T as T[K] extends InputSignal<any>\n    ? K\n    : never]: UnwrapSignal<T[K]>;\n};\n\nexport type ExposeMethods<T, M extends keyof T> = {\n  [K in keyof T as M extends K ? K : never]: T[K] extends (\n    ...args: infer A\n  ) => infer R\n    ? (...args: A) => R extends Promise<any> ? R : Promise<R>\n    : never;\n};\n\nexport type ExposeSignals<T, S extends keyof T> = {\n  readonly [K in keyof T as S extends K\n    ? T[K] extends Signal<any>\n      ? T[K] extends WritableSignal<any>\n        ? never\n        : K\n      : never\n    : never]: UnwrapSignal<T[K]>;\n} & {\n  -readonly [K in keyof T as S extends K\n    ? T[K] extends WritableSignal<any>\n      ? K\n      : never\n    : never]: UnwrapSignal<T[K]>;\n};\n\n/**\n * A configuration that initializes an NgElementConstructor with the\n * dependencies and strategy it needs to transform a component into\n * a custom element class.\n *\n * @publicApi\n */\nexport type NgElementumConfig<M extends string, S extends string> = {\n  /**\n   * An optional list of methods to expose on the custom element.\n   */\n  exposedMethods?: M[];\n  /**\n   * An optional list of signals to expose on the custom element.\n   */\n  exposedSignals?: S[];\n  /**\n   * The config for application.\n   *\n   * If function passed, it will be called within the platform injection context.\n   */\n  applicationConfig: ApplicationConfig | (() => ApplicationConfig);\n};\n\n/**\n *  @description Creates a custom element class based on an Angular component.\n *\n * Builds a class that encapsulates the functionality of the provided component and\n * uses the configuration information to provide more context to the class.\n * Takes the component factory's inputs and outputs to convert them to the proper\n * custom element API and add hooks to input changes.\n *\n * The configuration's injector is the initial injector set on the class,\n * and used by default for each created instance.This behavior can be overridden with the\n * static property to affect all newly created instances, or as a constructor argument for\n * one-off creations.\n *\n * @see [Angular Elements Overview](guide/elements \"Turning Angular components into custom elements\")\n *\n * @param component The component to transform.\n * @param config A configuration that provides initialization information to the created class.\n * @returns The custom-element construction class, which can be registered with\n * a browser's `CustomElementRegistry`.\n *\n * @publicApi\n */\nexport function createCustomElement<\n  T,\n  const M extends ExtractMethods<T>,\n  const S extends ExtractSignals<T>\n>(\n  component: Type<T>,\n  config: NgElementumConfig<M, S>\n): NgElementumConstructor<T, M, S> {\n  const componentType = reflectComponentType(component);\n\n  if (!componentType) {\n    throw new Error('Cannot read component type');\n  }\n\n  const { inputs } = componentType;\n\n  const attributeToPropertyInputs = getDefaultAttributeToPropertyInputs(inputs);\n\n  class NgElementumImpl extends NgElementum {\n    // Work around a bug in closure typed optimizations(b/79557487) where it is not honoring static\n    // field externs. So using quoted access to explicitly prevent renaming.\n    static readonly ['observedAttributes'] = Object.keys(\n      attributeToPropertyInputs\n    );\n\n    constructor() {\n      super(componentType!, config);\n    }\n  }\n\n  for (const exposedMethod of new Set(config.exposedMethods)) {\n    if (typeof component.prototype[exposedMethod] !== 'function') {\n      throw new Error(\n        `Cannot expose method \"${String(\n          exposedMethod\n        )}\" because it is not a function of the component.`\n      );\n    }\n\n    Object.defineProperty(NgElementumImpl.prototype, exposedMethod, {\n      value: function (this: NgElementumImpl, ...args: any[]) {\n        if (!this.isConnected) {\n          throw new Error('Component is detached from DOM');\n        }\n\n        if (!this.ngElementumCachedStrategy) {\n          throw new Error('Component is not initialized');\n        }\n\n        return this.ngElementumCachedStrategy.applyMethod(exposedMethod, args);\n      },\n    });\n  }\n\n  for (const exposedSignal of new Set(config.exposedSignals)) {\n    Object.defineProperty(NgElementumImpl.prototype, exposedSignal, {\n      get(this: NgElementumImpl) {\n        return this.ngElementumGetValue(exposedSignal);\n      },\n      set(this: NgElementumImpl, newValue: any) {\n        this.ngElementumSetValue(exposedSignal, newValue);\n      },\n      configurable: false,\n      enumerable: true,\n    });\n  }\n\n  // Add getters and setters to the prototype for each property input.\n  inputs.forEach(({ propName }) => {\n    Object.defineProperty(NgElementumImpl.prototype, propName, {\n      get(this: NgElementumImpl): any {\n        return this.ngElementumGetValue(propName);\n      },\n      set(this: NgElementumImpl, newValue: any): void {\n        this.ngElementumSetValue(propName, newValue);\n      },\n      configurable: false,\n      enumerable: true,\n    });\n  });\n\n  return NgElementumImpl as any;\n}\n\nfunction addRequiredProviders(\n  element: HTMLElement,\n  applicationConfig: ApplicationConfig\n): ApplicationConfig {\n  return mergeApplicationConfig(applicationConfig, {\n    providers: [\n      provideZonelessChangeDetection(),\n      {\n        provide: ElementRef,\n        useValue: new ElementRef(element),\n      },\n    ],\n  });\n}\n\nfunction getApplicationConfig(\n  element: HTMLElement,\n  configOrResolver: ApplicationConfig | (() => ApplicationConfig)\n): ApplicationConfig | undefined {\n  if (typeof configOrResolver === 'function') {\n    const platformRef = getPlatform();\n\n    if (platformRef) {\n      // TODO test config recreation\n      return addRequiredProviders(\n        element,\n        runInInjectionContext(platformRef.injector, configOrResolver)\n      );\n    }\n\n    return;\n  }\n\n  return addRequiredProviders(element, configOrResolver);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the `elements` package.\n */\nexport {\n  createCustomElement,\n  NgElementum,\n  NgElementumConfig,\n  NgElementumConstructor,\n} from './lib/create-custom-element';\nexport { platformElementum } from './lib/platform';\nexport { createApplicationSync as ɵcreateApplicationSync } from './lib/create-application-sync';\nexport { providePlatformEffectInterop as ɵprovidePlatformEffectInterop } from './lib/provide-platform-effect-interop';\nexport { providePlatformResourceInterop as ɵprovidePlatformResourceInterop } from './lib/provide-platform-resource-interop';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ChangeDetectionScheduler","isViewDirty","markForRefresh","ɵEffectScheduler","ɵChangeDetectionScheduler"],"mappings":"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"}