All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.fesm2022.elements.mjs.map Maven / Gradle / Ivy

There is a newer version: 19.0.0
Show newest version
{"version":3,"file":"elements.mjs","sources":["../../../../../../packages/elements/src/utils.ts","../../../../../../packages/elements/src/extract-projectable-nodes.ts","../../../../../../packages/elements/src/component-factory-strategy.ts","../../../../../../packages/elements/src/create-custom-element.ts","../../../../../../packages/elements/src/version.ts","../../../../../../packages/elements/public_api.ts","../../../../../../packages/elements/index.ts","../../../../../../packages/elements/elements.ts"],"sourcesContent":["/**\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 */\nimport {ComponentFactoryResolver, Injector, Type} from '@angular/core';\n\n/**\n * Provide methods for scheduling the execution of a callback.\n */\nexport const scheduler = {\n  /**\n   * Schedule a callback to be called after some delay.\n   *\n   * Returns a function that when executed will cancel the scheduled function.\n   */\n  schedule(taskFn: () => void, delay: number): () => void {\n    const id = setTimeout(taskFn, delay);\n    return () => clearTimeout(id);\n  },\n\n  /**\n   * Schedule a callback to be called before the next render.\n   * (If `window.requestAnimationFrame()` is not available, use `scheduler.schedule()` instead.)\n   *\n   * Returns a function that when executed will cancel the scheduled function.\n   */\n  scheduleBeforeRender(taskFn: () => void): () => void {\n    // TODO(gkalpak): Implement a better way of accessing `requestAnimationFrame()`\n    //                (e.g. accounting for vendor prefix, SSR-compatibility, etc).\n    if (typeof window === 'undefined') {\n      // For SSR just schedule immediately.\n      return scheduler.schedule(taskFn, 0);\n    }\n\n    if (typeof window.requestAnimationFrame === 'undefined') {\n      const frameMs = 16;\n      return scheduler.schedule(taskFn, frameMs);\n    }\n\n    const id = window.requestAnimationFrame(taskFn);\n    return () => window.cancelAnimationFrame(id);\n  },\n};\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 * Check whether the input is a function.\n */\nexport function isFunction(value: any): value is Function {\n  return typeof value === 'function';\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\nlet _matches: (this: any, selector: string) => boolean;\n\n/**\n * Check whether an `Element` matches a CSS selector.\n * NOTE: this is duplicated from @angular/upgrade, and can\n * be consolidated in the future\n */\nexport function matchesSelector(el: any, selector: string): boolean {\n  if (!_matches) {\n    const elProto = Element.prototype;\n    _matches =\n      elProto.matches ||\n      elProto.matchesSelector ||\n      elProto.mozMatchesSelector ||\n      elProto.msMatchesSelector ||\n      elProto.oMatchesSelector ||\n      elProto.webkitMatchesSelector;\n  }\n  return el.nodeType === Node.ELEMENT_NODE ? _matches.call(el, selector) : false;\n}\n\n/**\n * Test two values for strict equality, accounting for the fact that `NaN !== NaN`.\n */\nexport function strictEquals(value1: any, value2: any): boolean {\n  return value1 === value2 || (value1 !== value1 && value2 !== value2);\n}\n\n/** Gets a map of default set of attributes to observe and the properties they affect. */\nexport function getDefaultAttributeToPropertyInputs(\n  inputs: {propName: string; templateName: string; transform?: (value: any) => any}[],\n) {\n  const attributeToPropertyInputs: {\n    [key: string]: [propName: string, transform: ((value: any) => any) | undefined];\n  } = {};\n  inputs.forEach(({propName, templateName, transform}) => {\n    attributeToPropertyInputs[camelToDashCase(templateName)] = [propName, transform];\n  });\n\n  return attributeToPropertyInputs;\n}\n\n/**\n * Gets a component's set of inputs. Uses the injector to get the component factory where the inputs\n * are defined.\n */\nexport function getComponentInputs(\n  component: Type,\n  injector: Injector,\n): {\n  propName: string;\n  templateName: string;\n  transform?: (value: any) => any;\n}[] {\n  const componentFactoryResolver = injector.get(ComponentFactoryResolver);\n  const componentFactory = componentFactoryResolver.resolveComponentFactory(component);\n  return componentFactory.inputs;\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// NOTE: This is a (slightly improved) version of what is used in ngUpgrade's\n//       `DowngradeComponentAdapter`.\n// TODO(gkalpak): Investigate if it makes sense to share the code.\n\nimport {isElement, matchesSelector} from './utils';\n\nexport function extractProjectableNodes(host: HTMLElement, ngContentSelectors: string[]): 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(node, ngContentSelectors, wildcardIndex);\n\n    if (ngContentIndex !== -1) {\n      projectableNodes[ngContentIndex].push(node);\n    }\n  }\n\n  return projectableNodes;\n}\n\nfunction findMatchingIndex(node: Node, selectors: string[], defaultIndex: number): 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","/**\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\nimport {\n  ApplicationRef,\n  ChangeDetectorRef,\n  ComponentFactory,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EventEmitter,\n  Injector,\n  NgZone,\n  OnChanges,\n  SimpleChange,\n  SimpleChanges,\n  Type,\n} from '@angular/core';\nimport {merge, Observable, ReplaySubject} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\n\nimport {\n  NgElementStrategy,\n  NgElementStrategyEvent,\n  NgElementStrategyFactory,\n} from './element-strategy';\nimport {extractProjectableNodes} from './extract-projectable-nodes';\nimport {isFunction, scheduler, strictEquals} from './utils';\n\n/** Time in milliseconds to wait before destroying the component ref when disconnected. */\nconst DESTROY_DELAY = 10;\n\n/**\n * Factory that creates new ComponentNgElementStrategy instance. Gets the component factory with the\n * constructor's injector's factory resolver and passes that factory to each strategy.\n */\nexport class ComponentNgElementStrategyFactory implements NgElementStrategyFactory {\n  componentFactory: ComponentFactory;\n\n  constructor(component: Type, injector: Injector) {\n    this.componentFactory = injector\n      .get(ComponentFactoryResolver)\n      .resolveComponentFactory(component);\n  }\n\n  create(injector: Injector) {\n    return new ComponentNgElementStrategy(this.componentFactory, injector);\n  }\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 ComponentNgElementStrategy implements NgElementStrategy {\n  // Subject of `NgElementStrategyEvent` observables corresponding to the component's outputs.\n  private eventEmitters = new ReplaySubject[]>(1);\n\n  /** Merged stream of the component's output events. */\n  readonly events = this.eventEmitters.pipe(switchMap((emitters) => merge(...emitters)));\n\n  /** Reference to the component that was created on connect. */\n  private componentRef: ComponentRef | null = null;\n\n  /** Reference to the component view's `ChangeDetectorRef`. */\n  private viewChangeDetectorRef: ChangeDetectorRef | null = null;\n\n  /**\n   * Changes that have been made to component inputs since the last change detection run.\n   * (NOTE: These are only recorded if the component implements the `OnChanges` interface.)\n   */\n  private inputChanges: SimpleChanges | null = null;\n\n  /** Whether changes have been made to component inputs since the last change detection run. */\n  private hasInputChanges = false;\n\n  /** Whether the created component implements the `OnChanges` interface. */\n  private implementsOnChanges = false;\n\n  /** Whether a change detection has been scheduled to run on the component. */\n  private scheduledChangeDetectionFn: (() => void) | null = null;\n\n  /** Callback function that when called will cancel a scheduled destruction on the component. */\n  private scheduledDestroyFn: (() => void) | null = null;\n\n  /** Initial input values that were set before the component was created. */\n  private readonly initialInputValues = new Map();\n\n  /**\n   * Set of component inputs that have not yet changed, i.e. for which `recordInputChange()` has not\n   * fired.\n   * (This helps detect the first change of an input, even if it is explicitly set to `undefined`.)\n   */\n  private readonly unchangedInputs: Set;\n\n  /** Service for setting zone context. */\n  private readonly ngZone: NgZone;\n\n  /** The zone the element was created in or `null` if Zone.js is not loaded. */\n  private readonly elementZone: Zone | null;\n\n  constructor(\n    private componentFactory: ComponentFactory,\n    private injector: Injector,\n  ) {\n    this.unchangedInputs = new Set(\n      this.componentFactory.inputs.map(({propName}) => propName),\n    );\n    this.ngZone = this.injector.get(NgZone);\n    this.elementZone = typeof Zone === 'undefined' ? null : this.ngZone.run(() => Zone.current);\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    this.runInZone(() => {\n      // If the element is marked to be destroyed, cancel the task since the component was\n      // reconnected\n      if (this.scheduledDestroyFn !== null) {\n        this.scheduledDestroyFn();\n        this.scheduledDestroyFn = null;\n        return;\n      }\n\n      if (this.componentRef === null) {\n        this.initializeComponent(element);\n      }\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    this.runInZone(() => {\n      // Return if there is no componentRef or the component is already scheduled for destruction\n      if (this.componentRef === null || this.scheduledDestroyFn !== 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.scheduledDestroyFn = scheduler.schedule(() => {\n        if (this.componentRef !== null) {\n          this.componentRef.destroy();\n          this.componentRef = null;\n          this.viewChangeDetectorRef = null;\n        }\n      }, DESTROY_DELAY);\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  getInputValue(property: string): any {\n    return this.runInZone(() => {\n      if (this.componentRef === null) {\n        return this.initialInputValues.get(property);\n      }\n\n      return this.componentRef.instance[property];\n    });\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  setInputValue(property: string, value: any, transform?: (value: any) => any): void {\n    this.runInZone(() => {\n      if (transform) {\n        value = transform.call(this.componentRef?.instance, value);\n      }\n\n      if (this.componentRef === null) {\n        this.initialInputValues.set(property, value);\n        return;\n      }\n\n      // Ignore the value if it is strictly equal to the current value, except if it is `undefined`\n      // and this is the first change to the value (because an explicit `undefined` _is_ strictly\n      // equal to not having a value set at all, but we still need to record this as a change).\n      if (\n        strictEquals(value, this.getInputValue(property)) &&\n        !(value === undefined && this.unchangedInputs.has(property))\n      ) {\n        return;\n      }\n\n      // Record the changed value and update internal state to reflect the fact that this input has\n      // changed.\n      this.recordInputChange(property, value);\n      this.unchangedInputs.delete(property);\n      this.hasInputChanges = true;\n\n      // Update the component instance and schedule change detection.\n      this.componentRef.instance[property] = value;\n      this.scheduleDetectChanges();\n    });\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 childInjector = Injector.create({providers: [], parent: this.injector});\n    const projectableNodes = extractProjectableNodes(\n      element,\n      this.componentFactory.ngContentSelectors,\n    );\n    this.componentRef = this.componentFactory.create(childInjector, projectableNodes, element);\n    this.viewChangeDetectorRef = this.componentRef.injector.get(ChangeDetectorRef);\n\n    this.implementsOnChanges = isFunction((this.componentRef.instance as OnChanges).ngOnChanges);\n\n    this.initializeInputs();\n    this.initializeOutputs(this.componentRef);\n\n    this.detectChanges();\n\n    const applicationRef = this.injector.get(ApplicationRef);\n    applicationRef.attachView(this.componentRef.hostView);\n  }\n\n  /** Set any stored initial inputs on the component's properties. */\n  protected initializeInputs(): void {\n    this.componentFactory.inputs.forEach(({propName, transform}) => {\n      if (this.initialInputValues.has(propName)) {\n        // Call `setInputValue()` now that the component has been instantiated to update its\n        // properties and fire `ngOnChanges()`.\n        this.setInputValue(propName, this.initialInputValues.get(propName), transform);\n      }\n    });\n\n    this.initialInputValues.clear();\n  }\n\n  /** Sets up listeners for the component's outputs so that the events stream emits the events. */\n  protected initializeOutputs(componentRef: ComponentRef): void {\n    const eventEmitters: Observable[] = this.componentFactory.outputs.map(\n      ({propName, templateName}) => {\n        const emitter: EventEmitter = componentRef.instance[propName];\n        return emitter.pipe(map((value) => ({name: templateName, value})));\n      },\n    );\n\n    this.eventEmitters.next(eventEmitters);\n  }\n\n  /** Calls ngOnChanges with all the inputs that have changed since the last call. */\n  protected callNgOnChanges(componentRef: ComponentRef): void {\n    if (!this.implementsOnChanges || this.inputChanges === null) {\n      return;\n    }\n\n    // Cache the changes and set inputChanges to null to capture any changes that might occur\n    // during ngOnChanges.\n    const inputChanges = this.inputChanges;\n    this.inputChanges = null;\n    (componentRef.instance as OnChanges).ngOnChanges(inputChanges);\n  }\n\n  /**\n   * Marks the component view for check, if necessary.\n   * (NOTE: This is required when the `ChangeDetectionStrategy` is set to `OnPush`.)\n   */\n  protected markViewForCheck(viewChangeDetectorRef: ChangeDetectorRef): void {\n    if (this.hasInputChanges) {\n      this.hasInputChanges = false;\n      viewChangeDetectorRef.markForCheck();\n    }\n  }\n\n  /**\n   * Schedules change detection to run on the component.\n   * Ignores subsequent calls if already scheduled.\n   */\n  protected scheduleDetectChanges(): void {\n    if (this.scheduledChangeDetectionFn) {\n      return;\n    }\n\n    this.scheduledChangeDetectionFn = scheduler.scheduleBeforeRender(() => {\n      this.scheduledChangeDetectionFn = null;\n      this.detectChanges();\n    });\n  }\n\n  /**\n   * Records input changes so that the component receives SimpleChanges in its onChanges function.\n   */\n  protected recordInputChange(property: string, currentValue: any): void {\n    // Do not record the change if the component does not implement `OnChanges`.\n    if (!this.implementsOnChanges) {\n      return;\n    }\n\n    if (this.inputChanges === null) {\n      this.inputChanges = {};\n    }\n\n    // If there already is a change, modify the current value to match but leave the values for\n    // `previousValue` and `isFirstChange`.\n    const pendingChange = this.inputChanges[property];\n    if (pendingChange) {\n      pendingChange.currentValue = currentValue;\n      return;\n    }\n\n    const isFirstChange = this.unchangedInputs.has(property);\n    const previousValue = isFirstChange ? undefined : this.getInputValue(property);\n    this.inputChanges[property] = new SimpleChange(previousValue, currentValue, isFirstChange);\n  }\n\n  /** Runs change detection on the component. */\n  protected detectChanges(): void {\n    if (this.componentRef === null) {\n      return;\n    }\n\n    this.callNgOnChanges(this.componentRef);\n    this.markViewForCheck(this.viewChangeDetectorRef!);\n    this.componentRef.changeDetectorRef.detectChanges();\n  }\n\n  /** Runs in the angular zone, if present. */\n  private runInZone(fn: () => unknown) {\n    return this.elementZone && Zone.current !== this.elementZone ? this.ngZone.run(fn) : fn();\n  }\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\nimport {Injector, Type} from '@angular/core';\nimport {Subscription} from 'rxjs';\n\nimport {ComponentNgElementStrategyFactory} from './component-factory-strategy';\nimport {NgElementStrategy, NgElementStrategyFactory} from './element-strategy';\nimport {getComponentInputs, getDefaultAttributeToPropertyInputs} from './utils';\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 NgElementConstructor

{\n /**\n * An array of observed attribute names for the custom element,\n * derived by transforming input property names from the source component.\n */\n readonly observedAttributes: string[];\n\n /**\n * Initializes a constructor instance.\n * @param injector If provided, overrides the configured injector.\n */\n new (injector?: Injector): NgElement & WithProperties

;\n}\n\n/**\n * Implements the functionality needed for a custom element.\n *\n * @publicApi\n */\nexport abstract class NgElement extends HTMLElement {\n /**\n * The strategy that controls how a component is transformed in a custom element.\n */\n protected abstract ngElementStrategy: NgElementStrategy;\n /**\n * A subscription to change, connect, and disconnect events in the custom element.\n */\n protected ngElementEventsSubscription: Subscription | null = null;\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 previous value of the attribute.\n * @param newValue The new value of the attribute.\n * @param namespace The namespace in which the attribute is defined.\n * @returns Nothing.\n */\n abstract attributeChangedCallback(\n attrName: string,\n oldValue: string | null,\n newValue: string,\n namespace?: string,\n ): void;\n /**\n * Prototype for a handler that responds to the insertion of the custom element in the DOM.\n * @returns Nothing.\n */\n abstract connectedCallback(): void;\n /**\n * Prototype for a handler that responds to the deletion of the custom element from the DOM.\n * @returns Nothing.\n */\n abstract disconnectedCallback(): void;\n}\n\n/**\n * Additional type information that can be added to the NgElement class,\n * for properties that are added based\n * on the inputs and methods of the underlying component.\n *\n * @publicApi\n */\nexport type WithProperties

= {\n [property in keyof P]: P[property];\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 interface NgElementConfig {\n /**\n * The injector to use for retrieving the component's factory.\n */\n injector: Injector;\n /**\n * An optional custom strategy factory to use instead of the default.\n * The strategy controls how the transformation is performed.\n */\n strategyFactory?: NgElementStrategyFactory;\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 component: Type,\n config: NgElementConfig,\n): NgElementConstructor

{\n const inputs = getComponentInputs(component, config.injector);\n\n const strategyFactory =\n config.strategyFactory || new ComponentNgElementStrategyFactory(component, config.injector);\n\n const attributeToPropertyInputs = getDefaultAttributeToPropertyInputs(inputs);\n\n class NgElementImpl extends NgElement {\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(attributeToPropertyInputs);\n\n protected override get ngElementStrategy(): NgElementStrategy {\n // TODO(andrewseguin): Add e2e tests that cover cases where the constructor isn't called. For\n // now this is tested using a Google internal test suite.\n if (!this._ngElementStrategy) {\n const strategy = (this._ngElementStrategy = strategyFactory.create(\n this.injector || config.injector,\n ));\n\n // Re-apply pre-existing input values (set as properties on the element) through the\n // strategy.\n inputs.forEach(({propName, transform}) => {\n if (!this.hasOwnProperty(propName)) {\n // No pre-existing value for `propName`.\n return;\n }\n\n // Delete the property from the instance and re-apply it through the strategy.\n const value = (this as any)[propName];\n delete (this as any)[propName];\n strategy.setInputValue(propName, value, transform);\n });\n }\n\n return this._ngElementStrategy!;\n }\n\n private _ngElementStrategy?: NgElementStrategy;\n\n constructor(private readonly injector?: Injector) {\n super();\n }\n\n override attributeChangedCallback(\n attrName: string,\n oldValue: string | null,\n newValue: string,\n namespace?: string,\n ): void {\n const [propName, transform] = attributeToPropertyInputs[attrName]!;\n this.ngElementStrategy.setInputValue(propName, newValue, transform);\n }\n\n override connectedCallback(): void {\n // For historical reasons, some strategies may not have initialized the `events` property\n // until after `connect()` is run. Subscribe to `events` if it is available before running\n // `connect()` (in order to capture events emitted during initialization), otherwise subscribe\n // afterwards.\n //\n // TODO: Consider deprecating/removing the post-connect subscription in a future major version\n // (e.g. v11).\n\n let subscribedToEvents = false;\n\n if (this.ngElementStrategy.events) {\n // `events` are already available: Subscribe to it asap.\n this.subscribeToEvents();\n subscribedToEvents = true;\n }\n\n this.ngElementStrategy.connect(this);\n\n if (!subscribedToEvents) {\n // `events` were not initialized before running `connect()`: Subscribe to them now.\n // The events emitted during the component initialization have been missed, but at least\n // future events will be captured.\n this.subscribeToEvents();\n }\n }\n\n override disconnectedCallback(): void {\n // Not using `this.ngElementStrategy` to avoid unnecessarily creating the `NgElementStrategy`.\n if (this._ngElementStrategy) {\n this._ngElementStrategy.disconnect();\n }\n\n if (this.ngElementEventsSubscription) {\n this.ngElementEventsSubscription.unsubscribe();\n this.ngElementEventsSubscription = null;\n }\n }\n\n private subscribeToEvents(): void {\n // Listen for events from the strategy and dispatch them as custom events.\n this.ngElementEventsSubscription = this.ngElementStrategy.events.subscribe((e) => {\n const customEvent = new CustomEvent(e.name, {detail: e.value});\n this.dispatchEvent(customEvent);\n });\n }\n }\n\n // Add getters and setters to the prototype for each property input.\n inputs.forEach(({propName, transform}) => {\n Object.defineProperty(NgElementImpl.prototype, propName, {\n get(): any {\n return this.ngElementStrategy.getInputValue(propName);\n },\n set(newValue: any): void {\n this.ngElementStrategy.setInputValue(propName, newValue, transform);\n },\n configurable: true,\n enumerable: true,\n });\n });\n\n return NgElementImpl as any as NgElementConstructor

;\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\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('18.2.8');\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 NgElement,\n NgElementConfig,\n NgElementConstructor,\n WithProperties,\n} from './src/create-custom-element';\nexport {\n NgElementStrategy,\n NgElementStrategyEvent,\n NgElementStrategyFactory,\n} from './src/element-strategy';\nexport {VERSION} from './src/version';\n\n// This file only reexports content of the `src` folder. Keep it that way.\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// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy