xmlui 0.10.13 → 0.10.15

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 (217) hide show
  1. package/dist/lib/{index-Db5iQkFp.mjs → index-axjeT2uJ.mjs} +1626 -1080
  2. package/dist/lib/index.css +1 -1
  3. package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-BoTWMs19.mjs} +1 -1
  4. package/dist/lib/language-server-web-worker.mjs +1 -1
  5. package/dist/lib/language-server.mjs +1 -1
  6. package/dist/lib/{metadata-utils-D90qqMGc.mjs → metadata-utils-CtY0QcvH.mjs} +2 -1
  7. package/dist/lib/{server-common-lmBDLpUh.mjs → server-common-Cine5nRR.mjs} +1 -1
  8. package/dist/lib/xmlui.d.ts +99 -6
  9. package/dist/lib/xmlui.mjs +78 -42
  10. package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-CQywuPDB.mjs} +17448 -16984
  11. package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-Bi5kF5Af.mjs} +1 -1
  12. package/dist/metadata/style.css +1 -1
  13. package/dist/metadata/xmlui-metadata.mjs +1 -1
  14. package/dist/metadata/xmlui-metadata.umd.js +3 -3
  15. package/dist/scripts/bin/build-lib.js +21 -13
  16. package/dist/scripts/bin/viteConfig.js +3 -1
  17. package/dist/scripts/package.json +2 -3
  18. package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
  19. package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
  20. package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
  21. package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
  22. package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
  23. package/dist/scripts/src/components/Animation/Animation.js +50 -0
  24. package/dist/scripts/src/components/App/App.spec.js +219 -0
  25. package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
  26. package/dist/scripts/src/components/AppState/AppState.js +32 -2
  27. package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
  28. package/dist/scripts/src/components/AppState/AppStateNative.js +27 -3
  29. package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
  30. package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
  31. package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
  32. package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
  33. package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
  34. package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
  35. package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
  36. package/dist/scripts/src/components/Button/Button.js +5 -1
  37. package/dist/scripts/src/components/Button/Button.spec.js +454 -0
  38. package/dist/scripts/src/components/Card/Card.spec.js +150 -0
  39. package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
  40. package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
  41. package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
  42. package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
  43. package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
  44. package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
  45. package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
  46. package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
  47. package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
  48. package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
  49. package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +41 -2
  50. package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
  51. package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
  52. package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
  53. package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
  54. package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
  55. package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +9 -26
  56. package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
  57. package/dist/scripts/src/components/ComponentProvider.js +6 -2
  58. package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
  59. package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
  60. package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
  61. package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
  62. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
  63. package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +7 -9
  64. package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
  65. package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
  66. package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
  67. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
  68. package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
  69. package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
  70. package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
  71. package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
  72. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +3 -3
  73. package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
  74. package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
  75. package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
  76. package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
  77. package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
  78. package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
  79. package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
  80. package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
  81. package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
  82. package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
  83. package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
  84. package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
  85. package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
  86. package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
  87. package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
  88. package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
  89. package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
  90. package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
  91. package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
  92. package/dist/scripts/src/components/Image/Image.js +2 -1
  93. package/dist/scripts/src/components/Image/Image.spec.js +198 -0
  94. package/dist/scripts/src/components/Image/ImageNative.js +30 -2
  95. package/dist/scripts/src/components/Input/InputLabel.js +25 -0
  96. package/dist/scripts/src/components/Input/index.js +5 -0
  97. package/dist/scripts/src/components/Items/Items.spec.js +397 -0
  98. package/dist/scripts/src/components/Link/Link.spec.js +894 -0
  99. package/dist/scripts/src/components/List/List.spec.js +927 -0
  100. package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
  101. package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
  102. package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
  103. package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +212 -0
  104. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +15 -7
  105. package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
  106. package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
  107. package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
  108. package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1237 -0
  109. package/dist/scripts/src/components/Option/Option.spec.js +472 -0
  110. package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
  111. package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
  112. package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
  113. package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
  114. package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
  115. package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
  116. package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
  117. package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
  118. package/dist/scripts/src/components/Select/Select.spec.js +527 -0
  119. package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +3 -1
  120. package/dist/scripts/src/components/Slider/Slider.js +2 -0
  121. package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
  122. package/dist/scripts/src/components/Slider/SliderNative.js +63 -26
  123. package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
  124. package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
  125. package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
  126. package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
  127. package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
  128. package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
  129. package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
  130. package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
  131. package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
  132. package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
  133. package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
  134. package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
  135. package/dist/scripts/src/components/Table/Table.js +7 -1
  136. package/dist/scripts/src/components/Table/Table.spec.js +555 -0
  137. package/dist/scripts/src/components/Table/TableNative.js +4 -1
  138. package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
  139. package/dist/scripts/src/components/Table/useRowSelection.js +215 -1
  140. package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
  141. package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
  142. package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
  143. package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
  144. package/dist/scripts/src/components/TextBox/TextBox.js +1 -5
  145. package/dist/scripts/src/components/TextBox/TextBox.spec.js +687 -0
  146. package/dist/scripts/src/components/TextBox/TextBoxNative.js +10 -15
  147. package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
  148. package/dist/scripts/src/components/Theme/ThemeNative.js +2 -6
  149. package/dist/scripts/src/components/TimeInput/TimeInput.js +1 -5
  150. package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
  151. package/dist/scripts/src/components/TimeInput/TimeInputNative.js +2 -9
  152. package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
  153. package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
  154. package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
  155. package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
  156. package/dist/scripts/src/components/chart-color-schemes.js +43 -0
  157. package/dist/scripts/src/components-core/ApiBoundComponent.js +38 -24
  158. package/dist/scripts/src/components-core/CompoundComponent.js +1 -1
  159. package/dist/scripts/src/components-core/RestApiProxy.js +84 -8
  160. package/dist/scripts/src/components-core/behaviors/BehaviorContext.js +54 -0
  161. package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +80 -0
  162. package/dist/scripts/src/components-core/descriptorHelper.js +1 -0
  163. package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
  164. package/dist/scripts/src/components-core/parts.js +4 -1
  165. package/dist/scripts/src/components-core/renderers.js +31 -0
  166. package/dist/scripts/src/components-core/rendering/AppRoot.js +2 -1
  167. package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +31 -46
  168. package/dist/scripts/src/components-core/rendering/nodeUtils.js +6 -0
  169. package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
  170. package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
  171. package/dist/scripts/src/components-core/theming/layout-resolver.js +2 -0
  172. package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
  173. package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
  174. package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
  175. package/dist/scripts/src/index-standalone.js +61 -0
  176. package/dist/scripts/src/index.js +39 -1
  177. package/dist/scripts/src/language-server/server-common.js +151 -0
  178. package/dist/scripts/src/language-server/server-web-worker.js +47 -0
  179. package/dist/scripts/src/language-server/server.js +42 -0
  180. package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
  181. package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
  182. package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
  183. package/dist/scripts/src/language-server/services/completion.js +270 -0
  184. package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
  185. package/dist/scripts/src/language-server/services/format.js +430 -0
  186. package/dist/scripts/src/language-server/services/hover.js +164 -0
  187. package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
  188. package/dist/scripts/src/logging/xmlui.js +21 -0
  189. package/dist/scripts/src/parsers/common/utils.js +19 -0
  190. package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
  191. package/dist/scripts/src/syntax/monaco/index.js +14 -0
  192. package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
  193. package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
  194. package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
  195. package/dist/scripts/src/syntax/textMate/index.js +14 -0
  196. package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
  197. package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
  198. package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
  199. package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
  200. package/dist/scripts/src/testing/ComponentDrivers.js +1327 -0
  201. package/dist/scripts/src/testing/assertions.js +444 -0
  202. package/dist/scripts/src/testing/component-test-helpers.js +389 -0
  203. package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
  204. package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
  205. package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +44 -0
  206. package/dist/scripts/src/testing/drivers/SliderDriver.js +20 -0
  207. package/dist/scripts/src/testing/drivers/TextBoxDriver.js +20 -0
  208. package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
  209. package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
  210. package/dist/scripts/src/testing/fixtures.js +513 -0
  211. package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
  212. package/dist/scripts/src/testing/infrastructure/main.js +9 -0
  213. package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
  214. package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
  215. package/dist/standalone/xmlui-standalone.es.d.ts +172 -10
  216. package/dist/standalone/xmlui-standalone.umd.js +36 -36
  217. package/package.json +2 -3
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const fixtures_1 = require("../../testing/fixtures");
13
+ // =============================================================================
14
+ // BASIC FUNCTIONALITY TESTS
15
+ // =============================================================================
16
+ (0, fixtures_1.test)("renders with default props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createAutoCompleteDriver }) {
17
+ yield initTestBed(`
18
+ <AutoComplete />
19
+ `);
20
+ const driver = yield createAutoCompleteDriver();
21
+ yield (0, fixtures_1.expect)(driver.component).toBeVisible();
22
+ }));
23
+ (0, fixtures_1.test)("displays placeholder text", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
24
+ const placeholder = "Search for an option";
25
+ yield initTestBed(`<AutoComplete placeholder="${placeholder}" />`);
26
+ yield (0, fixtures_1.expect)(page.getByPlaceholder(placeholder)).toBeVisible();
27
+ }));
28
+ (0, fixtures_1.test)("initialValue sets the selected option", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
29
+ yield initTestBed(`
30
+ <Fragment>
31
+ <AutoComplete id="autoComplete" initialValue="1" label="Select a superhero">
32
+ <Option value="1" label="Bruce Wayne" />
33
+ <Option value="2" label="Clark Kent" />
34
+ <Option value="3" label="Diana Prince" />
35
+ </AutoComplete>
36
+ <Text testId="text">Selected value: {autoComplete.value}</Text>
37
+ </Fragment>
38
+ `);
39
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected value: 1");
40
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("Bruce Wayne");
41
+ }));
42
+ (0, fixtures_1.test)("opens dropdown when clicked", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver }) {
43
+ yield initTestBed(`
44
+ <AutoComplete>
45
+ <Option value="1" label="Bruce Wayne" />
46
+ <Option value="2" label="Clark Kent" />
47
+ <Option value="3" label="Diana Prince" />
48
+ </AutoComplete>
49
+ `);
50
+ const driver = yield createAutoCompleteDriver();
51
+ yield driver.click();
52
+ yield (0, fixtures_1.expect)(page.getByRole("listbox")).toBeVisible();
53
+ }));
54
+ (0, fixtures_1.test)("selects an option when clicked", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver }) {
55
+ yield initTestBed(`
56
+ <Fragment>
57
+ <AutoComplete id="autoComplete">
58
+ <Option value="1" label="Bruce Wayne" />
59
+ <Option value="2" label="Clark Kent" />
60
+ <Option value="3" label="Diana Prince" />
61
+ </AutoComplete>
62
+ <Text testId="text">Selected value: {autoComplete.value}</Text>
63
+ </Fragment>
64
+ `);
65
+ const driver = yield createAutoCompleteDriver("autoComplete");
66
+ // Open the dropdown
67
+ yield driver.click();
68
+ // Wait for options to be visible before selecting
69
+ yield page.getByRole("option", { name: "Diana Prince" }).waitFor({ state: "visible" });
70
+ // Select the option
71
+ yield driver.selectLabel("Diana Prince");
72
+ // Verify the results
73
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected value: 3");
74
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("Diana Prince");
75
+ }));
76
+ // =============================================================================
77
+ // EDGE CASE TESTS
78
+ // =============================================================================
79
+ (0, fixtures_1.test)("disabled option cannot be selected", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
80
+ yield initTestBed(`
81
+ <Fragment>
82
+ <AutoComplete id="autoComplete">
83
+ <Option value="1" label="Bruce Wayne" />
84
+ <Option value="2" label="Clark Kent" enabled="false" />
85
+ <Option value="3" label="Diana Prince" />
86
+ </AutoComplete>
87
+ <Text testId="text">Selected value: {autoComplete.value}</Text>
88
+ </Fragment>
89
+ `);
90
+ const driver = yield createAutoCompleteDriver("autoComplete");
91
+ yield driver.click();
92
+ yield driver.selectLabel("Clark Kent");
93
+ // Value should not change to the disabled option
94
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).not.toHaveValue("Bruce Wayne");
95
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).not.toHaveText("Selected value: 2");
96
+ }));
97
+ // =============================================================================
98
+ // INTEGRATION TESTS
99
+ // =============================================================================
100
+ (0, fixtures_1.test)("multi mode allows selecting multiple options", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
101
+ yield initTestBed(`
102
+ <Fragment>
103
+ <AutoComplete id="autoComplete" multi="true">
104
+ <Option value="1" label="Bruce Wayne" />
105
+ <Option value="2" label="Clark Kent" />
106
+ <Option value="3" label="Diana Prince" />
107
+ </AutoComplete>
108
+ <Text testId="text">Selected values: {autoComplete.value}</Text>
109
+ </Fragment>
110
+ `);
111
+ const driver = yield createAutoCompleteDriver("autoComplete");
112
+ yield driver.click();
113
+ // Click the first option
114
+ yield driver.selectLabel("Bruce Wayne");
115
+ // First option should be selected
116
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected values: 1");
117
+ // Click another option
118
+ yield driver.click();
119
+ yield driver.selectLabel("Diana Prince");
120
+ // Both options should be selected
121
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected values: 1,3");
122
+ // Both selected options should be visible as badges
123
+ yield (0, fixtures_1.expect)(page.getByText("Bruce Wayne")).toBeVisible();
124
+ yield (0, fixtures_1.expect)(page.getByText("Diana Prince")).toBeVisible();
125
+ }));
126
+ (0, fixtures_1.test)("searching filters options", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver }) {
127
+ yield initTestBed(`
128
+ <AutoComplete>
129
+ <Option value="1" label="Bruce Wayne" />
130
+ <Option value="2" label="Clark Kent" />
131
+ <Option value="3" label="Diana Prince" />
132
+ <Option value="4" label="Barry Allen" />
133
+ <Option value="5" label="Hal Jordan" />
134
+ </AutoComplete>
135
+ `);
136
+ const driver = yield createAutoCompleteDriver();
137
+ yield driver.click();
138
+ // Type in the search field
139
+ yield page.keyboard.type("Bruce");
140
+ // Only Bruce Wayne should be visible
141
+ yield (0, fixtures_1.expect)(page.getByText("Bruce Wayne")).toBeVisible();
142
+ yield (0, fixtures_1.expect)(page.getByText("Clark Kent")).not.toBeVisible();
143
+ yield (0, fixtures_1.expect)(page.getByText("Diana Prince")).not.toBeVisible();
144
+ }));
145
+ (0, fixtures_1.test)("emptyListTemplate is shown when no options match", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
146
+ yield initTestBed(`
147
+ <AutoComplete>
148
+ <property name="emptyListTemplate">
149
+ <Text>No options found</Text>
150
+ </property>
151
+ <Option value="1" label="Bruce Wayne" />
152
+ <Option value="2" label="Clark Kent" />
153
+ <Option value="3" label="Diana Prince" />
154
+ </AutoComplete>
155
+ `);
156
+ const driver = yield createAutoCompleteDriver();
157
+ yield driver.click();
158
+ // Type something that doesn't match any option
159
+ yield page.keyboard.type("Joker");
160
+ // Empty list template should be shown
161
+ yield (0, fixtures_1.expect)(page.getByText("No options found")).toBeVisible();
162
+ }));
163
+ (0, fixtures_1.test)("optionTemplate customizes option appearance", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
164
+ yield initTestBed(`
165
+ <AutoComplete>
166
+ <property name="optionTemplate">
167
+ <Text textAlign="center" color="purple">{$item.label}</Text>
168
+ </property>
169
+ <Option value="1" label="Bruce Wayne" />
170
+ <Option value="2" label="Clark Kent" />
171
+ <Option value="3" label="Diana Prince" />
172
+ </AutoComplete>
173
+ `);
174
+ const driver = yield createAutoCompleteDriver();
175
+ yield driver.click();
176
+ // Options should be visible with custom styling
177
+ yield (0, fixtures_1.expect)(page.getByText("Bruce Wayne")).toBeVisible();
178
+ yield (0, fixtures_1.expect)(page.getByText("Clark Kent")).toBeVisible();
179
+ yield (0, fixtures_1.expect)(page.getByText("Diana Prince")).toBeVisible();
180
+ }));
181
+ // =============================================================================
182
+ // VISUAL STATE TESTS
183
+ // =============================================================================
184
+ (0, fixtures_1.test)("readOnly prevents changing selection", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
185
+ yield initTestBed(`
186
+ <AutoComplete readOnly="true" initialValue="1">
187
+ <Option value="1" label="Bruce Wayne" />
188
+ <Option value="2" label="Clark Kent" />
189
+ <Option value="3" label="Diana Prince" />
190
+ </AutoComplete>
191
+ `);
192
+ // Initial value should be displayed
193
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("Bruce Wayne");
194
+ // Try to click to open dropdown
195
+ const driver = yield createAutoCompleteDriver();
196
+ yield driver.click();
197
+ // Selection should not change
198
+ yield (0, fixtures_1.expect)(page.getByRole("listbox")).not.toBeVisible();
199
+ }));
200
+ (0, fixtures_1.test)("disabled state prevents interaction", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
201
+ yield initTestBed(`
202
+ <AutoComplete enabled="false">
203
+ <Option value="1" label="Bruce Wayne" />
204
+ <Option value="2" label="Clark Kent" />
205
+ <Option value="3" label="Diana Prince" />
206
+ </AutoComplete>
207
+ `);
208
+ const driver = yield createAutoCompleteDriver();
209
+ // Try to click to open dropdown
210
+ yield driver.click({ force: true });
211
+ // Try to type in the input
212
+ yield page.keyboard.type("Joker");
213
+ // Dropdown should not open
214
+ yield (0, fixtures_1.expect)(page.getByRole("listbox")).not.toBeVisible();
215
+ // Input should not change
216
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("");
217
+ }));
218
+ // =============================================================================
219
+ // API AND EVENT TESTS
220
+ // =============================================================================
221
+ (0, fixtures_1.test)("didChange event fires when option is selected", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
222
+ yield initTestBed(`
223
+ <App var.selectedValue="">
224
+ <AutoComplete id="autoComplete" onDidChange="(val) => selectedValue = val">
225
+ <Option value="1" label="Bruce Wayne" />
226
+ <Option value="2" label="Clark Kent" />
227
+ <Option value="3" label="Diana Prince" />
228
+ </AutoComplete>
229
+ <Text testId="text">{selectedValue}</Text>
230
+ </App>
231
+ `);
232
+ const driver = yield createAutoCompleteDriver("autoComplete");
233
+ yield driver.click();
234
+ yield driver.selectLabel("Diana Prince");
235
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("3");
236
+ }));
237
+ (0, fixtures_1.test)("gotFocus and lostFocus events work correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
238
+ yield initTestBed(`
239
+ <App var.isFocused="false">
240
+ <Text testId="focusText">{isFocused === true ? 'AutoComplete focused' : 'AutoComplete lost focus'}</Text>
241
+ <AutoComplete
242
+ id="autoComplete"
243
+ onGotFocus="isFocused = true"
244
+ onLostFocus="isFocused = false"
245
+ >
246
+ <Option value="1" label="Bruce Wayne" />
247
+ </AutoComplete>
248
+ </App>
249
+ `);
250
+ // Initial state
251
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete lost focus");
252
+ // Focus the autocomplete
253
+ const driver = yield createAutoCompleteDriver("autoComplete");
254
+ yield driver.click();
255
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete focused");
256
+ // Blur the autocomplete
257
+ yield page.keyboard.press("Tab");
258
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete lost focus");
259
+ }));
260
+ (0, fixtures_1.test)("setValue API works correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
261
+ yield initTestBed(`
262
+ <App>
263
+ <AutoComplete id="autoComplete">
264
+ <Option value="1" label="Bruce Wayne" />
265
+ <Option value="2" label="Clark Kent" />
266
+ <Option value="3" label="Diana Prince" />
267
+ </AutoComplete>
268
+ <Button
269
+ testId="setButton"
270
+ label="Set Value"
271
+ onClick="autoComplete.setValue('2')" />
272
+ <Text testId="text">Selected value: {autoComplete.value}</Text>
273
+ </App>
274
+ `);
275
+ // Initially no selection
276
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected value: ");
277
+ // Set the value using the API
278
+ yield page.getByTestId("setButton").click();
279
+ yield (0, fixtures_1.expect)(page.getByTestId("text")).toHaveText("Selected value: 2");
280
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("Clark Kent");
281
+ }));
282
+ (0, fixtures_1.test)("focus API brings focus to the component", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
283
+ yield initTestBed(`
284
+ <App var.isFocused="false">
285
+ <Text testId="focusText">{isFocused === true ? 'AutoComplete focused' : 'AutoComplete lost focus'}</Text>
286
+
287
+ <AutoComplete id="autoComplete">
288
+ <Option value="1" label="Bruce Wayne" />
289
+ </AutoComplete>
290
+ <Button
291
+ testId="focusButton"
292
+ label="Focus AutoComplete"
293
+ onClick="autoComplete.focus()" />
294
+ </App>
295
+ `);
296
+ // Initial state
297
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete lost focus");
298
+ // Focus the autocomplete using the API
299
+ yield page.getByTestId("focusButton").click();
300
+ // Check if the autocomplete is focused
301
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete lost focus");
302
+ const isFocused = yield page
303
+ .getByRole("combobox")
304
+ .evaluate((el) => document.activeElement === el);
305
+ (0, fixtures_1.expect)(isFocused).toBeTruthy();
306
+ }));
307
+ (0, fixtures_1.test)("autoFocus brings focus to the component on load", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
308
+ yield initTestBed(`
309
+ <App var.isFocused="false">
310
+ <Text testId="focusText">{isFocused === true ? 'AutoComplete focused' : 'AutoComplete lost focus'}</Text>
311
+ <AutoComplete autoFocus="true" onGotFocus="isFocused = true">
312
+ <Option value="1" label="Bruce Wayne" />
313
+ </AutoComplete>
314
+ </App>
315
+ `);
316
+ yield (0, fixtures_1.expect)(page.getByTestId("focusText")).toHaveText("AutoComplete focused");
317
+ }));
318
+ (0, fixtures_1.test)("creates new option when typing non-existing value", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createAutoCompleteDriver, }) {
319
+ const { testStateDriver } = yield initTestBed(`
320
+ <Fragment>
321
+ <AutoComplete id="autoComplete" creatable="true" onItemCreated="item => testState = item">
322
+ <Option value="1" label="Bruce Wayne" />
323
+ <Option value="2" label="Clark Kent" />
324
+ </AutoComplete>
325
+ </Fragment>
326
+ `);
327
+ const driver = yield createAutoCompleteDriver("autoComplete");
328
+ yield driver.click();
329
+ // Type a new option
330
+ yield page.keyboard.type("Peter Parker");
331
+ yield page.keyboard.press("Enter");
332
+ (0, fixtures_1.expect)(yield testStateDriver.testState()).toBe("Peter Parker");
333
+ }));
334
+ // =============================================================================
335
+ // ACCESSIBILITY TESTS
336
+ // =============================================================================
337
+ (0, fixtures_1.test)("has appropriate ARIA attributes", // SKIP_REASON.XMLUI_BUG(
338
+ // "There's a weird issue where the aria-expanded attribute is not set correctly on the input but it is on the wrapping div.",
339
+ // ),
340
+ (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
341
+ // TODO: review these Copilot-created tests
342
+ yield initTestBed(`
343
+ <AutoComplete label="Select a hero" placeholder="Search heroes">
344
+ <Option value="1" label="Bruce Wayne" />
345
+ <Option value="2" label="Clark Kent" />
346
+ <Option value="3" label="Diana Prince" />
347
+ </AutoComplete>
348
+ `);
349
+ // Get the combobox element
350
+ const listWrapper = page.locator('[data-part-id="listWrapper"]').first();
351
+ const combobox = page.getByRole("combobox");
352
+ // Check initial ARIA attributes
353
+ yield (0, fixtures_1.expect)(combobox).toHaveAttribute("aria-autocomplete", "list");
354
+ yield (0, fixtures_1.expect)(listWrapper).toHaveAttribute("aria-expanded", "false");
355
+ // Open the dropdown
356
+ yield combobox.focus();
357
+ yield page.keyboard.press("Enter");
358
+ // Check expanded state
359
+ yield (0, fixtures_1.expect)(listWrapper).toHaveAttribute("aria-expanded", "true");
360
+ }));
361
+ (0, fixtures_1.test)("supports keyboard navigation with arrow keys", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
362
+ yield initTestBed(`
363
+ <AutoComplete id="autoComplete">
364
+ <Option value="1" label="Bruce Wayne" />
365
+ <Option value="2" label="Clark Kent" />
366
+ <Option value="3" label="Diana Prince" />
367
+ </AutoComplete>
368
+ `);
369
+ // Focus the autocomplete
370
+ yield page.getByRole("combobox").focus();
371
+ // Open dropdown with arrow down
372
+ yield page.keyboard.press("ArrowDown", { delay: 100 });
373
+ yield (0, fixtures_1.expect)(page.getByRole("listbox")).toBeVisible();
374
+ // Navigate through options
375
+ yield page.keyboard.press("ArrowDown", { delay: 100 }); // First option
376
+ yield page.keyboard.press("ArrowDown", { delay: 100 }); // Second option
377
+ yield page.keyboard.press("ArrowDown", { delay: 100 }); // Third option
378
+ yield page.keyboard.press("ArrowUp", { delay: 100 }); // Back to second option
379
+ // Select with Enter
380
+ yield page.keyboard.press("Enter", { delay: 100 });
381
+ // Verify selection
382
+ yield (0, fixtures_1.expect)(page.getByRole("combobox")).toHaveValue("Clark Kent");
383
+ }));