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,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const data = [
4
+ {
5
+ id: 0,
6
+ name: "Apples",
7
+ quantity: 5,
8
+ unit: "pieces",
9
+ category: "fruits",
10
+ key: 5,
11
+ },
12
+ {
13
+ id: 1,
14
+ name: "Bananas",
15
+ quantity: 6,
16
+ unit: "pieces",
17
+ category: "fruits",
18
+ key: 4,
19
+ },
20
+ {
21
+ id: 2,
22
+ name: "Carrots",
23
+ quantity: 100,
24
+ unit: "grams",
25
+ category: "vegetables",
26
+ key: 3,
27
+ },
28
+ {
29
+ id: 3,
30
+ name: "Spinach",
31
+ quantity: 1,
32
+ unit: "bunch",
33
+ category: "vegetables",
34
+ key: 2,
35
+ },
36
+ {
37
+ id: 4,
38
+ name: "Milk",
39
+ quantity: 10,
40
+ unit: "liter",
41
+ category: "dairy",
42
+ key: 1,
43
+ },
44
+ {
45
+ id: 5,
46
+ name: "Cheese",
47
+ quantity: 200,
48
+ unit: "grams",
49
+ category: "dairy",
50
+ key: 0,
51
+ },
52
+ ];
53
+ exports.default = data;
@@ -0,0 +1,188 @@
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
+ // --- Testing
14
+ fixtures_1.test.describe("smoke tests", { tag: "@smoke" }, () => {
15
+ (0, fixtures_1.test)("Markdown renders", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
16
+ yield initTestBed(`<Markdown />`);
17
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toBeAttached();
18
+ }));
19
+ (0, fixtures_1.test)("handles empty binding expression", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
20
+ yield initTestBed(`<Markdown><![CDATA[\@{}]]></Markdown>`);
21
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("");
22
+ }));
23
+ (0, fixtures_1.test)("does not detect escaped empty expression #1", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
24
+ yield initTestBed(`<Markdown><![CDATA[\\@{}]]></Markdown>`);
25
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("@{}");
26
+ }));
27
+ (0, fixtures_1.test)("does not detect escaped empty expression #2", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
28
+ yield initTestBed(`<Markdown><![CDATA[\@\\{}]]></Markdown>`);
29
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("@{}");
30
+ }));
31
+ (0, fixtures_1.test)("does not detect escaped expression #1", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
32
+ yield initTestBed(`<Markdown><![CDATA[\\@{1}]]></Markdown>`);
33
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("@{1}");
34
+ }));
35
+ (0, fixtures_1.test)("does not detect escaped expression #2", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
36
+ yield initTestBed(`<Markdown><![CDATA[\@\\{1}]]></Markdown>`);
37
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("@{1}");
38
+ }));
39
+ (0, fixtures_1.test)("handles only spaces binding expression", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
40
+ yield initTestBed(`<Markdown><![CDATA[\@{ }]]></Markdown>`);
41
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("");
42
+ }));
43
+ (0, fixtures_1.test)("handles binding expression", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
44
+ yield initTestBed(`<Markdown><![CDATA[\@{1+1}]]></Markdown>`);
45
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText("2");
46
+ }));
47
+ (0, fixtures_1.test)("handles objects in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
48
+ const expected = "{ a : 1, b: 'c' }";
49
+ yield initTestBed(`<Markdown><![CDATA[\@{${expected}}]]></Markdown>`);
50
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(`{"a":1,"b":"c"}`);
51
+ }));
52
+ (0, fixtures_1.test)("handles arrays in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
53
+ const expected = "[ 1, 2, 3 ]";
54
+ yield initTestBed(`<Markdown><![CDATA[\@{${expected}}]]></Markdown>`);
55
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(`[1,2,3]`);
56
+ }));
57
+ (0, fixtures_1.test)("handles functions in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
58
+ const SOURCE = "() => { const x = 1; console.log(x); return null; }";
59
+ const EXPECTED = "[xmlui function]";
60
+ yield initTestBed(`<Markdown><![CDATA[\@{${SOURCE}}]]></Markdown>`);
61
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(EXPECTED);
62
+ }));
63
+ (0, fixtures_1.test)("handles nested objects in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
64
+ const expected = "{ a : 1, b: { c: 1 } }";
65
+ yield initTestBed(`<Markdown><![CDATA[\@{${expected}}]]></Markdown>`);
66
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(`{"a":1,"b":{"c":1}}`);
67
+ }));
68
+ (0, fixtures_1.test)("handles functions nested in objects in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
69
+ const SOURCE = "{ a: () => { const x = 1; console.log(x); return null; } }";
70
+ const EXPECTED = '{"a":"[xmlui function]"}';
71
+ yield initTestBed(`<Markdown><![CDATA[\@{${SOURCE}}]]></Markdown>`);
72
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(EXPECTED);
73
+ }));
74
+ (0, fixtures_1.test)("handles arrays nested in objects in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
75
+ const expected = "{ a: [1, 2, 3] }";
76
+ yield initTestBed(`<Markdown><![CDATA[\@{${expected}}]]></Markdown>`);
77
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(`{"a":[1,2,3]}`);
78
+ }));
79
+ (0, fixtures_1.test)("handles arrays nested in functions in binding expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
80
+ const SOURCE = "() => { return [1, 2, 3]; }";
81
+ const EXPECTED = "[xmlui function]";
82
+ yield initTestBed(`<Markdown><![CDATA[\@{${SOURCE}}]]></Markdown>`);
83
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(EXPECTED);
84
+ }));
85
+ (0, fixtures_1.test)("handles complex expressions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
86
+ const SOURCE = "Hello there @{ {a : () => {}, x: null, b: { c: 3, d: 'asdadsda', e: () => {return null;} } } } How are you @{true || undefined || []}";
87
+ const EXPECTED = 'Hello there {"a":"[xmlui function]","x":null,"b":{"c":3,"d":"asdadsda","e":"[xmlui function]"}} How are you true';
88
+ yield initTestBed(`<Markdown><![CDATA[${SOURCE}]]></Markdown>`);
89
+ yield (0, fixtures_1.expect)((yield createMarkdownDriver()).component).toHaveText(EXPECTED);
90
+ }));
91
+ const headingLevelsWithMarkdown = [
92
+ { level: "h1", md: "# Heading" },
93
+ { level: "h2", md: "## Heading" },
94
+ { level: "h3", md: "### Heading" },
95
+ { level: "h4", md: "#### Heading" },
96
+ { level: "h5", md: "##### Heading" },
97
+ { level: "h6", md: "###### Heading" },
98
+ ];
99
+ headingLevelsWithMarkdown.forEach(({ level, md }) => {
100
+ (0, fixtures_1.test)(`can render anchor link for '${level}'`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
101
+ const SOURCE = md;
102
+ yield initTestBed(`<Markdown showHeadingAnchors="true"><![CDATA[${SOURCE}]]></Markdown>`);
103
+ const driver = yield createMarkdownDriver();
104
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("a")).toBe(true);
105
+ }));
106
+ });
107
+ (0, fixtures_1.test)("show implicit anchor links", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
108
+ const SOURCE = "## Heading";
109
+ yield initTestBed(`<Markdown showHeadingAnchors="true"><![CDATA[${SOURCE}]]></Markdown>`);
110
+ const driver = yield createMarkdownDriver();
111
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("a")).toBe(true);
112
+ }));
113
+ (0, fixtures_1.test)("show explicit anchor links", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
114
+ const SOURCE = "## Heading [#heading]";
115
+ yield initTestBed(`<Markdown showHeadingAnchors="true"><![CDATA[${SOURCE}]]></Markdown>`);
116
+ const driver = yield createMarkdownDriver();
117
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("a")).toBe(true);
118
+ }));
119
+ (0, fixtures_1.test)("don't render implicit anchor links", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
120
+ const SOURCE = "## Heading";
121
+ yield initTestBed(`<Markdown showHeadingAnchors="false"><![CDATA[${SOURCE}]]></Markdown>`);
122
+ const driver = yield createMarkdownDriver();
123
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("a")).toBe(false);
124
+ }));
125
+ (0, fixtures_1.test)("don't render explicit anchor links", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
126
+ const SOURCE = "## Heading [#heading]";
127
+ yield initTestBed(`<Markdown showHeadingAnchors="false"><![CDATA[${SOURCE}]]></Markdown>`);
128
+ const driver = yield createMarkdownDriver();
129
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("a")).toBe(false);
130
+ }));
131
+ });
132
+ (0, fixtures_1.test)("only renders if children are strings", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
133
+ yield initTestBed(`
134
+ <Markdown>
135
+ <Button label="Hey!" />
136
+ </Markdown>
137
+ `);
138
+ // Check if page is empty (no text)
139
+ const driver = yield createMarkdownDriver();
140
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("");
141
+ }));
142
+ (0, fixtures_1.test)("renders if children are provided through CDATA", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
143
+ yield initTestBed(`
144
+ <Markdown>
145
+ <![CDATA[Hello World!]]>
146
+ </Markdown>
147
+ `);
148
+ // Check if page is empty (no text)
149
+ const driver = yield createMarkdownDriver();
150
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("Hello World!");
151
+ }));
152
+ (0, fixtures_1.test)("renders code block", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver }) {
153
+ const code = "```\n" + "I did not expect this\n" + "```";
154
+ yield initTestBed(`<Markdown><![CDATA[${code}]]></Markdown>`);
155
+ const driver = yield createMarkdownDriver();
156
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("I did not expect this");
157
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement(["pre", "code"])).toBeTruthy();
158
+ }));
159
+ (0, fixtures_1.test)("4space/1 tab indent is not code block by default", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
160
+ // Note the formatting here: the line breaks and indentations are intentional
161
+ const code = `
162
+ _I did not expect this_
163
+ `;
164
+ yield initTestBed(`<Markdown><![CDATA[${code}]]></Markdown>`);
165
+ const driver = yield createMarkdownDriver();
166
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("I did not expect this");
167
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("em")).toBeTruthy();
168
+ }));
169
+ (0, fixtures_1.test)("removeIndents=false: 4space/1 tab indent is accounted for", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
170
+ // Note the formatting here: the lack of indentations is intentional
171
+ const code = `
172
+ _I did not expect this_
173
+ `;
174
+ yield initTestBed(`<Markdown removeIndents="false"><![CDATA[${code}]]></Markdown>`);
175
+ const driver = yield createMarkdownDriver();
176
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("I did not expect this");
177
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement("em")).toBeTruthy();
178
+ }));
179
+ (0, fixtures_1.test)("removeIndents=false: 4space/1 tab indent maps to a code block", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createMarkdownDriver, }) {
180
+ // Note the formatting here: the indentations are intentional
181
+ const code = `
182
+ _I did not expect this_
183
+ `;
184
+ yield initTestBed(`<Markdown removeIndents="false"><![CDATA[${code}]]></Markdown>`);
185
+ const driver = yield createMarkdownDriver();
186
+ yield (0, fixtures_1.expect)(driver.component).toHaveText("_I did not expect this_");
187
+ (0, fixtures_1.expect)(yield driver.hasHtmlElement(["pre", "code"])).toBeTruthy();
188
+ }));
@@ -0,0 +1,162 @@
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
+ // OPEN/CLOSE TESTS
15
+ // =============================================================================
16
+ fixtures_1.test.describe("Open/Close", () => {
17
+ (0, fixtures_1.test)("Imperative open - without params", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
18
+ yield initTestBed(`
19
+ <Fragment>
20
+ <Button testId="button" onClick="modal.open()">open modal (imperative)</Button>
21
+ <ModalDialog id="modal">
22
+ <Text testId="textInModal">Hello</Text>
23
+ </ModalDialog>
24
+ </Fragment>
25
+ `);
26
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).not.toBeVisible();
27
+ yield page.getByTestId("button").click();
28
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toBeVisible();
29
+ }));
30
+ (0, fixtures_1.test)("Imperative open - with param inside", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
31
+ yield initTestBed(`
32
+ <Fragment>
33
+ <Button testId="button" onClick="modal.open('PARAM_VALUE')">open modal (imperative)</Button>
34
+ <ModalDialog id="modal">
35
+ <Text testId="textInModal">{$param}</Text>
36
+ </ModalDialog>
37
+ </Fragment>
38
+ `);
39
+ yield page.getByTestId("button").click();
40
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toHaveText("PARAM_VALUE");
41
+ }));
42
+ (0, fixtures_1.test)("Imperative open - with multiple param inside", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
43
+ yield initTestBed(`
44
+ <Fragment>
45
+ <Button testId="button" onClick="modal.open('PARAM_VALUE1', 'PARAM_VALUE2')">open modal (imperative)</Button>
46
+ <ModalDialog id="modal">
47
+ <Text testId="textInModal1">{$params[0]}</Text>
48
+ <Text testId="textInModal2">{$params[1]}</Text>
49
+ </ModalDialog>
50
+ </Fragment>
51
+ `);
52
+ yield page.getByTestId("button").click();
53
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal1")).toHaveText("PARAM_VALUE1");
54
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal2")).toHaveText("PARAM_VALUE2");
55
+ }));
56
+ (0, fixtures_1.test)("Imperative open - with param in title", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
57
+ yield initTestBed(`
58
+ <Fragment>
59
+ <Button testId="button" onClick="modal.open('PARAM_VALUE')">open modal (imperative)</Button>
60
+ <ModalDialog id="modal" title="{$param}"/>
61
+ </Fragment>
62
+ `);
63
+ yield page.getByTestId("button").click();
64
+ yield (0, fixtures_1.expect)(page.getByTestId("modal").getByRole("heading")).toHaveText("PARAM_VALUE");
65
+ }));
66
+ (0, fixtures_1.test)("Declarative open/close", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
67
+ yield initTestBed(`
68
+ <Fragment var.isOpen="{false}">
69
+ <Button testId="button" onClick="isOpen = true">open modal</Button>
70
+ <ModalDialog when="{isOpen}" onClose="isOpen = false" testId="modal">
71
+ <Text testId="textInModal">Hello</Text>
72
+ </ModalDialog>
73
+ <Text testId="isOpen">{isOpen + ''}</Text>
74
+ </Fragment>
75
+ `);
76
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).not.toBeVisible();
77
+ yield (0, fixtures_1.expect)(page.getByTestId("isOpen")).toHaveText("false");
78
+ yield page.getByTestId("button").click();
79
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toBeVisible();
80
+ yield (0, fixtures_1.expect)(page.getByTestId("isOpen")).toHaveText("true");
81
+ //click modal close button
82
+ yield page.getByTestId("modal").getByRole("button").click();
83
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).not.toBeVisible();
84
+ yield (0, fixtures_1.expect)(page.getByTestId("isOpen")).toHaveText("false");
85
+ }));
86
+ (0, fixtures_1.test)("maxWidth works", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed, createModalDialogDriver }) {
87
+ yield initTestBed(`
88
+ <Fragment>
89
+ <Button testId="button" onClick="modal.open()">open modal (imperative)</Button>
90
+ <ModalDialog id="modal" maxWidth="250px">
91
+ <Text testId="textInModal">Hello</Text>
92
+ </ModalDialog>
93
+ </Fragment>
94
+ `);
95
+ const modal = yield createModalDialogDriver("modal");
96
+ yield (0, fixtures_1.expect)(modal.component).not.toBeVisible();
97
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).not.toBeVisible();
98
+ yield page.getByTestId("button").click();
99
+ yield (0, fixtures_1.expect)(modal.component).toBeVisible();
100
+ yield (0, fixtures_1.expect)(modal.component).toHaveCSS("max-width", "250px");
101
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toBeVisible();
102
+ }));
103
+ (0, fixtures_1.test)("backgroundColor works", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed, createModalDialogDriver }) {
104
+ yield initTestBed(`
105
+ <Fragment>
106
+ <Button testId="button" onClick="modal.open()">open modal (imperative)</Button>
107
+ <ModalDialog id="modal" backgroundColor="rgb(255, 255, 0)">
108
+ <Text testId="textInModal">Hello</Text>
109
+ </ModalDialog>
110
+ </Fragment>
111
+ `);
112
+ const modal = yield createModalDialogDriver("modal");
113
+ yield page.getByTestId("button").click();
114
+ yield (0, fixtures_1.expect)(modal.component).toBeVisible();
115
+ yield (0, fixtures_1.expect)(modal.component).toHaveCSS("background-color", "rgb(255, 255, 0)");
116
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toBeVisible();
117
+ }));
118
+ (0, fixtures_1.test)("modal is scrollable in fullScreen mode and hides background content", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed, createModalDialogDriver }) {
119
+ yield initTestBed(`
120
+ <Fragment>
121
+ <!-- Background page content that should be completely hidden by the modal -->
122
+ <VStack testId="pageContent" height="300vh" backgroundColor="lightblue">
123
+ <Button testId="button" onClick="modal.open()">
124
+ open modal
125
+ </Button>
126
+ <Stack height="*" verticalAlignment="end">
127
+ <Text testId="pageBottomText">
128
+ Should be hidden
129
+ </Text>
130
+ </Stack>
131
+ </VStack>
132
+ <ModalDialog id="modal" fullScreen="{true}">
133
+ <VStack>
134
+ <Text testId="textInModal">
135
+ Content that should be scrollable
136
+ </Text>
137
+ <Stack
138
+ testId="longContent"
139
+ height="300vh"
140
+ verticalAlignment="end">
141
+ <Text testId="bottomText">
142
+ Long content
143
+ </Text>
144
+ </Stack>
145
+ </VStack>
146
+ </ModalDialog>
147
+ </Fragment>
148
+ `);
149
+ const modal = yield createModalDialogDriver("modal");
150
+ // Verify page content is initially visible before opening modal
151
+ yield (0, fixtures_1.expect)(page.getByTestId("pageContent")).toBeVisible();
152
+ yield (0, fixtures_1.expect)(page.getByTestId("pageEndText")).not.toBeInViewport();
153
+ // Open the modal
154
+ yield page.getByTestId("button").click();
155
+ yield (0, fixtures_1.expect)(modal.component).toBeVisible();
156
+ // Verify modal completely covers page content - all page content should be hidden
157
+ yield (0, fixtures_1.expect)(page.getByTestId("textInModal")).toBeVisible();
158
+ yield (0, fixtures_1.expect)(page.getByTestId("bottomText")).not.toBeInViewport();
159
+ yield page.getByTestId("bottomText").scrollIntoViewIfNeeded();
160
+ yield (0, fixtures_1.expect)(page.getByTestId("pageBottomText")).not.toBeInViewport();
161
+ }));
162
+ });
@@ -0,0 +1,212 @@
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 component_test_helpers_1 = require("../../testing/component-test-helpers");
13
+ const fixtures_1 = require("../../testing/fixtures");
14
+ fixtures_1.test.describe("smoke tests", { tag: "@smoke" }, () => {
15
+ (0, fixtures_1.test)("displays menuitems after click", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
16
+ yield initTestBed(`
17
+ <NavGroup label="Pages">
18
+ <NavLink label="Page 1" />
19
+ <NavGroup label="subpages">
20
+ <NavLink label="inner page 2" />
21
+ <NavLink label="inner page 3" />
22
+ </NavGroup>
23
+ <NavLink label="Page 4" />
24
+ </NavGroup>
25
+ `);
26
+ yield page.getByRole("button", { name: "Pages", exact: true }).click();
27
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem")).toHaveCount(3);
28
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).toBeVisible();
29
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "subpages" })).toBeVisible();
30
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 4" })).toBeVisible();
31
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 2" })).not.toBeVisible();
32
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 3" })).not.toBeVisible();
33
+ }));
34
+ (0, fixtures_1.test)("disabled navgroup can't open", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
35
+ yield initTestBed(`
36
+ <NavGroup label="Pages" enabled="false">
37
+ <NavLink label="Page 1" />
38
+ <NavGroup label="subpages">
39
+ <NavLink label="inner page 2" />
40
+ <NavLink label="inner page 3" />
41
+ </NavGroup>
42
+ <NavLink label="Page 4" />
43
+ </NavGroup>
44
+ `);
45
+ const pagesBtn = page.getByRole("button", { name: "Pages", exact: true });
46
+ yield (0, fixtures_1.expect)(pagesBtn).toBeDisabled();
47
+ yield pagesBtn.click({ force: true });
48
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).not.toBeVisible();
49
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 2" })).not.toBeVisible();
50
+ }));
51
+ (0, fixtures_1.test)("component trigger has correct aria labels", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
52
+ yield initTestBed(`<NavGroup testId="navGroup" label="NavGroup"/>`);
53
+ const button = page.getByTestId("navGroup");
54
+ yield (0, fixtures_1.expect)(button).toBeVisible();
55
+ yield (0, fixtures_1.expect)(button).toHaveAttribute("aria-expanded", "false");
56
+ yield button.click();
57
+ yield (0, fixtures_1.expect)(button).toHaveAttribute("aria-expanded", "true");
58
+ }));
59
+ (0, fixtures_1.test)("expanded in vertical layout to show link of current page", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, }) {
60
+ yield initTestBed(`
61
+ <App layout="vertical">
62
+ <NavPanel>
63
+ <NavGroup label="Current-upper">
64
+ <NavGroup label="Current">
65
+ <NavLink label="link-to-current-page" to="/" />
66
+ </NavGroup>
67
+ </NavGroup>
68
+ </NavPanel>
69
+ </App>`);
70
+ yield (0, fixtures_1.expect)(page.getByText("link-to-current-page")).toBeVisible();
71
+ }));
72
+ });
73
+ (0, fixtures_1.test)("nested disabled navgroup can't open", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
74
+ yield initTestBed(`
75
+ <NavGroup label="Pages" >
76
+ <NavLink label="Page 1" />
77
+ <NavGroup label="subpages" enabled="false">
78
+ <NavLink label="inner page 2" />
79
+ <NavLink label="inner page 3" />
80
+ </NavGroup>
81
+ <NavLink label="Page 4" />
82
+ </NavGroup>
83
+ `);
84
+ const pagesBtn = page.getByRole("button", { name: "Pages", exact: true });
85
+ yield pagesBtn.click();
86
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).toBeVisible();
87
+ const subpagesBtn = page.getByRole("menuitem", { name: "subpages" });
88
+ yield (0, fixtures_1.expect)(subpagesBtn).toBeDisabled();
89
+ yield subpagesBtn.click({ force: true });
90
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 2" })).not.toBeVisible();
91
+ }));
92
+ (0, fixtures_1.test)("initiallyExpanded works", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
93
+ yield initTestBed(`
94
+ <NavGroup label="Pages" initiallyExpanded="true">
95
+ <NavLink label="Page 1" />
96
+ <NavGroup label="subpages">
97
+ <NavLink label="inner page 2" />
98
+ <NavLink label="inner page 3" />
99
+ </NavGroup>
100
+ <NavLink label="Page 4" />
101
+ </NavGroup>
102
+ `);
103
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).toBeVisible();
104
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 2" })).not.toBeVisible();
105
+ }));
106
+ fixtures_1.test.fixme("nested initiallyExpanded works", component_test_helpers_1.SKIP_REASON.XMLUI_BUG("see https://github.com/radix-ui/primitives/issues/2551#issuecomment-2457236467 . The suggested workaround does not work for us, if you were to do it, you would see the hover effect not working for the inner most menu items."), (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
107
+ yield initTestBed(`
108
+ <NavGroup label="Pages" initiallyExpanded="true">
109
+ <NavLink label="Page 1" />
110
+ <NavGroup label="subpages" initiallyExpanded="true">
111
+ <NavLink label="inner page 2" />
112
+ <NavLink label="inner page 3" />
113
+ </NavGroup>
114
+ <NavLink label="Page 4" />
115
+ </NavGroup>
116
+ `);
117
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).toBeVisible();
118
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "inner page 2" })).toBeVisible();
119
+ }));
120
+ (0, fixtures_1.test)("expands even without label", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
121
+ yield initTestBed(`
122
+ <NavGroup >
123
+ <NavLink label="Page 1" />
124
+ <NavGroup label="subpages">
125
+ <NavLink label="inner page 2" />
126
+ <NavLink label="inner page 3" />
127
+ </NavGroup>
128
+ <NavLink label="Page 4" />
129
+ </NavGroup>
130
+ `);
131
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).not.toBeVisible();
132
+ yield page.getByRole("button").click();
133
+ yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Page 1" })).toBeVisible();
134
+ }));
135
+ fixtures_1.test.describe("icon props", () => {
136
+ (0, fixtures_1.test)("icon appears", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
137
+ const { testIcons } = yield initTestBed(`<App layout="vertical">
138
+ <NavPanel>
139
+ <NavGroup icon="bell" label="NavGroup">
140
+ <NavLink label="link" to="/" />
141
+ </NavGroup>
142
+ </NavPanel>
143
+ </App>`);
144
+ yield (0, fixtures_1.expect)(testIcons.bellIcon).toBeVisible();
145
+ }));
146
+ (0, fixtures_1.test)("iconHorizontal shows in horizontal layout submenu", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
147
+ const { testIcons } = yield initTestBed(`
148
+ <App layout="horizontal">
149
+ <NavPanel>
150
+ <NavGroup label="Send To">
151
+ <NavGroup icon="users" label="Team"
152
+ iconHorizontalExpanded="bell" iconHorizontalCollapsed="eye">
153
+ <NavLink label="Jane" />
154
+ </NavGroup>
155
+ </NavGroup>
156
+ </NavPanel>
157
+ </App>
158
+ `);
159
+ const bell = testIcons.bellIcon;
160
+ const eye = testIcons.eyeIcon;
161
+ yield (0, fixtures_1.expect)(bell).not.toBeVisible();
162
+ yield (0, fixtures_1.expect)(eye).not.toBeVisible();
163
+ yield page.getByRole("button", { name: "Send to" }).click();
164
+ yield (0, fixtures_1.expect)(bell).not.toBeVisible();
165
+ yield (0, fixtures_1.expect)(eye).toBeVisible();
166
+ yield page.getByRole("menuitem", { name: "Team" }).hover();
167
+ yield (0, fixtures_1.expect)(bell).toBeVisible();
168
+ yield (0, fixtures_1.expect)(eye).not.toBeVisible();
169
+ }));
170
+ (0, fixtures_1.test)("iconVertical shows in horizontal layout top lvl navgroup", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, }) {
171
+ const { testIcons } = yield initTestBed(`
172
+ <App layout="horizontal">
173
+ <NavPanel>
174
+ <NavGroup icon="users" label="Team"
175
+ iconVerticalExpanded="bell" iconVerticalCollapsed="eye">
176
+ <NavLink label="Jane" />
177
+ </NavGroup>
178
+ </NavPanel>
179
+ </App>
180
+ `);
181
+ const bell = testIcons.bellIcon;
182
+ const eye = testIcons.eyeIcon;
183
+ yield (0, fixtures_1.expect)(bell).not.toBeVisible();
184
+ yield (0, fixtures_1.expect)(eye).toBeVisible();
185
+ yield page.getByText("Team").click();
186
+ yield (0, fixtures_1.expect)(bell).toBeVisible();
187
+ yield (0, fixtures_1.expect)(eye).not.toBeVisible();
188
+ }));
189
+ (0, fixtures_1.test)("iconVertical shows in vertical layout submenu", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
190
+ const { testIcons } = yield initTestBed(`
191
+ <App layout="vertical">
192
+ <NavPanel>
193
+ <NavGroup label="Send To">
194
+ <NavGroup icon="users" label="Team"
195
+ iconVerticalExpanded="bell" iconVerticalCollapsed="eye">
196
+ <NavLink label="Jane" />
197
+ </NavGroup>
198
+ </NavGroup>
199
+ </NavPanel>
200
+ </App>
201
+ `);
202
+ const bell = testIcons.bellIcon;
203
+ const eye = testIcons.eyeIcon;
204
+ yield (0, fixtures_1.expect)(bell).not.toBeVisible();
205
+ yield page.getByText("Send to").click();
206
+ yield (0, fixtures_1.expect)(bell).not.toBeVisible();
207
+ yield (0, fixtures_1.expect)(eye).toBeVisible();
208
+ yield page.getByText("Team").click();
209
+ yield (0, fixtures_1.expect)(bell).toBeVisible();
210
+ yield (0, fixtures_1.expect)(eye).not.toBeVisible();
211
+ }));
212
+ });