@arcgis/lumina-compiler 4.33.0-next.60 → 4.33.0-next.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/context/index.d.ts +13 -13
  2. package/dist/context/typeScript.d.ts +2 -2
  3. package/dist/context/utils.d.ts +1 -1
  4. package/dist/dependencies/arcgisCore.d.ts +1 -1
  5. package/dist/dependencies/discover.d.ts +3 -3
  6. package/dist/dependencies/index.d.ts +2 -2
  7. package/dist/dependencies/loaders.d.ts +3 -3
  8. package/dist/dependencies/lumina.d.ts +2 -0
  9. package/dist/dependencies/stencil.d.ts +1 -1
  10. package/dist/dependencies/testSetupFiles.d.ts +1 -1
  11. package/dist/dependencies/updateLumina.d.ts +4 -4
  12. package/dist/dependencies/utils.d.ts +1 -1
  13. package/dist/docs/config.d.ts +1 -1
  14. package/dist/docs/index.d.ts +2 -2
  15. package/dist/docs/stencilDocsJson.d.ts +3 -3
  16. package/dist/docs/vsCodeCustomData/index.d.ts +2 -2
  17. package/dist/docs/vsCodeCustomData/utils.d.ts +2 -2
  18. package/dist/docs/webTypes/description.d.ts +1 -1
  19. package/dist/docs/webTypes/index.d.ts +2 -2
  20. package/dist/docs/webTypes/utils.d.ts +2 -2
  21. package/dist/entrypoints/addNonLazyImports.d.ts +2 -2
  22. package/dist/entrypoints/dtsUtils.d.ts +3 -3
  23. package/dist/entrypoints/findUtils.d.ts +1 -1
  24. package/dist/entrypoints/handleComponentImports.d.ts +2 -2
  25. package/dist/entrypoints/pathMapping.d.ts +1 -1
  26. package/dist/entrypoints/resolveTagName.d.ts +3 -3
  27. package/dist/extractor/apiJsonUtils.d.ts +2 -2
  28. package/dist/extractor/declaration.d.ts +1 -38
  29. package/dist/extractor/extractor.d.ts +3 -4
  30. package/dist/extractor/helpers/cssDoc.d.ts +1 -1
  31. package/dist/extractor/helpers/event.d.ts +3 -3
  32. package/dist/extractor/helpers/jsDoc.d.ts +2 -2
  33. package/dist/extractor/helpers/method.d.ts +3 -3
  34. package/dist/extractor/helpers/property.d.ts +3 -3
  35. package/dist/extractor/helpers/resolveType.d.ts +3 -3
  36. package/dist/extractor/helpers/typeValue.d.ts +2 -2
  37. package/dist/extractor/index.d.ts +2 -2
  38. package/dist/frameworkTypes/index.d.ts +2 -2
  39. package/dist/frameworkTypes/lumina.d.ts +1 -1
  40. package/dist/frameworkTypes/preact.d.ts +1 -1
  41. package/dist/frameworkTypes/react.d.ts +1 -1
  42. package/dist/frameworkTypes/stencil.d.ts +1 -1
  43. package/dist/frameworkTypes/utils.d.ts +2 -2
  44. package/dist/frameworkTypes/vanilla.d.ts +1 -1
  45. package/dist/index.d.ts +10 -10
  46. package/dist/index.js +6351 -109
  47. package/dist/jsxToLitHtml/autoAddNothing.d.ts +2 -2
  48. package/dist/jsxToLitHtml/comments.d.ts +3 -3
  49. package/dist/jsxToLitHtml/convertProps.d.ts +5 -6
  50. package/dist/jsxToLitHtml/imports.d.ts +2 -2
  51. package/dist/jsxToLitHtml/index.d.ts +1 -1
  52. package/dist/jsxToLitHtml/inferPropType.d.ts +2 -2
  53. package/dist/jsxToLitHtml/insertRepeatCall.d.ts +2 -2
  54. package/dist/jsxToLitHtml/jsxVisitor.d.ts +3 -4
  55. package/dist/jsxToLitHtml/templateParts.d.ts +2 -2
  56. package/dist/jsxToLitHtml/throwOnImportingExternalized.d.ts +1 -1
  57. package/dist/jsxToLitHtml/types.d.ts +3 -3
  58. package/dist/loader/hideUntilHydrated.d.ts +1 -1
  59. package/dist/loader/index.d.ts +2 -2
  60. package/dist/loader/lazy.d.ts +3 -3
  61. package/dist/loader/storybookApiJson.d.ts +1 -1
  62. package/dist/plugins/buildCdn.d.ts +2 -2
  63. package/dist/plugins/buildStencilHydrate.d.ts +2 -2
  64. package/dist/plugins/buildWrappers.d.ts +2 -2
  65. package/dist/plugins/configureVite.d.ts +4 -4
  66. package/dist/plugins/externalizeDependencies.d.ts +2 -6
  67. package/dist/plugins/handleDynamicAssets.d.ts +2 -2
  68. package/dist/plugins/handleStaticAssets.d.ts +2 -2
  69. package/dist/plugins/loadLitCss.d.ts +2 -6
  70. package/dist/plugins/printTotalBuildSize.d.ts +2 -2
  71. package/dist/plugins/provideAssets.d.ts +3 -20
  72. package/dist/plugins/setAssetsPath.d.ts +2 -2
  73. package/dist/plugins/updatePackageJson.d.ts +3 -3
  74. package/dist/publicTypes.d.ts +11 -11
  75. package/dist/puppeteerTesting/globalSetup.d.ts +2 -2
  76. package/dist/puppeteerTesting/globalSetup.js +105 -2
  77. package/dist/puppeteerTesting/index.d.ts +7 -8
  78. package/dist/puppeteerTesting/index.js +1129 -5
  79. package/dist/puppeteerTesting/injected.d.ts +1 -1
  80. package/dist/puppeteerTesting/puppeteer/browser.d.ts +1 -1
  81. package/dist/puppeteerTesting/puppeteer/element.d.ts +3 -3
  82. package/dist/puppeteerTesting/puppeteer/events.d.ts +2 -2
  83. package/dist/puppeteerTesting/puppeteer/page.d.ts +1 -1
  84. package/dist/puppeteerTesting/puppeteer/types.d.ts +3 -3
  85. package/dist/puppeteerTesting/vitest/matchers/attributes.d.ts +1 -1
  86. package/dist/puppeteerTesting/vitest/matchers/classList.d.ts +1 -1
  87. package/dist/puppeteerTesting/vitest/matchers/events.d.ts +1 -1
  88. package/dist/puppeteerTesting/vitest/matchers/index.d.ts +13 -13
  89. package/dist/puppeteerTesting/vitest/matchers/text.d.ts +1 -1
  90. package/dist/puppeteerTesting/vitest/runner.d.ts +3 -3
  91. package/dist/puppeteerTesting/vitest/runner.js +50 -1
  92. package/dist/puppeteerTesting/vitest/types.d.ts +1 -1
  93. package/dist/testing/index.d.ts +4 -4
  94. package/dist/testing/index.js +181 -24
  95. package/dist/testing/mount.d.ts +2 -2
  96. package/dist/testing/wrapController.d.ts +2 -2
  97. package/dist/tests/utils.d.ts +2 -2
  98. package/dist/transformers/index.d.ts +3 -3
  99. package/dist/transformers/injectRuntimeOptions.d.ts +2 -2
  100. package/dist/transformers/internalTypeScriptApis.d.ts +2 -2
  101. package/dist/transformers/liftDecorators.d.ts +1 -1
  102. package/dist/transformers/members.d.ts +2 -2
  103. package/dist/transformers/property.d.ts +3 -3
  104. package/dist/transformers/propertyOptions.d.ts +4 -4
  105. package/dist/transformers/utils.d.ts +3 -3
  106. package/dist/types/astTransformers.d.ts +2 -2
  107. package/dist/types/failOnJsonImport.d.ts +1 -1
  108. package/dist/types/hideInternalLitElement.d.ts +1 -1
  109. package/dist/types/index.d.ts +2 -2
  110. package/dist/types/liftSetterTypes.d.ts +2 -3
  111. package/dist/types/textTransformers.d.ts +2 -2
  112. package/dist/types/transformComponentMembers.d.ts +1 -1
  113. package/dist/types-C3YmWTVv.js +13 -0
  114. package/dist/useLumina.d.ts +1 -1
  115. package/package.json +5 -5
  116. package/dist/chunk-6XNX5V4L.js +0 -1
  117. package/dist/chunk-JFKSI6I7.js +0 -1
  118. package/dist/context/typeScript.spec.d.ts +0 -1
  119. package/dist/context/utils.spec.d.ts +0 -1
  120. package/dist/defaultAssetsUrl.spec.d.ts +0 -1
  121. package/dist/dependencies/lit.d.ts +0 -2
  122. package/dist/dependencies/updateLumina.spec.d.ts +0 -1
  123. package/dist/docs/steniclDocsJson.test.d.ts +0 -1
  124. package/dist/entrypoints/dtsUtils.spec.d.ts +0 -1
  125. package/dist/entrypoints/findUtils.spec.d.ts +0 -1
  126. package/dist/entrypoints/resolveTagName.spec.d.ts +0 -1
  127. package/dist/extractor/declaration.spec.d.ts +0 -1
  128. package/dist/extractor/helpers/cssDoc.spec.d.ts +0 -1
  129. package/dist/extractor/helpers/resolveType.spec.d.ts +0 -1
  130. package/dist/extractor/helpers/typeValue.spec.d.ts +0 -1
  131. package/dist/jsxToLitHtml/utils.spec.d.ts +0 -1
  132. package/dist/loader/lazy.spec.d.ts +0 -1
  133. package/dist/plugins/buildCdn.spec.d.ts +0 -1
  134. package/dist/plugins/externalizeDependencies.spec.d.ts +0 -1
  135. package/dist/plugins/provideAssets.spec.d.ts +0 -1
  136. package/dist/plugins/updatePackageJson.spec.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- import { type ProvidedContext } from "vitest";
1
+ import { ProvidedContext } from 'vitest';
2
2
  /**
3
3
  * Convenience wrapper around "inject()" API to improve DX
4
4
  *
@@ -1,4 +1,4 @@
1
- import type { Browser } from "puppeteer";
1
+ import { Browser } from 'puppeteer';
2
2
  /**
3
3
  * This is called when test is executing in a non-main thread. We connect to
4
4
  * the browser instance using a web socket.
@@ -1,6 +1,6 @@
1
- import type { ClickOptions, ElementHandle, KeyInput } from "puppeteer";
2
- import { EventSpy } from "./events";
3
- import type { E2EPage, FindSelector, SerializedEvent } from "./types";
1
+ import { ClickOptions, ElementHandle, KeyInput } from 'puppeteer';
2
+ import { EventSpy } from './events';
3
+ import { E2EPage, FindSelector, SerializedEvent } from './types';
4
4
  /**
5
5
  * This file is part of the puppeteerTesting bundle. That bundle may be
6
6
  * imported even before happy-dom is setup.
@@ -1,5 +1,5 @@
1
- import type { ElementHandle, JSHandle } from "puppeteer";
2
- import type { E2EPage, SerializedEvent } from "./types";
1
+ import { ElementHandle, JSHandle } from 'puppeteer';
2
+ import { E2EPage, SerializedEvent } from './types';
3
3
  export declare function initPageEvents(page: E2EPage): Promise<void>;
4
4
  export declare function pageSpyOnEvent(page: E2EPage, eventName: string, selector?: "document" | "window"): Promise<EventSpy>;
5
5
  export declare function waitForEvent<Detail = unknown>(page: E2EPage, eventName: string, elementHandle: ElementHandle): Promise<SerializedEvent<Detail>>;
@@ -1,4 +1,4 @@
1
- import type { E2EPage } from "./types";
1
+ import { E2EPage } from './types';
2
2
  export type NewE2EPageOptions = {
3
3
  html?: string;
4
4
  };
@@ -1,6 +1,6 @@
1
- import type { HTTPResponse, Page, WaitForOptions } from "puppeteer";
2
- import type { EventSpy } from "./events";
3
- import type { E2EElement } from "./element";
1
+ import { HTTPResponse, Page, WaitForOptions } from 'puppeteer';
2
+ import { EventSpy } from './events';
3
+ import { E2EElement } from './element';
4
4
  export interface PageDiagnostic {
5
5
  type: "error" | "pageerror" | "requestfailed";
6
6
  message?: string;
@@ -1,4 +1,4 @@
1
- import type { RawMatcherFn } from "@vitest/expect";
1
+ import { RawMatcherFn } from '@vitest/expect';
2
2
  export declare const toEqualAttribute: RawMatcherFn;
3
3
  export declare const toEqualAttributes: RawMatcherFn;
4
4
  export declare const toHaveAttribute: RawMatcherFn;
@@ -1,4 +1,4 @@
1
- import type { RawMatcherFn, SyncExpectationResult } from "@vitest/expect";
1
+ import { RawMatcherFn, SyncExpectationResult } from '@vitest/expect';
2
2
  export declare const toHaveClass: RawMatcherFn;
3
3
  export declare const toHaveClasses: (element: unknown, expectClassNames: string[]) => SyncExpectationResult;
4
4
  export declare const toMatchClasses: RawMatcherFn;
@@ -1,4 +1,4 @@
1
- import type { RawMatcherFn } from "@vitest/expect";
1
+ import { RawMatcherFn } from '@vitest/expect';
2
2
  export declare const toHaveReceivedEvent: RawMatcherFn;
3
3
  export declare const toHaveReceivedEventTimes: RawMatcherFn;
4
4
  export declare const toHaveReceivedEventDetail: RawMatcherFn;
@@ -1,17 +1,17 @@
1
1
  export declare const expectExtend: {
2
- toEqualAttribute: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
3
- toEqualAttributes: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
4
- toEqualText: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
5
- toHaveAttribute: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
6
- toHaveClass: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
7
- toHaveClasses: (element: unknown, expectClassNames: string[]) => import("@vitest/expect").SyncExpectationResult;
8
- toMatchClasses: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
9
- toHaveReceivedEvent: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
10
- toHaveReceivedEventTimes: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
11
- toHaveReceivedEventDetail: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
12
- toHaveFirstReceivedEventDetail: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
13
- toHaveLastReceivedEventDetail: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
14
- toHaveNthReceivedEventDetail: import("@vitest/expect").RawMatcherFn<import("@vitest/expect").MatcherState>;
2
+ toEqualAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
3
+ toEqualAttributes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
4
+ toEqualText: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
5
+ toHaveAttribute: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
6
+ toHaveClass: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
7
+ toHaveClasses: (element: unknown, expectClassNames: string[]) => import('@vitest/expect').SyncExpectationResult;
8
+ toMatchClasses: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
9
+ toHaveReceivedEvent: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
10
+ toHaveReceivedEventTimes: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
11
+ toHaveReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
12
+ toHaveFirstReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
13
+ toHaveLastReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
14
+ toHaveNthReceivedEventDetail: import('@vitest/expect').RawMatcherFn<import('@vitest/expect').MatcherState>;
15
15
  };
16
16
  export interface PuppeteerMatchers<R = unknown> {
17
17
  toEqualAttribute: (expectedAttribute: string, expectedValue: unknown) => R;
@@ -1,2 +1,2 @@
1
- import type { RawMatcherFn } from "@vitest/expect";
1
+ import { RawMatcherFn } from '@vitest/expect';
2
2
  export declare const toEqualText: RawMatcherFn;
@@ -1,6 +1,6 @@
1
- import { VitestTestRunner } from "vitest/runners";
2
- import type { Page } from "puppeteer";
3
- import type { Suite } from "@vitest/runner";
1
+ import { VitestTestRunner } from 'vitest/runners';
2
+ import { Page } from 'puppeteer';
3
+ import { Suite } from '@vitest/runner';
4
4
  /**
5
5
  * This has to be default export for Vitest to discover it
6
6
  *
@@ -1 +1,50 @@
1
- import{a as o,b as s}from"../../chunk-6XNX5V4L.js";import"../../chunk-JFKSI6I7.js";import{VitestTestRunner as p}from"vitest/runners";import{connect as w}from"puppeteer";async function i(){return await w(o.puppeteerConnectOptions)}var r=class extends p{constructor(...e){super(...e);this._browser=void 0;this._pages=[];this._pageCloseExpected=!1;this._browserClosePromise=void 0;s.runner=this;let t=5e3;if((this.config.testTimeout??t)===t){let c=this.config.inspector.enabled===!0||o.isDevToolsEnabled?36e5:3e4;this.config.testTimeout=c}}async createNewPage(){if(this._browserClosePromise!==void 0)throw new Error('newE2EPage was called after teardown has begun. Check if you forgot an "await" somewhere in your test');if(this._pageCloseExpected)throw new Error('newE2EPage was called while other pages where being closed. This means you either run two newE2EPage at the same time, or your called newE2EPage after teardown has begun. Check if you forgot an "await" somewhere in your test');if(this._browser??=await this._connectBrowser(),this._pages.length>0&&await this._closeOpenPages(),!this._browser.connected)throw new Error("Trying to create a new E2E page on a disconnected browser.");let e=await this._browser.newPage();return e.once("close",()=>{if(!this._pageCloseExpected)throw new Error("Page was closed unexpectedly")}),this._pages.push(e),e}async _connectBrowser(){let e=await i();return e.once("disconnected",()=>{if(this._browser=void 0,this._browserClosePromise===void 0)throw new Error("Browser was disconnected unexpectedly")}),e}async _closeOpenPages(){this._pageCloseExpected=!0,await Promise.all(this._pages.filter(e=>!e.isClosed()).map(async e=>await e.close())),this._pages.length=0,this._pageCloseExpected=!1}async onAfterRunSuite(e){let t=super.onAfterRunSuite(e);e.file===e?(this._browserClosePromise=this._closeOpenPages().then(async()=>await this._browser?.disconnect()),await Promise.all([t,this._browserClosePromise]),this._browserClosePromise=void 0):await t}};export{r as default};
1
+ import { VitestTestRunner as n } from "vitest/runners";
2
+ import { i as t, p as a } from "../../types-C3YmWTVv.js";
3
+ import { connect as c } from "puppeteer";
4
+ async function w() {
5
+ return await c(t.puppeteerConnectOptions);
6
+ }
7
+ class f extends n {
8
+ constructor(...e) {
9
+ super(...e), this._browser = void 0, this._pages = [], this._pageCloseExpected = !1, this._browserClosePromise = void 0, a.runner = this;
10
+ const s = 5e3;
11
+ if ((this.config.testTimeout ?? s) === s) {
12
+ const i = this.config.inspector.enabled === !0 || t.isDevToolsEnabled ? 36e5 : 3e4;
13
+ this.config.testTimeout = i;
14
+ }
15
+ }
16
+ async createNewPage() {
17
+ if (this._browserClosePromise !== void 0)
18
+ throw new Error(
19
+ 'newE2EPage was called after teardown has begun. Check if you forgot an "await" somewhere in your test'
20
+ );
21
+ if (this._pageCloseExpected)
22
+ throw new Error(
23
+ 'newE2EPage was called while other pages where being closed. This means you either run two newE2EPage at the same time, or your called newE2EPage after teardown has begun. Check if you forgot an "await" somewhere in your test'
24
+ );
25
+ if (this._browser ??= await this._connectBrowser(), this._pages.length > 0 && await this._closeOpenPages(), !this._browser.connected)
26
+ throw new Error("Trying to create a new E2E page on a disconnected browser.");
27
+ const e = await this._browser.newPage();
28
+ return e.once("close", () => {
29
+ if (!this._pageCloseExpected)
30
+ throw new Error("Page was closed unexpectedly");
31
+ }), this._pages.push(e), e;
32
+ }
33
+ async _connectBrowser() {
34
+ const e = await w();
35
+ return e.once("disconnected", () => {
36
+ if (this._browser = void 0, this._browserClosePromise === void 0)
37
+ throw new Error("Browser was disconnected unexpectedly");
38
+ }), e;
39
+ }
40
+ async _closeOpenPages() {
41
+ this._pageCloseExpected = !0, await Promise.all(this._pages.filter((e) => !e.isClosed()).map(async (e) => await e.close())), this._pages.length = 0, this._pageCloseExpected = !1;
42
+ }
43
+ async onAfterRunSuite(e) {
44
+ const s = super.onAfterRunSuite(e);
45
+ e.file === e ? (this._browserClosePromise = this._closeOpenPages().then(async () => await this._browser?.disconnect()), await Promise.all([s, this._browserClosePromise]), this._browserClosePromise = void 0) : await s;
46
+ }
47
+ }
48
+ export {
49
+ f as default
50
+ };
@@ -1,4 +1,4 @@
1
- import type PuppeteerTestRunner from "./runner";
1
+ import { default as PuppeteerTestRunner } from './runner';
2
2
  export type PuppeteerGlobalThis = typeof globalThis & {
3
3
  runner: PuppeteerTestRunner;
4
4
  };
@@ -5,7 +5,7 @@
5
5
  * Thus, make sure to not import anything from the rest of the lumina-compiler
6
6
  * in this bundle.
7
7
  */
8
- export type { RenderOptions, RenderResult } from "./mount";
9
- export { mount } from "./mount";
10
- export { setupLuminaTest } from "./setupFile";
11
- export { wrapController } from "./wrapController";
8
+ export type { RenderOptions, RenderResult } from './mount';
9
+ export { mount } from './mount';
10
+ export { setupLuminaTest } from './setupFile';
11
+ export { wrapController } from './wrapController';
@@ -1,24 +1,181 @@
1
- import"../chunk-JFKSI6I7.js";import{render as Q}from"lit-html";import{html as X,unsafeStatic as R}from"lit-html/static.js";import{camelToKebab as xe}from"@arcgis/components-utils";import{onTestFinished as De}from"vitest";async function ke(e,{parent:t=document.body,afterConnect:n,dynamicComponents:o,cleanupAfterTest:s=!0}={}){let r=document.createElement("div");r.style.display="contents",t.append(r),s&&De(()=>Te(r)),Z(e);let a=o?.some(Z),i;if(typeof e=="string")i=X`<${R(e)}></${R(e)}>`;else if(typeof e=="function")i="tagName"in e?X`<${R(e.tagName)}></${R(e.tagName)}>`:e();else{if(a)throw new Error('When rendering a dynamically created custom element using Lit\'s html`` function, you must ensure that the custom element class name is unique in the test file, or the class should explicitly have the `static override tagName = "some-tag-name";` property with a unique tag name within the test file');i=e}let l=[];function d(h){l.push(h.error),h.preventDefault(),h.stopPropagation()}if(window.addEventListener("error",d),Q(i,r),window.removeEventListener("error",d),l.length===1)throw l[0];if(l.length>1)throw new AggregateError(l,"Multiple errors occurred while creating the custom element");let c=ee(r),p=V,k=n?.(c);k?.then!==void 0&&await k;let _=c;typeof _?.componentOnReady=="function"&&await _.componentOnReady();let g=_?._litElement??p??c;return{el:c,component:g,async reRender(){return typeof e=="function"&&!("tagName"in e)&&Q(e(),t),g.requestUpdate(),await g.updateComplete}}}var V,Oe=globalThis;Oe.devOnly$luminaComponentRefCallback=e=>{V=e};function Te(e){for(;e.firstChild;)e.removeChild(e.firstChild);e instanceof HTMLElement&&e.remove()}function Z(e){if(!Ne(e)||e.runtime!==void 0)return!1;let t=!1,n=e.tagName;if(!n){t=!1;let o=xe((e.name.length>1?e.name.replaceAll(Pe,""):"")||"Test"),s=o==="test"?"te-st":o.includes("-")?o:`${o}-`;n=s;for(let r=2,a=customElements.get(n);a!==e&&a!==void 0;r+=1)t=!0,n=`${s}-${r}`,a=customElements.get(n)}return globalThis.devOnly$luminaRuntime?.customElement(n,e),Object.defineProperty(e.prototype,"tagName",{value:n.toUpperCase()}),t}var Ne=e=>typeof e=="function"&&"lumina"in e,Pe=/\d+$/gu;function ee(e){for(let t of e.children)if("lumina"in t.constructor)return t;for(let t of e.children){let n=ee(t);if(n!=null)return n}return e.firstElementChild??V?.el}import $e from"vitest-fail-on-console";import{expect as Re}from"vitest";import Se from"js-beautify";function te(){Re.addSnapshotSerializer({test(e){return typeof e=="object"&&e!==null&&"innerHTML"in e&&"onslotchange"in e},serialize(e){let t=e.innerHTML.replaceAll(Ue,"");return Se.html(t,{indent_size:2,indent_char:" ",preserve_newlines:!1,wrap_line_length:70,indent_inner_html:!1,indent_empty_lines:!1})}})}var Ue=/<!--\??(?:lit\$\d+\$)?-->/gu;function Me(){if(ne[oe])return;ne[oe]=!0;let e={...console};$e({silenceMessage(t,n){return e[n](t),!1}}),te()}var oe=Symbol.for("lumina:didSetupTest"),ne=globalThis;import{isEsriInternalEnv as je,isNotUndefined as Ie}from"@arcgis/components-utils";function re(e,t){if(t){let n=e.constructor.elementProperties;e.manager.internals.members=Object.fromEntries(Array.from(n,([o,s])=>s.noAccessor?void 0:[o,[(s.readOnly?2048:0)|(s.state?32:16)]]).filter(Ie))}else{let n=e.constructor,o=n.__registerControllers?.(e)??void 0;if(n.__registerControllers=void 0,typeof o!="object")throw new Error(process.env.NODE_ENV!=="production"&&je()?"Failed to retrieve internal component meta. Make sure you have the useComponentsControllers() Rollup Plugin for Stencil Controllers configured in your Stencil config.":"Failed to retrieve component meta");e.manager.internals.members=Object.fromEntries(Object.entries(o).filter(([s,[r]])=>(r&63)!==0))}}function se(e,t=8){return e==null||typeof e=="object"||typeof e=="function"?e:(t&4)!==0?e==="false"?!1:e===""||!!e:(t&2)!==0?Number.parseFloat(e):(t&1)!==0?String(e):e}var W=(e,t)=>e.manager.internals.members?.[t]?.[0];import{isEsriInternalEnv as de}from"@arcgis/components-utils";import{isEsriInternalEnv as U}from"@arcgis/components-utils";import{Deferred as Ge,isEsriInternalEnv as P,safeAsyncCall as ie,safeCall as u}from"@arcgis/components-utils";import{safeCall as Je}from"@arcgis/components-utils";import{isEsriInternalEnv as Be,safeCall as Ke}from"@arcgis/components-utils";import{safeCall as ze}from"@arcgis/components-utils";import{isEsriInternalEnv as Ye}from"@arcgis/components-utils";import{isEsriInternalEnv as Ut}from"@arcgis/components-utils";var $=Symbol.for("controller"),F="@arcgis/components-controllers",pe=e=>typeof e=="object"&&e!==null&&($ in e||"hostConnected"in e||"hostDisconnected"in e||"hostUpdate"in e||"hostUpdated"in e),he=process.env.NODE_ENV!=="production"&&de()?(e,t)=>{let n=e.component.manager,o="_controllers"in n?n._controllers:void 0;if(o===void 0)return;let s=Array.from(o).indexOf(e);if(s===-1)return;let r=Symbol.for(`${F}: devOnlyControllerData`),a=e.component.el;a[r]??(a[r]={}),a[r][s]=t}:void 0,Dt=process.env.NODE_ENV!=="production"&&de()?e=>{let t=e.component.manager,n="_controllers"in t?t._controllers:void 0;if(n===void 0)return;let o=Array.from(n).indexOf(e),s=Symbol.for(`${F}: devOnlyControllerData`);return e.component.el[s]?.[o]}:void 0;function ue(e){return typeof e?.then=="function"}var L;function E(e){L!==e&&(L=e,queueMicrotask(()=>{L===e&&(L=void 0)}))}function M(e){if(process.env.NODE_ENV!=="production"&&L===void 0)throw new Error([`Unable to find out which component ${e||"this"} controller `,`belongs to. Possible causes:
2
- `,"- You might have multiple versions of ",`@arcgis/components-controllers package installed
3
- `,...U()?["- You tried to create controller outside the component. If so, ","please wrap your controller definition in an arrow function (like","`const myController = ()=>makeController(...);`) and call that","function inside the component (`my = myController();`), or ","define your controller using makeGenericController/GenericController ",`instead.
4
- `,"- You tried to create a controller inside an async function. ","This is allowed without calling controller.use(). Make sure you ","use it like `await controller.use(useController())`."]:[]].join(""));return L}var v=[];function j(e){if(e===void 0){v=[];return}let t=v.indexOf(e);v=t===-1?[...v,e]:v.slice(0,t+1),queueMicrotask(()=>{v=[]})}function I(){return v}var x;function Ae(e){x!==e&&(x=e,queueMicrotask(()=>{x===e&&(x=void 0)}))}function Ve(){let e=x;return x=void 0,e}var We=async(e,t)=>{let n=q(e);if(n===void 0){if(process.env.NODE_ENV!=="production"&&U()&&typeof t=="function")throw new Error("Unable to resolve a controller from the provided value, so can't watch it's exports. The value you passed is not a controller and not a controller exports. If your controller exports a literal value, try making your controller export an object instead");return e}if(await n.ready,typeof t=="function"){if(process.env.NODE_ENV!=="production"&&U()&&n.watchExports===void 0)throw new Error("The controller must implement watchExports method to support watching exports");let o=n.watchExports(s=>t(s,o))}return n.exports},He=async e=>{let t=q(e);if(process.env.NODE_ENV!=="production"&&U()&&t===void 0)throw new Error("Unable to resolve a controller from the provided value. The value you passed is not a controller and not a controller exports. If your controller exports a literal value, try making your controller export an object instead");return await t.ready,t},q=e=>{let n=M().manager.internals.resolveExports(e);if(n!==void 0)return n;if(pe(e))return e;let o=Ve();if(o!==void 0)return o},T={setter:!1,getter:!1,readOnly:!1},N=new WeakMap,fe;fe=$;var J=class{constructor(e){this._callbacks={hostConnected:[],hostDisconnected:[],hostLoad:[],hostLoaded:[],hostUpdate:[],hostUpdated:[],hostDestroy:[],hostLifecycle:[]},this._ready=new Ge,this._lifecycleCleanups=[],this.connectedCalled=!1,this._loadCalled=!1,this.loadedCalled=!1,this[fe]=!0,this.ready=this._ready.promise,this._exports=le(this),this._exportWatchers=new Set;let t=qe(e??M(new.target.name));process.env.NODE_ENV!=="production"?(Object.defineProperty(this,"component",{writable:!1,enumerable:!1,configurable:!0,value:t}),"hostDestroy"in this&&this.component.manager.ensureHasDestroy?.()):this.component=t,this.component.addController(this),this.component.manager===void 0||(j(this),queueMicrotask(()=>this.catchUpLifecycle()))}catchUpLifecycle(){let{manager:e}=this.component;e.connectedCalled&&!this.connectedCalled&&this.triggerConnected(),e._loadCalled&&this.triggerLoad().then(()=>{e.loadedCalled&&this.triggerLoaded()}).catch(console.error)}get exports(){return this._exports}set exports(e){let t=this._exports;t!==e&&(this._exports=e,this._exportWatchers.forEach(u),this.connectedCalled&&this.assignedProperty!==!1&&this.component.requestUpdate(this.assignedProperty,t)),this._ready.resolve(e)}setProvisionalExports(e,t=!0){this._exports=t?le(e):e,this._exportWatchers.forEach(u)}watchExports(e){let t=()=>e(this._exports);return this._exportWatchers.add(t),()=>void this._exportWatchers.delete(t)}get use(){return E(this.component),We}get useRef(){return E(this.component),He}get useRefSync(){return E(this.component),q}controllerRemoved(){this.component.el.isConnected&&this.triggerDisconnected(),this.triggerDestroy()}onConnected(e){this._callbacks.hostConnected.push(e)}onDisconnected(e){this._callbacks.hostDisconnected.push(e)}onLoad(e){this._callbacks.hostLoad.push(e)}onLoaded(e){this._callbacks.hostLoaded.push(e)}onUpdate(e){this._callbacks.hostUpdate.push(e)}onUpdated(e){this._callbacks.hostUpdated.push(e)}onDestroy(e){process.env.NODE_ENV!=="production"&&P()&&this.component.manager.ensureHasDestroy?.(),this._callbacks.hostDestroy.push(e)}onLifecycle(e){this._callbacks.hostLifecycle.push(e),this.connectedCalled&&this.component.el.isConnected&&this._callLifecycle(e)}triggerConnected(){let e=this;e.hostConnected&&u(e.hostConnected,e),this._callbacks.hostConnected.forEach(u),this.triggerLifecycle(),this.connectedCalled=!0}triggerDisconnected(){let e=this;e.hostDisconnected&&u(e.hostDisconnected,e),this._callbacks.hostDisconnected.forEach(u),this._lifecycleCleanups.forEach(u),this._lifecycleCleanups=[]}async triggerLoad(){if(this._loadCalled)return;this._loadCalled=!0;let e=this;e.hostLoad&&await ie(e.hostLoad,e),this._callbacks.hostLoad.length>0&&await Promise.allSettled(this._callbacks.hostLoad.map(ie)),this._ready.resolve(this._exports)}triggerLoaded(){if(this.loadedCalled)return;let e=this;e.hostLoaded&&u(e.hostLoaded,e),this._callbacks.hostLoaded.forEach(u),this.loadedCalled=!0}triggerUpdate(e){let t=this;t.hostUpdate&&u(t.hostUpdate,t,e),this._callbacks.hostUpdate.forEach(ae,e)}triggerUpdated(e){let t=this;t.hostUpdated&&u(t.hostUpdated,t,e),this._callbacks.hostUpdated.forEach(ae,e)}triggerDestroy(){let e=this;e.hostDestroy&&u(e.hostDestroy,e),this._callbacks.hostDestroy.forEach(u)}triggerLifecycle(){let e=this;e.hostLifecycle&&this._callLifecycle(()=>e.hostLifecycle()),this._callbacks.hostLifecycle.forEach(this._callLifecycle,this)}_callLifecycle(e){E(this.component);let t=u(e);(Array.isArray(t)?t:[t]).forEach(o=>{typeof o=="function"?this._lifecycleCleanups.push(o):typeof o=="object"&&typeof o.remove=="function"&&this._lifecycleCleanups.push(o.remove)})}};function ae(e){u(e,void 0,this)}var me=J;function le(e){if(typeof e!="object"&&typeof e!="function"||e===null)return e;let t=new Proxy(e,{get(n,o,s){if(!(Fe.has(o)&&o in n&&n[o]===t)){if(o in n||o in Promise.prototype||typeof o=="symbol")return typeof n=="function"?n[o]:Reflect.get(n,o,s);if(process.env.NODE_ENV!=="production"&&P()){if(process.env.NODE_ENV==="test"&&(o.startsWith("$$")||o.startsWith("@@")||o==="nodeType"||o==="tagName"||o==="toJSON"||o==="hasAttribute"))return;console.error(`Trying to access "${o.toString()}" on the controller before it's loaded. ${ce}`)}}},set:(n,o,s,r)=>(process.env.NODE_ENV!=="production"&&P()&&console.error(`Trying to set "${o.toString()}" on the controller before it's loaded. ${ce}`),Reflect.set(n,o,s,r))});return t}var Fe=new Set(["exports","_exports"]),ce=process.env.NODE_ENV!=="production"&&P()?["This might be the case if you are trying to access an async controller in ","connectedCallback(). Or, if you are using it inside of ","componentWillLoad()/another controller without controller.use. Example correct ",`usage:
5
- `,"makeController(async (component, controller)=>{ await controller.use(someOtherController); });"].join(""):void 0;function qe(e){if(process.env.NODE_ENV!=="production"&&P()){if("addController"in e)return e;throw new Error("Component does not implement ControllerHost. This might be because you forgot to add 'manager: Controller<this> = useControllerManager(this);' in your component, or you tried to use some controller before that line")}else return e}function ye(e,t,n){let o=Object.keys(e),s=o.length;C===void 0&&queueMicrotask(B),C??(C=new Map);let r=C.get(e);return r===void 0&&(r={callbacks:[],keyCount:s},C.set(e,r)),r.keyCount!==s&&(r.callbacks.forEach(a=>a(o)),r.callbacks=[],r.keyCount=s),r.callbacks.push(a=>{let i=d=>Je(t,null,d),l=a[s];l===void 0?i(void 0):e[l]===n?i(l):i(void 0)}),n}var C=void 0;function B(){Array.from(C?.entries()??[]).forEach(([e,{callbacks:t}])=>{let n=Object.keys(e);t.forEach(o=>o(n))}),C=void 0}function K(e,t,n){var o;let s=t;if(process.env.NODE_ENV!=="production"&&Be()&&W(e,s)===void 0)throw new Error(e.manager.isLit?`Trying to watch a non-@property, non-@state property "${s}". Either convert it into a @state() to be able to use watch() on it, or use the get/set syntax`:`Trying to watch a non-@Prop, non-@State property "${s}". Convert it into a @State() or @Prop property if you need to use watch() on it`);let r=e.manager.internals;(o=r.allWatchers)[s]??(o[s]=[]);let a=r.allWatchers[s],i=n,l=(d,c,p)=>Ke(i,null,d,c,p);return a.push(l),()=>{let d=a.indexOf(l);d!==-1&&a.splice(d,1)}}var ge=class{constructor(e){this.enabledWatchers={},this.allWatchers={},this.enableReadonly=()=>{if(this.enableReadonly=void 0,!this.component.manager.isLit)return;let t=this.component.manager.internals;Object.entries(t.members).forEach(([n,[o]])=>{var s;o&2048&&((s=t.setters)[n]??(s[n]=[]),t.setters[n].push(t.readonlySetter))})},this.trackedValue=G,this.keyTrackers=[],this.getters={},this.setters={},this.accessorGetter={},this.accessorSetter={},this._exports=new WeakMap,this.readonlySetter=(t,n,o)=>{if(T.readOnly)return t;throw new Error(`Cannot assign to read-only property "${o}" of ${this.component.el.tagName.toLowerCase()}. Trying to assign "${String(t)}"`)},process.env.NODE_ENV!=="production"?Object.defineProperty(this,"component",{writable:!1,enumerable:!1,configurable:!0,value:e}):this.component=e}firePropTrackers(e,t){let n=this.keyTrackers;this.trackedValue=G,this.keyTrackers=[],n.forEach(o=>o(e,t))}getSetProxy(e){let t=this.component,n=t.constructor.prototype;if(this._getSetProxy(n,e,"class"),t.manager.isLit)return;let o=t.el.constructor.prototype;n!==o&&this._getSetProxy(o,e,"html")}_getSetProxy(e,t,n){let o=this.component,s=W(o,t),r;do r=Object.getOwnPropertyDescriptor(e,t);while(!r&&(e=Object.getPrototypeOf(e)));if(process.env.NODE_ENV!=="production"&&Ye()){let g=n==="html";if(r?.set===void 0||r.get===void 0){if(r!==void 0&&"value"in r)throw new Error(`getSet() should only be used on @Prop/@property/@State/@state properties. For internal component properties, use regular get/set syntax. Tried to use it on "${t}" in ${o.el.tagName}`);if(g)return;throw new Error(`Unable to find "${t}" property on the ${o.el.tagName} component`)}if(s===void 0)throw new Error("Unable to retrieve prop type")}else if(!r)return;let a=r.get,i=r.set,l=S in a,d=S in i;if(l&&d)return;let c=!l,p=!d,k=c?function(){let h=a.call(this),m=N.get(this);if(T.getter||m===void 0)return h;let w=m.manager.internals;h=w.accessorGetter[t](h,t);let f=w.getters[t]??H;for(let y=0;y<f.length;y++)h=f[y](h,t);return h}:a,_=p?function(h){let m=a.call(this),w=N.get(this);if(w===void 0){i.call(this,h);return}let f=w.manager.isLit?h??void 0:se(h,s),y=w.manager.internals;if(f===m)i.call(this,f);else{let Y=T.setter?H:y.setters[t]??H;for(let O=0;O<Y.length&&(f=Y[O](f,m,t),f!==m);O++);f=y.accessorSetter[t](f,m,t),i.call(this,f),f!==m&&y.enabledWatchers[t]?.forEach(O=>O(f,m,t))}y.keyTrackers.length>0&&y?.firePropTrackers(t,h)}:i;c&&(k[S]=!0),p&&(_[S]=!0),Object.defineProperty(e,t,{...r,get:k,set:_})}markExports(e,t){(typeof t=="object"&&t!==null||typeof t=="function")&&this._exports.set(t,e)}resolveExports(e){if(typeof e=="object"&&e!==null||typeof e=="function")return this._exports.get(e)}},H=[],S=Symbol(),G=process.env.NODE_ENV!=="production"?Symbol.for(`${F}: nothing`):Symbol();function ve(e,t,n){let o=e.manager.internals;return o.trackedValue!==G&&o.trackedValue!==n&&o.firePropTrackers(void 0,void 0),o.keyTrackers.length===0&&queueMicrotask(()=>o.firePropTrackers(void 0,void 0)),o.trackedValue=n,o.keyTrackers.push((s,r)=>ze(t,void 0,n===r?s:void 0)),n}function Ce(e=[M(),...I()],t,n){let o=Array.isArray(e)?e:[e],s=o.length+1,r=i=>{s-=1,i!==void 0&&(s=Math.min(s,0)),s===0&&t(i)};o.forEach(i=>ye(i,l=>r(l===void 0?void 0:{key:l,host:i,isReactive:!1}),n));let a=o.find(i=>"manager"in i&&typeof i.manager=="object"&&i.manager.component===i);return a&&ve(a,i=>r(i===void 0?void 0:{key:i,host:a,isReactive:!0}),n),n}function Ee(e){T.readOnly=!0;try{return e()}finally{T.readOnly=!1}}var be=e=>(...t)=>{let n=I(),o=new e(...t),s=o.exports;j(n.at(-1));let r=o.component.manager.internals;r.markExports(o,s),o.watchExports(i=>r.markExports(o,i)),Ae(o);let a=[o.component,...n].reverse();return Ce(a,i=>i===void 0?void 0:Qe(o,i,s),s)};function Qe(e,{host:t,key:n,isReactive:o},s){let r=t,a=r[n]!==e.exports,i=r[n]!==s,l=s!==e.exports;if(a&&!i&&l&&(r[n]=e.exports),t===e.component){if(o){let c=e.component.manager.internals;i&&c.markExports(e,r[n]),K(e.component,n,p=>{p!==e.exports&&c.markExports(e,p)})}e.assignedProperty=o?void 0:n}e.watchExports(()=>{if(r[n]===e.exports)return;let c=e.component.manager;c.internals.setters[n]?.includes(c.internals.readonlySetter)?Ee(()=>{r[n]=e.exports}):r[n]=e.exports})}import{Deferred as _e,isEsriInternalEnv as b,safeAsyncCall as Xe,safeCall as D}from"@arcgis/components-utils";import{devToolsAwareTimeout as Ze}from"@arcgis/components-utils";import{getElementAttribute as Yt,isEsriInternalEnv as Qt,observeAncestorsMutation as Xt}from"@arcgis/components-utils";import{getElementLocales as eo,startLocaleObserver as to}from"@arcgis/components-utils";import{isEsriInternalEnv as no}from"@arcgis/components-utils";var et=class extends me{constructor(e,t){let n="addController"in e;process.env.NODE_ENV!=="production"&&b()&&!n&&Object.defineProperty(e.el,"__component",{value:e});let o=new Set;function s(l){o.add(l),!($ in l)&&e.renderRoot&&e.el.isConnected&&l.hostConnected?.()}function r(l){o.delete(l),l.controllerRemoved?.()}let a=e;if(a.addController=s,a.removeController=r,!n){let l=t??e.constructor.__forceUpdate;a.requestUpdate=()=>l(e)}if(process.env.NODE_ENV!=="production"&&b()&&(Object.entries({componentDidLoad:"loaded",componentDidRender:"updated",componentDidUpdate:"updated",componentShouldUpdate:"shouldUpdate",componentWillLoad:"load",componentWillRender:"willUpdate",componentWillUpdate:"willUpdate"}).forEach(([d,c])=>{if(n&&d in e)throw new Error(`Unexpected ${d}() in a Lit component ${e.el.tagName.toLowerCase()}. In Lit, you should use ${c}() instead`);if(!n&&c in e)throw new Error(`Unexpected ${c}() in a Stencil component ${e.el.tagName.toLowerCase()}. In Stencil, you should use ${c}() instead`)}),n)){let d=0,c=!1;for(let p=e;!c;d++){if(p===null)throw new Error("Expected controllers to be used in a LitElement class");if(Object.hasOwn(p,"_load")){c=!0;break}p=Object.getPrototypeOf(p)}if(d<1)throw new Error("It looks like you are trying to call useControllerManager in a component that uses LitElement imported from 'lit'. useControllerManager should only be used in the LitElement coming from `@arcgis/lumina`")}super(e),this.internals=new ge(this.component),this.destroyed=!1,this._updatePromise=new _e,this._originalLifecycles={},this.isLit=n,this.component.manager=this,re(e,n),this._controllers=o,this.exports=void 0,this.hasDestroy=A in this.component&&typeof this.component.destroy=="function",this._bindLifecycleMethods();let i=this.internals;Object.keys(i.members).forEach(l=>{i.accessorGetter[l]=we,i.accessorSetter[l]=we,i.getSetProxy(l)}),n?this.internals.enabledWatchers=this.internals.allWatchers:Object.defineProperty(e,"updateComplete",{get:async()=>await this._updatePromise.promise}),queueMicrotask(i.enableReadonly),E(e),N.set(e.el,e),N.set(e,e)}_bindLifecycleMethods(){let e=this.component,t=this.isLit,n=e.el===e;this._originalLifecycles={_connectedCallback:t||n?void 0:e.connectedCallback,_disconnectedCallback:t||n?void 0:e.disconnectedCallback,_load:t?e.load:e.componentWillLoad,_loaded:t?e.loaded:e.componentDidLoad,_willUpdate:t?void 0:e.componentWillUpdate,_updated:t?void 0:e.componentDidUpdate,_destroy:e.destroy};let o=this._connectedCallback.bind(this),s=this._disconnectedCallback.bind(this),r=this._update.bind(this),a=this._updated.bind(this);t?e.constructor.prototype.addController.call(e,{hostConnected:o,hostDisconnected:s,hostUpdate:r,hostUpdated:a}):(e.connectedCallback=o,e.disconnectedCallback=s,e.componentWillLoad=this._load.bind(this),e.componentDidLoad=this._loaded.bind(this),e.componentWillUpdate=r,e.componentDidUpdate=a),this.hasDestroy&&(e.destroy=this.destroy.bind(this))}_connectedCallback(){if(this.destroyed){let t=this.component.el.tagName.toLowerCase();throw this.component.el.remove(),new Error(`The ${t} component has already been destroyed. It cannot be used again. If you meant to disconnect and reconnect a component without automatic destroy, set the ${A} prop.`)}this._autoDestroyTimeout!==void 0&&clearTimeout(this._autoDestroyTimeout);let e=this.internals;e.enabledWatchers=e.allWatchers,B(),e.enableReadonly?.(),this._controllers.forEach(tt),this._originalLifecycles._connectedCallback?.call(this.component),process.env.NODE_ENV!=="production"&&b()&&he?.(this,!0)}_disconnectedCallback(){this.destroyed||(this._controllers.forEach(ot),this._originalLifecycles._disconnectedCallback?.call(this.component),this.hasDestroy&&this._setAutoDestroyTimeout())}async _load(){await Promise.allSettled(Array.from(this._controllers,nt)),await this._originalLifecycles._load?.call(this.component),this.hasDestroy&&K(this.component,A,()=>this._setAutoDestroyTimeout())}_loaded(){this._controllers.forEach(rt),this._originalLifecycles._loaded?.call(this.component)}_update(){let e=this.component;return this._controllers.forEach(st,e.$changes),this._originalLifecycles._willUpdate?.call(this.component)}_updated(){let e=this.component;if(this._controllers.forEach(it,e.$changes),this._originalLifecycles._updated?.call(this.component),this.isLit)e.$changes=new Map;else{let t=this._updatePromise;this._updatePromise=new _e,t.resolve(!0)}}async destroy(){if(process.env.NODE_ENV!=="production"&&b()&&this.ensureHasDestroy?.(),!this.destroyed){if(this.component.el.isConnected){this.hasDestroy=!1;try{this.component.el.remove()}finally{this.hasDestroy=!0}}this._autoDestroyTimeout=void 0,this.destroyed=!0,this._controllers.forEach(at),this._controllers.clear(),await this._originalLifecycles._destroy?.call(this.component)}}_setAutoDestroyTimeout(){if(this._autoDestroyTimeout!==void 0&&clearTimeout(this._autoDestroyTimeout),!this.component.el.isConnected&&!this.component.autoDestroyDisabled){let e=()=>void this.destroy().catch(console.error);process.env.NODE_ENV!=="production"&&b()&&z===0?queueMicrotask(e):this._autoDestroyTimeout=Ze(e,z)}}};process.env.NODE_ENV!=="production"&&b()&&(et.prototype.ensureHasDestroy=function(){if(!this.hasDestroy)throw new Error(`
6
- If the component uses a controller that uses destroy() method, then the
7
- component must have the following properties:
8
- /**
9
- * If true, the component will not be destroyed automatically when it is
10
- * disconnected from the document. This is useful when you want to move the
11
- * component to a different place on the page, or temporarily hide it. If this
12
- * is set, make sure to call the \`destroy\` method when you are done to prevent
13
- * memory leaks.
14
- */
15
- @${this.isLit?"property":"Prop"}() ${A} = false;
16
-
17
- /** Permanently destroy the component */
18
- @${this.isLit?"method":"Method"}()
19
- async destroy(): Promise<void> {
20
- await this.manager.destroy();
21
- }
22
- `.trim().split(`
23
- `).map(t=>t.trim()).join(`
24
- `))});var A="autoDestroyDisabled",z=1e3,Bt=process.env.NODE_ENV!=="production"&&b()?{setAutoDestroyOnDisconnectTimeout:e=>{z=e}}:void 0,we=e=>e;function tt(e){"triggerConnected"in e?e.triggerConnected():D(e.hostConnected,e)}function ot(e){"triggerDisconnected"in e?e.triggerDisconnected():D(e.hostDisconnected,e)}async function nt(e){"triggerLoad"in e?await e.triggerLoad():await Xe(e.hostLoad,e)}function rt(e){"triggerLoaded"in e?e.triggerLoaded():D(e.hostLoaded,e)}function st(e){"triggerUpdate"in e?e.triggerUpdate(this):D(e.hostUpdate,e,this)}function it(e){"triggerUpdated"in e?e.triggerUpdated(this):D(e.hostUpdated,e,this)}function at(e){"triggerDestroy"in e?e.triggerDestroy():D(e.hostDestroy,e)}var lt=class extends J{constructor(e,t){super(e);let n=this.exports;try{E(this.component);let o=t(this.component,this),s=this.exports!==n;if(ue(o)){s||this.setProvisionalExports(o);let r=o.then(a=>{this.exports=a,super.catchUpLifecycle()}).catch(a=>{this._ready.reject(a),console.error(a)});this.onLoad(async()=>await r)}else(!s||o!==void 0)&&(this.exports=o),queueMicrotask(()=>super.catchUpLifecycle())}catch(o){this._ready.reject(o),console.error(o)}}catchUpLifecycle(){}},Kt=be(lt);var Le=e=>(...t)=>{let n=I(),o=new e(...t);return j(n.at(-1)),o};import{LitElement as ct}from"@arcgis/lumina";function dt(e,t){class n extends ct{constructor(){super();let s="prototype"in e?Le(e):e;this.controller=s(this),Promise.resolve(t?.(this)).catch(console.error)}render(){return String(typeof this.controller=="object"&&this.controller!==null&&"exports"in this.controller?this.controller.exports:this.controller)}}return n}export{ke as mount,Me as setupLuminaTest,dt as wrapController};
1
+ import { render as w } from "lit-html";
2
+ import { unsafeStatic as d, html as b } from "lit-html/static.js";
3
+ import { camelToKebab as x, isEsriInternalEnv as a } from "@arcgis/components-utils";
4
+ import { onTestFinished as $, expect as D } from "vitest";
5
+ import S from "vitest-fail-on-console";
6
+ import L from "js-beautify";
7
+ import { LitElement as M } from "@arcgis/lumina";
8
+ async function J(e, { parent: n = document.body, afterConnect: o, dynamicComponents: t, cleanupAfterTest: i = !0 } = {}) {
9
+ const r = document.createElement("div");
10
+ r.style.display = "contents", n.append(r), i && $(() => V(r)), E(e);
11
+ const s = t?.some(E);
12
+ let u;
13
+ if (typeof e == "string")
14
+ u = b`<${d(e)}></${d(e)}>`;
15
+ else if (typeof e == "function")
16
+ u = "tagName" in e ? b`<${d(e.tagName)}></${d(e.tagName)}>` : e();
17
+ else {
18
+ if (s)
19
+ throw new Error(
20
+ 'When rendering a dynamically created custom element using Lit\'s html`` function, you must ensure that the custom element class name is unique in the test file, or the class should explicitly have the `static override tagName = "some-tag-name";` property with a unique tag name within the test file'
21
+ );
22
+ u = e;
23
+ }
24
+ const c = [];
25
+ function y(h) {
26
+ c.push(h.error), h.preventDefault(), h.stopPropagation();
27
+ }
28
+ if (window.addEventListener("error", y), w(u, r), window.removeEventListener("error", y), c.length === 1)
29
+ throw c[0];
30
+ if (c.length > 1)
31
+ throw new AggregateError(c, "Multiple errors occurred while creating the custom element");
32
+ const m = _(r), T = g, C = o?.(m);
33
+ C?.then !== void 0 && await C;
34
+ const f = m;
35
+ typeof f?.componentOnReady == "function" && await f.componentOnReady();
36
+ const p = f?._litElement ?? T ?? m;
37
+ return {
38
+ el: m,
39
+ component: p,
40
+ async reRender() {
41
+ return typeof e == "function" && !("tagName" in e) && w(e(), n), p.requestUpdate(), await p.updateComplete;
42
+ }
43
+ };
44
+ }
45
+ let g;
46
+ const R = globalThis;
47
+ R.devOnly$luminaComponentRefCallback = (e) => {
48
+ g = e;
49
+ };
50
+ function V(e) {
51
+ for (; e.firstChild; )
52
+ e.removeChild(e.firstChild);
53
+ e instanceof HTMLElement && e.remove();
54
+ }
55
+ function E(e) {
56
+ if (!j(e) || e.runtime !== void 0)
57
+ return !1;
58
+ let n = !1, o = e.tagName;
59
+ if (!o) {
60
+ n = !1;
61
+ const t = x(
62
+ /*
63
+ * If name is single letter, it was probably minified - thus name not
64
+ * stable, thus don't use it. Example: class produced by wrapController()
65
+ */
66
+ (e.name.length > 1 ? e.name.replaceAll(k, "") : "") || "Test"
67
+ ), i = t === "test" ? "te-st" : t.includes("-") ? t : `${t}-`;
68
+ o = i;
69
+ for (let r = 2, s = customElements.get(o); s !== e && s !== void 0; r += 1)
70
+ n = !0, o = `${i}-${r}`, s = customElements.get(o);
71
+ }
72
+ return globalThis.devOnly$luminaRuntime?.customElement(o, e), Object.defineProperty(e.prototype, "tagName", { value: o.toUpperCase() }), n;
73
+ }
74
+ const j = (e) => typeof e == "function" && "lumina" in e, k = /\d+$/gu;
75
+ function _(e) {
76
+ for (const n of e.children)
77
+ if ("lumina" in n.constructor)
78
+ return n;
79
+ for (const n of e.children) {
80
+ const o = _(n);
81
+ if (o != null)
82
+ return o;
83
+ }
84
+ return e.firstElementChild ?? g?.el;
85
+ }
86
+ function A() {
87
+ D.addSnapshotSerializer({
88
+ // Using duck typing to detect ShadowRoot. Not using instanceof to keep test fast
89
+ test(e) {
90
+ return typeof e == "object" && e !== null && "innerHTML" in e && "onslotchange" in e;
91
+ },
92
+ serialize(e) {
93
+ const n = e.innerHTML.replaceAll(P, "");
94
+ return L.html(n, {
95
+ /* eslint-disable @typescript-eslint/naming-convention */
96
+ indent_size: 2,
97
+ indent_char: " ",
98
+ preserve_newlines: !1,
99
+ wrap_line_length: 70,
100
+ indent_inner_html: !1,
101
+ indent_empty_lines: !1
102
+ /* eslint-enable @typescript-eslint/naming-convention */
103
+ });
104
+ }
105
+ });
106
+ }
107
+ const P = /<!--\??(?:lit\$\d+\$)?-->/gu;
108
+ function Q() {
109
+ if (O[N])
110
+ return;
111
+ O[N] = !0;
112
+ const e = { ...console };
113
+ S({
114
+ // Workaround for https://github.com/thomasbrodusch/vitest-fail-on-console/issues/61
115
+ silenceMessage(n, o) {
116
+ return e[o](n), !1;
117
+ }
118
+ }), A();
119
+ }
120
+ const N = Symbol.for("lumina:didSetupTest"), O = globalThis, v = "@arcgis/components-controllers";
121
+ process.env.NODE_ENV !== "production" && a();
122
+ process.env.NODE_ENV !== "production" && a();
123
+ let l = [];
124
+ function q(e) {
125
+ if (e === void 0) {
126
+ l = [];
127
+ return;
128
+ }
129
+ const n = l.indexOf(e);
130
+ l = n === -1 ? [...l, e] : l.slice(0, n + 1), queueMicrotask(() => {
131
+ l = [];
132
+ });
133
+ }
134
+ function z() {
135
+ return l;
136
+ }
137
+ process.env.NODE_ENV !== "production" && a() && [
138
+ "This might be the case if you are trying to access an async controller in ",
139
+ "connectedCallback(). Or, if you are using it inside of ",
140
+ "componentWillLoad()/another controller without controller.use. Example correct ",
141
+ `usage:
142
+ `,
143
+ "makeController(async (component, controller)=>{ await controller.use(someOtherController); });"
144
+ ].join("");
145
+ process.env.NODE_ENV !== "production" ? Symbol.for(
146
+ // Use Symbol.for in dev mode to make it easier to maintain state when doing HMR.
147
+ `${v}: nothing`
148
+ ) : (
149
+ // eslint-disable-next-line symbol-description
150
+ Symbol()
151
+ );
152
+ process.env.NODE_ENV !== "production" && a();
153
+ process.env.NODE_ENV !== "production" && a();
154
+ const F = (e) => (...n) => {
155
+ const o = z(), t = new e(...n);
156
+ return q(o.at(-1)), t;
157
+ };
158
+ function X(e, n) {
159
+ class o extends M {
160
+ constructor() {
161
+ super();
162
+ const i = "prototype" in e ? F(e) : e;
163
+ this.controller = i(this), Promise.resolve(n?.(this)).catch(console.error);
164
+ }
165
+ /*
166
+ * Emitting controller's exports here is useful to let controller tests
167
+ * verify that re-render was triggered when necessary
168
+ */
169
+ render() {
170
+ return String(
171
+ typeof this.controller == "object" && this.controller !== null && "exports" in this.controller ? this.controller.exports : this.controller
172
+ );
173
+ }
174
+ }
175
+ return o;
176
+ }
177
+ export {
178
+ J as mount,
179
+ Q as setupLuminaTest,
180
+ X as wrapController
181
+ };
@@ -1,5 +1,5 @@
1
- import type { TemplateResult } from "lit-html";
2
- import type { JsxNode, LitElement, ToElement } from "@arcgis/lumina";
1
+ import { TemplateResult } from 'lit-html';
2
+ import { JsxNode, LitElement, ToElement } from '@arcgis/lumina';
3
3
  export type RenderResult<Component extends HTMLElement> = {
4
4
  /**
5
5
  * The custom element proxy that is attached to the DOM.
@@ -1,5 +1,5 @@
1
- import type { BaseComponent, ControllerHost } from "@arcgis/components-controllers";
2
- import { LitElement } from "@arcgis/lumina";
1
+ import { BaseComponent, ControllerHost } from '@arcgis/components-controllers';
2
+ import { LitElement } from '@arcgis/lumina';
3
3
  /**
4
4
  * Wrap a controller in a small component - useful when you are interested in
5
5
  * only testing the controller behavior.
@@ -1,4 +1,4 @@
1
- import type { ContextDirectories } from "../context/types";
2
- import type { CompilerContext } from "../context";
1
+ import { ContextDirectories } from '../context/types';
2
+ import { CompilerContext } from '../context';
3
3
  export declare const testDir: ContextDirectories;
4
4
  export declare const testContext: Pick<CompilerContext, "_documentationFileNames" | "dir">;
@@ -1,6 +1,6 @@
1
- import type { Plugin } from "vite";
2
- import type { CompilerContext } from "../context";
3
- import ts from "typescript";
1
+ import { Plugin } from 'vite';
2
+ import { CompilerContext } from '../context';
3
+ import { default as ts } from 'typescript';
4
4
  /**
5
5
  * A pipeline of transformers for .tsx files.
6
6
  * Only .tsx files are touched as all transformations deal with components and
@@ -1,3 +1,3 @@
1
- import type { SourceDescription } from "rollup";
2
- import type { CompilerContext } from "../context";
1
+ import { SourceDescription } from 'rollup';
2
+ import { CompilerContext } from '../context';
3
3
  export declare function injectRuntimeOptions(runtimeTsCode: string, context: CompilerContext): SourceDescription;
@@ -1,5 +1,5 @@
1
- import type { SourceMap } from "rollup";
2
- import ts from "typescript";
1
+ import { SourceMap } from 'rollup';
2
+ import { default as ts } from 'typescript';
3
3
  export type UndocumentedTypeScript = {
4
4
  readonly createSourceMapGenerator?: (host: ts.CompilerHost, basename: string, sourceRoot: string, dirname: string, compilerOptions: ts.CompilerOptions) => SourceMapGenerator;
5
5
  readonly createTextWriter?: (newLine: string) => EmitTextWriter;
@@ -1,4 +1,4 @@
1
- import ts from "typescript";
1
+ import { default as ts } from 'typescript';
2
2
  export type LiftedDecorators = Map<string, ts.ObjectLiteralExpression>;
3
3
  /**
4
4
  * Using decorators in a file means shipping TypeScript's decorator polyfill.
@@ -1,5 +1,5 @@
1
- import ts from "typescript";
2
- import type { FileTransformContext, FileTransformer } from "../publicTypes";
1
+ import { default as ts } from 'typescript';
2
+ import { FileTransformContext, FileTransformer } from '../publicTypes';
3
3
  /**
4
4
  * - Remove `@Method()` decorators from the code. `@Method()` decorators are
5
5
  * only needed for the docs extraction.
@@ -1,6 +1,6 @@
1
- import ts from "typescript";
2
- import type { FileTransformContext } from "../publicTypes";
3
- import type { LiftedDecorators } from "./liftDecorators";
1
+ import { default as ts } from 'typescript';
2
+ import { FileTransformContext } from '../publicTypes';
3
+ import { LiftedDecorators } from './liftDecorators';
4
4
  export declare function transformProperty(context: FileTransformContext, property: ts.AccessorDeclaration | ts.PropertyDeclaration, className: string | undefined, sourceFile: ts.SourceFile, liftedDecorators?: LiftedDecorators): ts.ClassElement;
5
5
  export type ParsedPropertyDecorator = {
6
6
  decorator: ts.Decorator;
@@ -1,7 +1,7 @@
1
- import ts from "typescript";
2
- import type { FileTransformContext } from "../publicTypes";
3
- import type { ParsedPropertyDecorator } from "./property";
4
- import type { ApiCustomElementField } from "@arcgis/api-extractor";
1
+ import { default as ts } from 'typescript';
2
+ import { FileTransformContext } from '../publicTypes';
3
+ import { ParsedPropertyDecorator } from './property';
4
+ import { ApiCustomElementField } from '@arcgis/api-extractor';
5
5
  /**
6
6
  * In Stencil, the compiler uses type checking to determine if the inferred
7
7
  * property type is number or boolean, and if so, would make sure to cast the
@@ -1,6 +1,6 @@
1
- import ts from "typescript";
2
- import type { FileTransformer } from "../publicTypes";
3
- import type { CompilerContext } from "../context";
1
+ import { default as ts } from 'typescript';
2
+ import { FileTransformer } from '../publicTypes';
3
+ import { CompilerContext } from '../context';
4
4
  /**
5
5
  * Run a chain of transformers on a TypeScript .tsx or .d.ts file and return
6
6
  * the resulting source file
@@ -1,3 +1,3 @@
1
- import type { CompilerContext } from "../context";
2
- import type { PluginOptions } from "vite-plugin-dts";
1
+ import { CompilerContext } from '../context';
2
+ import { PluginOptions } from 'vite-plugin-dts';
3
3
  export declare function runAstDtsTransformers(context: CompilerContext): NonNullable<PluginOptions["resolvers"]>[number];
@@ -1,2 +1,2 @@
1
- import type { FileTransformer } from "../publicTypes";
1
+ import { FileTransformer } from '../publicTypes';
2
2
  export declare const failOnJsonImport: FileTransformer;
@@ -1,4 +1,4 @@
1
- import type { FileTransformer } from "../publicTypes";
1
+ import { FileTransformer } from '../publicTypes';
2
2
  /**
3
3
  * Modify the .d.ts to make it appear that components extend the
4
4
  * PublicLitElement rather than LitElement
@@ -1,5 +1,5 @@
1
- import type { Plugin } from "vite";
2
- import type { CompilerContext } from "../context";
1
+ import { Plugin } from 'vite';
2
+ import { CompilerContext } from '../context';
3
3
  /**
4
4
  * Generate TypeScript definition files for the files in the project.
5
5
  * There is a corresponding .d.ts file emitted for each source .ts and .tsx file.
@@ -1,6 +1,5 @@
1
- import type { PropertyDeclaration } from "typescript";
2
- import ts from "typescript";
3
- import type { CompilerContext } from "../context";
1
+ import { PropertyDeclaration, default as ts } from 'typescript';
2
+ import { CompilerContext } from '../context';
4
3
  export type LiftedSetter = {
5
4
  name: ts.PropertyName;
6
5
  type: ts.TypeNode;