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

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

The 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/**\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  isSignal: boolean;\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  ComponentFactory,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EventEmitter,\n  Injector,\n  NgZone,\n  Type,\n  ɵChangeDetectionScheduler as ChangeDetectionScheduler,\n  ɵNotificationSource as NotificationSource,\n  ɵViewRef as ViewRef,\n  OutputRef,\n} from '@angular/core';\nimport {merge, Observable, ReplaySubject} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nimport {\n  NgElementStrategy,\n  NgElementStrategyEvent,\n  NgElementStrategyFactory,\n} from './element-strategy';\nimport {extractProjectableNodes} from './extract-projectable-nodes';\nimport {scheduler} 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  inputMap = new Map();\n\n  constructor(component: Type, injector: Injector) {\n    this.componentFactory = injector\n      .get(ComponentFactoryResolver)\n      .resolveComponentFactory(component);\n    for (const input of this.componentFactory.inputs) {\n      this.inputMap.set(input.propName, input.templateName);\n    }\n  }\n\n  create(injector: Injector) {\n    return new ComponentNgElementStrategy(this.componentFactory, injector, this.inputMap);\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  /** 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  /** 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  /**\n   * The `ApplicationRef` shared by all instances of this custom element (and potentially others).\n   */\n  private readonly appRef: ApplicationRef;\n\n  /**\n   * Angular's change detection scheduler, which works independently of zone.js.\n   */\n  private cdScheduler: ChangeDetectionScheduler;\n\n  constructor(\n    private componentFactory: ComponentFactory,\n    private injector: Injector,\n    private inputMap: Map,\n  ) {\n    this.ngZone = this.injector.get(NgZone);\n    this.appRef = this.injector.get(ApplicationRef);\n    this.cdScheduler = injector.get(ChangeDetectionScheduler);\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        }\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): void {\n    if (this.componentRef === null) {\n      this.initialInputValues.set(property, value);\n      return;\n    }\n\n    this.runInZone(() => {\n      this.componentRef!.setInput(this.inputMap.get(property) ?? property, value);\n\n      // `setInput` won't mark the view dirty if the input didn't change from its previous value.\n      if ((this.componentRef!.hostView as ViewRef).dirty) {\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        (this.componentRef!.changeDetectorRef as ViewRef).markForRefresh();\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(NotificationSource.CustomElement);\n      }\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\n    this.initializeInputs();\n    this.initializeOutputs(this.componentRef);\n\n    this.appRef.attachView(this.componentRef.hostView);\n    this.componentRef.hostView.detectChanges();\n  }\n\n  /** Set any stored initial inputs on the component's properties. */\n  protected initializeInputs(): void {\n    for (const [propName, value] of this.initialInputValues) {\n      this.setInputValue(propName, value);\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 | OutputRef = componentRef.instance[propName];\n        return new Observable((observer) => {\n          const sub = emitter.subscribe((value) => observer.next({name: templateName, value}));\n          return () => sub.unsubscribe();\n        });\n      },\n    );\n\n    this.eventEmitters.next(eventEmitters);\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 // TODO(alxhub): why are we doing this? this makes no sense.\n inputs.forEach(({propName, transform, isSignal}) => {\n if (!this.hasOwnProperty(propName) || isSignal) {\n // No pre-existing value for `propName`, or a signal input.\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('19.0.5');\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":["ChangeDetectionScheduler"],"mappings":"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"}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy