UNPKG

40.1 kBSource Map (JSON)View Raw
1{"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.io/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 = <any>Element.prototype;\n _matches = elProto.matches || elProto.matchesSelector || elProto.mozMatchesSelector ||\n elProto.msMatchesSelector || elProto.oMatchesSelector || 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}[]) {\n const attributeToPropertyInputs: {[key: string]: string} = {};\n inputs.forEach(({propName, templateName}) => {\n attributeToPropertyInputs[camelToDashCase(templateName)] = propName;\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<any>, injector: Injector): {propName: string, templateName: string}[] {\n const componentFactoryResolver: 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.io/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.io/license\n */\n\nimport {ApplicationRef, ChangeDetectorRef, ComponentFactory, ComponentFactoryResolver, ComponentRef, EventEmitter, Injector, NgZone, OnChanges, SimpleChange, SimpleChanges, Type} from '@angular/core';\nimport {merge, Observable, ReplaySubject} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\n\nimport {NgElementStrategy, NgElementStrategyEvent, NgElementStrategyFactory} 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 *\n * @publicApi\n */\nexport class ComponentNgElementStrategyFactory implements NgElementStrategyFactory {\n componentFactory: ComponentFactory<any>;\n\n constructor(component: Type<any>, injector: Injector) {\n this.componentFactory =\n injector.get(ComponentFactoryResolver).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 *\n * @publicApi\n */\nexport class ComponentNgElementStrategy implements NgElementStrategy {\n // Subject of `NgElementStrategyEvent` observables corresponding to the component's outputs.\n private eventEmitters = new ReplaySubject<Observable<NgElementStrategyEvent>[]>(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<any>|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<string, any>();\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 =\n new Set<string>(this.componentFactory.inputs.map(({propName}) => propName));\n\n /** Service for setting zone context. */\n private readonly ngZone = this.injector.get<NgZone>(NgZone);\n\n /** The zone the element was created in or `null` if Zone.js is not loaded. */\n private readonly elementZone =\n (typeof Zone === 'undefined') ? null : this.ngZone.run(() => Zone.current);\n\n constructor(private componentFactory: ComponentFactory<any>, private injector: Injector) {}\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): void {\n this.runInZone(() => {\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 (strictEquals(value, this.getInputValue(property)) &&\n !((value === undefined) && this.unchangedInputs.has(property))) {\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 =\n extractProjectableNodes(element, this.componentFactory.ngContentSelectors);\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>(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}) => {\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));\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<any>): void {\n const eventEmitters: Observable<NgElementStrategyEvent>[] =\n this.componentFactory.outputs.map(({propName, templateName}) => {\n const emitter: EventEmitter<any> = componentRef.instance[propName];\n return emitter.pipe(map(value => ({name: templateName, value})));\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<any>): 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.io/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<P> {\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<P>;\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, oldValue: string|null, newValue: string, namespace?: string): 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<P> = {\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<P>(\n component: Type<any>, config: NgElementConfig): NgElementConstructor<P> {\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 // NOTE:\n // Some polyfills (e.g. `document-register-element`) do not call the constructor, therefore\n // it is not safe to set `ngElementStrategy` in the constructor and assume it will be\n // available inside the methods.\n //\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 =\n strategyFactory.create(this.injector || config.injector);\n\n // Re-apply pre-existing input values (set as properties on the element) through the\n // strategy.\n inputs.forEach(({propName}) => {\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);\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, oldValue: string|null, newValue: string, namespace?: string): void {\n const propName = attributeToPropertyInputs[attrName]!;\n this.ngElementStrategy.setInputValue(propName, newValue);\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}) => {\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);\n },\n configurable: true,\n enumerable: true,\n });\n });\n\n return (NgElementImpl as any) as NgElementConstructor<P>;\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.io/license\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('13.3.9');\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.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the `elements` package.\n */\nexport {createCustomElement, NgElement, NgElementConfig, NgElementConstructor, WithProperties} from './src/create-custom-element';\nexport {NgElementStrategy, NgElementStrategyEvent, NgElementStrategyFactory} 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.io/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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"}
\No newline at end of file