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.
- package/dist/lib/{index-Db5iQkFp.mjs → index-axjeT2uJ.mjs} +1626 -1080
- package/dist/lib/index.css +1 -1
- package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-BoTWMs19.mjs} +1 -1
- package/dist/lib/language-server-web-worker.mjs +1 -1
- package/dist/lib/language-server.mjs +1 -1
- package/dist/lib/{metadata-utils-D90qqMGc.mjs → metadata-utils-CtY0QcvH.mjs} +2 -1
- package/dist/lib/{server-common-lmBDLpUh.mjs → server-common-Cine5nRR.mjs} +1 -1
- package/dist/lib/xmlui.d.ts +99 -6
- package/dist/lib/xmlui.mjs +78 -42
- package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-CQywuPDB.mjs} +17448 -16984
- package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-Bi5kF5Af.mjs} +1 -1
- package/dist/metadata/style.css +1 -1
- package/dist/metadata/xmlui-metadata.mjs +1 -1
- package/dist/metadata/xmlui-metadata.umd.js +3 -3
- package/dist/scripts/bin/build-lib.js +21 -13
- package/dist/scripts/bin/viteConfig.js +3 -1
- package/dist/scripts/package.json +2 -3
- package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
- package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
- package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
- package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
- package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
- package/dist/scripts/src/components/Animation/Animation.js +50 -0
- package/dist/scripts/src/components/App/App.spec.js +219 -0
- package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
- package/dist/scripts/src/components/AppState/AppState.js +32 -2
- package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
- package/dist/scripts/src/components/AppState/AppStateNative.js +27 -3
- package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
- package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
- package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
- package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
- package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
- package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
- package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
- package/dist/scripts/src/components/Button/Button.js +5 -1
- package/dist/scripts/src/components/Button/Button.spec.js +454 -0
- package/dist/scripts/src/components/Card/Card.spec.js +150 -0
- package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
- package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
- package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
- package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
- package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
- package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
- package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
- package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
- package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
- package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
- package/dist/scripts/src/components/Charts/PieChart/PieChartNative.js +41 -2
- package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
- package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
- package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
- package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
- package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
- package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +9 -26
- package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/ComponentProvider.js +6 -2
- package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
- package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
- package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
- package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
- package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
- package/dist/scripts/src/components/DropdownMenu/DropdownMenuNative.js +7 -9
- package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
- package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
- package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
- package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
- package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
- package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
- package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
- package/dist/scripts/src/components/FormItem/ItemWithLabel.js +3 -3
- package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
- package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
- package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
- package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
- package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
- package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
- package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
- package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
- package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
- package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
- package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
- package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
- package/dist/scripts/src/components/Image/Image.js +2 -1
- package/dist/scripts/src/components/Image/Image.spec.js +198 -0
- package/dist/scripts/src/components/Image/ImageNative.js +30 -2
- package/dist/scripts/src/components/Input/InputLabel.js +25 -0
- package/dist/scripts/src/components/Input/index.js +5 -0
- package/dist/scripts/src/components/Items/Items.spec.js +397 -0
- package/dist/scripts/src/components/Link/Link.spec.js +894 -0
- package/dist/scripts/src/components/List/List.spec.js +927 -0
- package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
- package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
- package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +212 -0
- package/dist/scripts/src/components/NavGroup/NavGroupNative.js +15 -7
- package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
- package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
- package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
- package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1237 -0
- package/dist/scripts/src/components/Option/Option.spec.js +472 -0
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
- package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
- package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
- package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
- package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
- package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
- package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
- package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
- package/dist/scripts/src/components/Select/Select.spec.js +527 -0
- package/dist/scripts/src/components/SelectionStore/SelectionStoreNative.js +3 -1
- package/dist/scripts/src/components/Slider/Slider.js +2 -0
- package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
- package/dist/scripts/src/components/Slider/SliderNative.js +63 -26
- package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
- package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
- package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
- package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
- package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
- package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
- package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
- package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
- package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
- package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
- package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
- package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
- package/dist/scripts/src/components/Table/Table.js +7 -1
- package/dist/scripts/src/components/Table/Table.spec.js +555 -0
- package/dist/scripts/src/components/Table/TableNative.js +4 -1
- package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
- package/dist/scripts/src/components/Table/useRowSelection.js +215 -1
- package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
- package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
- package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
- package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
- package/dist/scripts/src/components/TextBox/TextBox.js +1 -5
- package/dist/scripts/src/components/TextBox/TextBox.spec.js +687 -0
- package/dist/scripts/src/components/TextBox/TextBoxNative.js +10 -15
- package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
- package/dist/scripts/src/components/Theme/ThemeNative.js +2 -6
- package/dist/scripts/src/components/TimeInput/TimeInput.js +1 -5
- package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
- package/dist/scripts/src/components/TimeInput/TimeInputNative.js +2 -9
- package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
- package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
- package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
- package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
- package/dist/scripts/src/components/chart-color-schemes.js +43 -0
- package/dist/scripts/src/components-core/ApiBoundComponent.js +38 -24
- package/dist/scripts/src/components-core/CompoundComponent.js +1 -1
- package/dist/scripts/src/components-core/RestApiProxy.js +84 -8
- package/dist/scripts/src/components-core/behaviors/BehaviorContext.js +54 -0
- package/dist/scripts/src/components-core/behaviors/CoreBehaviors.js +80 -0
- package/dist/scripts/src/components-core/descriptorHelper.js +1 -0
- package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
- package/dist/scripts/src/components-core/parts.js +4 -1
- package/dist/scripts/src/components-core/renderers.js +31 -0
- package/dist/scripts/src/components-core/rendering/AppRoot.js +2 -1
- package/dist/scripts/src/components-core/rendering/ComponentAdapter.js +31 -46
- package/dist/scripts/src/components-core/rendering/nodeUtils.js +6 -0
- package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
- package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
- package/dist/scripts/src/components-core/theming/layout-resolver.js +2 -0
- package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
- package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
- package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
- package/dist/scripts/src/index-standalone.js +61 -0
- package/dist/scripts/src/index.js +39 -1
- package/dist/scripts/src/language-server/server-common.js +151 -0
- package/dist/scripts/src/language-server/server-web-worker.js +47 -0
- package/dist/scripts/src/language-server/server.js +42 -0
- package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
- package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
- package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
- package/dist/scripts/src/language-server/services/completion.js +270 -0
- package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
- package/dist/scripts/src/language-server/services/format.js +430 -0
- package/dist/scripts/src/language-server/services/hover.js +164 -0
- package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
- package/dist/scripts/src/logging/xmlui.js +21 -0
- package/dist/scripts/src/parsers/common/utils.js +19 -0
- package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
- package/dist/scripts/src/syntax/monaco/index.js +14 -0
- package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
- package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
- package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
- package/dist/scripts/src/syntax/textMate/index.js +14 -0
- package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
- package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
- package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
- package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
- package/dist/scripts/src/testing/ComponentDrivers.js +1327 -0
- package/dist/scripts/src/testing/assertions.js +444 -0
- package/dist/scripts/src/testing/component-test-helpers.js +389 -0
- package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
- package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
- package/dist/scripts/src/testing/drivers/NumberBoxDriver.js +44 -0
- package/dist/scripts/src/testing/drivers/SliderDriver.js +20 -0
- package/dist/scripts/src/testing/drivers/TextBoxDriver.js +20 -0
- package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
- package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
- package/dist/scripts/src/testing/fixtures.js +513 -0
- package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
- package/dist/scripts/src/testing/infrastructure/main.js +9 -0
- package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
- package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
- package/dist/standalone/xmlui-standalone.es.d.ts +172 -10
- package/dist/standalone/xmlui-standalone.umd.js +36 -36
- package/package.json +2 -3
|
@@ -0,0 +1,331 @@
|
|
|
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 basic props", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver }) {
|
|
17
|
+
yield initTestBed(`<DropdownMenu label="Menu" />`);
|
|
18
|
+
const driver = yield createDropdownMenuDriver();
|
|
19
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
20
|
+
}));
|
|
21
|
+
(0, fixtures_1.test)("renders with menu items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
22
|
+
yield initTestBed(`
|
|
23
|
+
<DropdownMenu label="Menu">
|
|
24
|
+
<MenuItem>Item 1</MenuItem>
|
|
25
|
+
<MenuItem>Item 2</MenuItem>
|
|
26
|
+
</DropdownMenu>
|
|
27
|
+
`);
|
|
28
|
+
const driver = yield createDropdownMenuDriver();
|
|
29
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
30
|
+
yield driver.open();
|
|
31
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).toBeVisible();
|
|
32
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 2" })).toBeVisible();
|
|
33
|
+
}));
|
|
34
|
+
(0, fixtures_1.test)("opens and closes menu correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
35
|
+
yield initTestBed(`
|
|
36
|
+
<DropdownMenu label="Menu">
|
|
37
|
+
<MenuItem>Item 1</MenuItem>
|
|
38
|
+
</DropdownMenu>
|
|
39
|
+
`);
|
|
40
|
+
const driver = yield createDropdownMenuDriver();
|
|
41
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem")).not.toBeVisible();
|
|
42
|
+
yield driver.open();
|
|
43
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem")).toBeVisible();
|
|
44
|
+
yield driver.close();
|
|
45
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem")).not.toBeVisible();
|
|
46
|
+
}));
|
|
47
|
+
(0, fixtures_1.test)("handles menu item clicks", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
48
|
+
const { testStateDriver } = yield initTestBed(`
|
|
49
|
+
<DropdownMenu label="Menu">
|
|
50
|
+
<MenuItem onClick="testState = 'item1-clicked'">Item 1</MenuItem>
|
|
51
|
+
<MenuItem onClick="testState = 'item2-clicked'">Item 2</MenuItem>
|
|
52
|
+
</DropdownMenu>
|
|
53
|
+
`);
|
|
54
|
+
const driver = yield createDropdownMenuDriver();
|
|
55
|
+
yield driver.open();
|
|
56
|
+
yield driver.clickMenuItem("Item 1");
|
|
57
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("item1-clicked");
|
|
58
|
+
// Menu should close after click
|
|
59
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).not.toBeVisible();
|
|
60
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 2" })).not.toBeVisible();
|
|
61
|
+
}));
|
|
62
|
+
(0, fixtures_1.test)("alignment='start' aligns popup menu left", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
63
|
+
yield initTestBed(`
|
|
64
|
+
<HStack width="50%">
|
|
65
|
+
<DropdownMenu alignment="start" label="Menu">
|
|
66
|
+
<MenuItem >Item 1</MenuItem>
|
|
67
|
+
<MenuItem >Item 2</MenuItem>
|
|
68
|
+
</DropdownMenu>
|
|
69
|
+
</HStack>
|
|
70
|
+
`);
|
|
71
|
+
const driver = yield createDropdownMenuDriver();
|
|
72
|
+
yield driver.open();
|
|
73
|
+
const { x: triggerX } = yield driver.component.boundingBox();
|
|
74
|
+
const { x: menuX } = yield page.getByRole("menu").boundingBox();
|
|
75
|
+
(0, fixtures_1.expect)(menuX).toBeCloseTo(triggerX);
|
|
76
|
+
}));
|
|
77
|
+
(0, fixtures_1.test)("alignment='end' aligns popup menu right", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
78
|
+
yield initTestBed(`
|
|
79
|
+
<HStack width="50%" reverse="true">
|
|
80
|
+
<DropdownMenu alignment="end" label="Menu">
|
|
81
|
+
<MenuItem >Item 1</MenuItem>
|
|
82
|
+
<MenuItem >Item 2</MenuItem>
|
|
83
|
+
</DropdownMenu>
|
|
84
|
+
</HStack>
|
|
85
|
+
`);
|
|
86
|
+
const driver = yield createDropdownMenuDriver();
|
|
87
|
+
yield driver.open();
|
|
88
|
+
const { width: triggerWidth, x: triggerX } = yield driver.component.boundingBox();
|
|
89
|
+
const { width: menuWidth, x: menuX } = yield page.getByRole("menu").boundingBox();
|
|
90
|
+
const menuEndX = menuX + menuWidth;
|
|
91
|
+
const triggerEndX = triggerX + triggerWidth;
|
|
92
|
+
(0, fixtures_1.expect)(menuEndX).toBeCloseTo(triggerEndX);
|
|
93
|
+
}));
|
|
94
|
+
(0, fixtures_1.test)("supports submenu functionality", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
95
|
+
yield initTestBed(`
|
|
96
|
+
<DropdownMenu label="Menu">
|
|
97
|
+
<MenuItem>Regular Item</MenuItem>
|
|
98
|
+
<SubMenuItem label="Submenu">
|
|
99
|
+
<MenuItem>Submenu Item 1</MenuItem>
|
|
100
|
+
<MenuItem>Submenu Item 2</MenuItem>
|
|
101
|
+
</SubMenuItem>
|
|
102
|
+
</DropdownMenu>
|
|
103
|
+
`);
|
|
104
|
+
const driver = yield createDropdownMenuDriver();
|
|
105
|
+
// Open main menu
|
|
106
|
+
yield driver.open();
|
|
107
|
+
yield (0, fixtures_1.expect)(page.getByText("Regular Item")).toBeVisible();
|
|
108
|
+
yield (0, fixtures_1.expect)(page.getByText("Submenu")).toBeVisible();
|
|
109
|
+
// Open submenu using driver method
|
|
110
|
+
yield driver.openSubMenu("Submenu");
|
|
111
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Submenu Item 1" })).toBeVisible();
|
|
112
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Submenu Item 2" })).toBeVisible();
|
|
113
|
+
}));
|
|
114
|
+
(0, fixtures_1.test)("supports menu separators", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
115
|
+
yield initTestBed(`
|
|
116
|
+
<DropdownMenu label="Menu">
|
|
117
|
+
<MenuItem>Item 1</MenuItem>
|
|
118
|
+
<MenuSeparator />
|
|
119
|
+
<MenuItem>Item 2</MenuItem>
|
|
120
|
+
</DropdownMenu>
|
|
121
|
+
`);
|
|
122
|
+
const driver = yield createDropdownMenuDriver();
|
|
123
|
+
yield driver.open();
|
|
124
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).toBeVisible();
|
|
125
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 2" })).toBeVisible();
|
|
126
|
+
// Check that separator is rendered using driver method
|
|
127
|
+
const separators = driver.getMenuSeparators();
|
|
128
|
+
yield (0, fixtures_1.expect)(separators).toHaveCount(1);
|
|
129
|
+
}));
|
|
130
|
+
// =============================================================================
|
|
131
|
+
// ACCESSIBILITY TESTS
|
|
132
|
+
// =============================================================================
|
|
133
|
+
(0, fixtures_1.test)("has correct accessibility attributes", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
134
|
+
yield initTestBed(`
|
|
135
|
+
<DropdownMenu label="Accessible Menu">
|
|
136
|
+
<MenuItem>Item 1</MenuItem>
|
|
137
|
+
</DropdownMenu>
|
|
138
|
+
`);
|
|
139
|
+
const driver = yield createDropdownMenuDriver();
|
|
140
|
+
let btn = page.getByRole("button", { name: "Accessible Menu" });
|
|
141
|
+
yield (0, fixtures_1.expect)(btn).toHaveAttribute("aria-haspopup", "menu");
|
|
142
|
+
yield (0, fixtures_1.expect)(btn).toHaveAttribute("aria-expanded", "false");
|
|
143
|
+
yield driver.open();
|
|
144
|
+
page.getByRole("button", { includeHidden: true, expanded: true }).waitFor();
|
|
145
|
+
yield page.getByRole("menu").waitFor();
|
|
146
|
+
}));
|
|
147
|
+
(0, fixtures_1.test)("is keyboard accessible", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
148
|
+
const { testStateDriver } = yield initTestBed(`
|
|
149
|
+
<DropdownMenu label="Keyboard Menu">
|
|
150
|
+
<MenuItem onClick="testState = 'keyboard-activated'">Item 1</MenuItem>
|
|
151
|
+
</DropdownMenu>
|
|
152
|
+
`);
|
|
153
|
+
const btn = page.getByRole("button");
|
|
154
|
+
page.keyboard.press("Tab");
|
|
155
|
+
yield (0, fixtures_1.expect)(btn).toBeFocused();
|
|
156
|
+
// Open with Enter
|
|
157
|
+
page.keyboard.press("Enter");
|
|
158
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).toBeVisible();
|
|
159
|
+
// Navigate and select with keyboard
|
|
160
|
+
yield page.keyboard.press("ArrowDown");
|
|
161
|
+
yield page.keyboard.press("Enter");
|
|
162
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("keyboard-activated");
|
|
163
|
+
}));
|
|
164
|
+
(0, fixtures_1.test)("disabled DropdownMenu can't be focused", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
165
|
+
yield initTestBed(`<DropdownMenu label="Disabled Menu" enabled="false" />`);
|
|
166
|
+
const btn = page.getByRole("button");
|
|
167
|
+
yield (0, fixtures_1.expect)(btn).toBeDisabled();
|
|
168
|
+
// Should not be focusable when disabled
|
|
169
|
+
yield btn.focus();
|
|
170
|
+
yield (0, fixtures_1.expect)(btn).not.toBeFocused();
|
|
171
|
+
}));
|
|
172
|
+
// =============================================================================
|
|
173
|
+
// VISUAL STATE TESTS
|
|
174
|
+
// =============================================================================
|
|
175
|
+
(0, fixtures_1.test)("applies theme variables correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver }) {
|
|
176
|
+
yield initTestBed(`<DropdownMenu label="Themed Menu">
|
|
177
|
+
<MenuItem>Item 1</MenuItem>
|
|
178
|
+
</DropdownMenu>`, {
|
|
179
|
+
testThemeVars: {
|
|
180
|
+
"backgroundColor-DropdownMenu": "rgb(255, 0, 0)",
|
|
181
|
+
"minWidth-DropdownMenu": "200px",
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
const driver = yield createDropdownMenuDriver();
|
|
185
|
+
// Open menu to see styled content
|
|
186
|
+
yield driver.open();
|
|
187
|
+
// Check theme variables are applied to menu content
|
|
188
|
+
const menuContent = driver.getMenuContent();
|
|
189
|
+
yield (0, fixtures_1.expect)(menuContent).toBeVisible();
|
|
190
|
+
yield (0, fixtures_1.expect)(menuContent).toHaveCSS("background-color", "rgb(255, 0, 0)");
|
|
191
|
+
yield (0, fixtures_1.expect)(menuContent).toHaveCSS("min-width", "200px");
|
|
192
|
+
}));
|
|
193
|
+
// =============================================================================
|
|
194
|
+
// EDGE CASE TESTS
|
|
195
|
+
// =============================================================================
|
|
196
|
+
(0, fixtures_1.test)("handles null label gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
197
|
+
yield initTestBed(`<DropdownMenu label="{null}" />`);
|
|
198
|
+
yield (0, fixtures_1.expect)(page.getByRole("button")).toBeVisible();
|
|
199
|
+
}));
|
|
200
|
+
(0, fixtures_1.test)("handles special characters in labels", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
201
|
+
yield initTestBed(`
|
|
202
|
+
<DropdownMenu label="Menu with émojis 🚀">
|
|
203
|
+
<MenuItem>Item with ñ and ü</MenuItem>
|
|
204
|
+
<MenuItem>Item with & < > quotes</MenuItem>
|
|
205
|
+
</DropdownMenu>
|
|
206
|
+
`);
|
|
207
|
+
const driver = yield createDropdownMenuDriver();
|
|
208
|
+
yield (0, fixtures_1.expect)(driver.component).toBeVisible();
|
|
209
|
+
yield (0, fixtures_1.expect)(driver.component).toContainText("Menu with émojis 🚀");
|
|
210
|
+
yield driver.open();
|
|
211
|
+
yield (0, fixtures_1.expect)(page.getByText("Item with ñ and ü")).toBeVisible();
|
|
212
|
+
yield (0, fixtures_1.expect)(page.getByText("Item with & < > quotes")).toBeVisible();
|
|
213
|
+
}));
|
|
214
|
+
(0, fixtures_1.test)("doesn't show empty menu with no MenuItem", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
215
|
+
yield initTestBed(`<DropdownMenu label="Empty Menu" />`);
|
|
216
|
+
const driver = yield createDropdownMenuDriver();
|
|
217
|
+
yield driver.open();
|
|
218
|
+
yield (0, fixtures_1.expect)(page.getByRole("menu")).not.toBeVisible();
|
|
219
|
+
}));
|
|
220
|
+
(0, fixtures_1.test)("handles disabled menu items", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
221
|
+
const { testStateDriver } = yield initTestBed(`
|
|
222
|
+
<DropdownMenu label="Menu">
|
|
223
|
+
<MenuItem enabled="true" onClick="testState = 'enabled-clicked'">Enabled Item</MenuItem>
|
|
224
|
+
<MenuItem enabled="false" onClick="testState = 'disabled-clicked'">Disabled Item</MenuItem>
|
|
225
|
+
</DropdownMenu>
|
|
226
|
+
`);
|
|
227
|
+
const driver = yield createDropdownMenuDriver();
|
|
228
|
+
yield driver.open();
|
|
229
|
+
// Enabled item should work
|
|
230
|
+
yield driver.clickMenuItem("Enabled Item");
|
|
231
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("enabled-clicked");
|
|
232
|
+
// Reopen menu
|
|
233
|
+
yield driver.open();
|
|
234
|
+
yield page.getByText("Disabled Item").click();
|
|
235
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).not.toEqual("disabled-clicked");
|
|
236
|
+
}));
|
|
237
|
+
// =============================================================================
|
|
238
|
+
// INTEGRATION TESTS
|
|
239
|
+
// =============================================================================
|
|
240
|
+
(0, fixtures_1.test)("supports custom trigger template", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
|
|
241
|
+
yield initTestBed(`
|
|
242
|
+
<DropdownMenu>
|
|
243
|
+
<property name="triggerTemplate">
|
|
244
|
+
<Button variant="solid" themeColor="secondary">Custom Trigger</Button>
|
|
245
|
+
</property>
|
|
246
|
+
<MenuItem>Item 1</MenuItem>
|
|
247
|
+
<MenuItem>Item 2</MenuItem>
|
|
248
|
+
</DropdownMenu>
|
|
249
|
+
`);
|
|
250
|
+
const btn = page.getByRole("button", { name: "Custom Trigger" });
|
|
251
|
+
yield (0, fixtures_1.expect)(btn).toBeVisible();
|
|
252
|
+
yield btn.click();
|
|
253
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).toBeVisible();
|
|
254
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 2" })).toBeVisible();
|
|
255
|
+
}));
|
|
256
|
+
(0, fixtures_1.test)("handles onWillOpen event correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
257
|
+
const { testStateDriver } = yield initTestBed(`
|
|
258
|
+
<DropdownMenu label="Event Menu" onWillOpen="testState = 'willOpen-fired'">
|
|
259
|
+
<MenuItem>Item 1</MenuItem>
|
|
260
|
+
</DropdownMenu>
|
|
261
|
+
`);
|
|
262
|
+
const driver = yield createDropdownMenuDriver();
|
|
263
|
+
// Click to trigger onWillOpen event
|
|
264
|
+
yield driver.open();
|
|
265
|
+
// Event should have fired
|
|
266
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toEqual("willOpen-fired");
|
|
267
|
+
// Menu should be open
|
|
268
|
+
yield (0, fixtures_1.expect)(page.getByRole("menuitem", { name: "Item 1" })).toBeVisible();
|
|
269
|
+
}));
|
|
270
|
+
(0, fixtures_1.test)("prevents opening when onWillOpen returns false", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
271
|
+
yield initTestBed(`
|
|
272
|
+
<DropdownMenu label="Prevented Menu" onWillOpen="return false">
|
|
273
|
+
<MenuItem>Item 1</MenuItem>
|
|
274
|
+
</DropdownMenu>
|
|
275
|
+
`);
|
|
276
|
+
const driver = yield createDropdownMenuDriver();
|
|
277
|
+
// Click should not open menu due to onWillOpen returning false
|
|
278
|
+
yield driver.open();
|
|
279
|
+
yield (0, fixtures_1.expect)(page.getByText("Item 1")).not.toBeVisible();
|
|
280
|
+
}));
|
|
281
|
+
(0, fixtures_1.test)("API methods work correctly", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page }) {
|
|
282
|
+
yield initTestBed(`
|
|
283
|
+
<HStack>
|
|
284
|
+
<DropdownMenu id="apiMenu" label="API Menu">
|
|
285
|
+
<MenuItem>Item 1</MenuItem>
|
|
286
|
+
<MenuItem><Button testId="closeBtn" onGotFocus="apiMenu.close()" label="Close Menu" /></MenuItem>
|
|
287
|
+
</DropdownMenu>
|
|
288
|
+
<Button testId="openBtn" onClick="apiMenu.open()">Open Menu</Button>
|
|
289
|
+
</HStack>
|
|
290
|
+
`);
|
|
291
|
+
const menuItem = page.getByRole("menuitem", { name: "Item 1" });
|
|
292
|
+
yield (0, fixtures_1.expect)(menuItem).not.toBeVisible();
|
|
293
|
+
yield page.getByTestId("openBtn").click();
|
|
294
|
+
yield (0, fixtures_1.expect)(menuItem).toBeVisible();
|
|
295
|
+
yield page.getByTestId("closeBtn").focus();
|
|
296
|
+
yield (0, fixtures_1.expect)(menuItem).not.toBeVisible();
|
|
297
|
+
}));
|
|
298
|
+
(0, fixtures_1.test)("works with nested menu structures", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, createDropdownMenuDriver, page, }) {
|
|
299
|
+
yield initTestBed(`
|
|
300
|
+
<DropdownMenu label="Main Menu">
|
|
301
|
+
<MenuItem>Top Level Item</MenuItem>
|
|
302
|
+
<SubMenuItem label="Category 1">
|
|
303
|
+
<MenuItem>Category 1 Item 1</MenuItem>
|
|
304
|
+
<SubMenuItem label="Subcategory">
|
|
305
|
+
<MenuItem>Deep Item 1</MenuItem>
|
|
306
|
+
<MenuItem>Deep Item 2</MenuItem>
|
|
307
|
+
</SubMenuItem>
|
|
308
|
+
</SubMenuItem>
|
|
309
|
+
<MenuSeparator />
|
|
310
|
+
<SubMenuItem label="Category 2">
|
|
311
|
+
<MenuItem>Category 2 Item 1</MenuItem>
|
|
312
|
+
<MenuItem>Category 2 Item 2</MenuItem>
|
|
313
|
+
</SubMenuItem>
|
|
314
|
+
</DropdownMenu>
|
|
315
|
+
`);
|
|
316
|
+
const driver = yield createDropdownMenuDriver();
|
|
317
|
+
// Open main menu
|
|
318
|
+
yield driver.open();
|
|
319
|
+
yield (0, fixtures_1.expect)(page.getByText("Top Level Item")).toBeVisible();
|
|
320
|
+
yield (0, fixtures_1.expect)(page.getByText("Category 1")).toBeVisible();
|
|
321
|
+
// Navigate to submenu using driver method
|
|
322
|
+
yield (0, fixtures_1.expect)(page.getByText("Category 1 Item 1")).not.toBeVisible();
|
|
323
|
+
yield driver.openSubMenu("Category 1");
|
|
324
|
+
yield (0, fixtures_1.expect)(page.getByText("Category 1 Item 1")).toBeVisible();
|
|
325
|
+
yield (0, fixtures_1.expect)(page.getByText("Subcategory")).toBeVisible();
|
|
326
|
+
// Navigate to nested submenu
|
|
327
|
+
yield (0, fixtures_1.expect)(page.getByText("Deep Item 1")).not.toBeVisible();
|
|
328
|
+
yield driver.openSubMenu("Subcategory");
|
|
329
|
+
yield (0, fixtures_1.expect)(page.getByText("Deep Item 1")).toBeVisible();
|
|
330
|
+
yield (0, fixtures_1.expect)(page.getByText("Deep Item 2")).toBeVisible();
|
|
331
|
+
}));
|
|
@@ -56,9 +56,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
56
56
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
57
57
|
};
|
|
58
58
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
-
exports.MenuItem = exports.defaultMenuItemProps = exports.DropdownMenu = exports.defaultDropdownMenuProps = void 0;
|
|
60
|
-
exports.SubMenuItem = SubMenuItem;
|
|
61
|
-
exports.MenuSeparator = MenuSeparator;
|
|
59
|
+
exports.MenuSeparator = exports.SubMenuItem = exports.MenuItem = exports.defaultMenuItemProps = exports.DropdownMenu = exports.defaultDropdownMenuProps = void 0;
|
|
62
60
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
63
61
|
const react_1 = require("react");
|
|
64
62
|
const react_2 = require("react");
|
|
@@ -139,10 +137,10 @@ exports.MenuItem = (0, react_1.forwardRef)(function MenuItem({ children, onClick
|
|
|
139
137
|
}
|
|
140
138
|
}, ref: ref, children: [iconToStart && icon, (0, jsx_runtime_1.jsx)("div", { className: DropdownMenu_module_scss_1.default.wrapper, children: label !== null && label !== void 0 ? label : children }), !iconToStart && icon] }));
|
|
141
139
|
});
|
|
142
|
-
function SubMenuItem({ children, label, triggerTemplate }) {
|
|
140
|
+
exports.SubMenuItem = (0, react_1.forwardRef)(function SubMenuItem({ children, label, triggerTemplate }, ref) {
|
|
143
141
|
const { root } = (0, ThemeContext_1.useTheme)();
|
|
144
|
-
return ((0, jsx_runtime_1.jsxs)(ReactDropdownMenu.Sub, { children: [(0, jsx_runtime_1.jsx)(ReactDropdownMenu.SubTrigger, { className: DropdownMenu_module_scss_1.default.DropdownMenuSubTrigger, asChild: true, children: triggerTemplate ? triggerTemplate : (0, jsx_runtime_1.jsx)("div", { children: label }) }), (0, jsx_runtime_1.jsx)(ReactDropdownMenu.Portal, { container: root, children: (0, jsx_runtime_1.jsx)(ReactDropdownMenu.SubContent, { className: DropdownMenu_module_scss_1.default.DropdownMenuSubContent, children: children }) })] }));
|
|
145
|
-
}
|
|
146
|
-
function MenuSeparator() {
|
|
147
|
-
return (0, jsx_runtime_1.jsx)(ReactDropdownMenu.Separator, { className: DropdownMenu_module_scss_1.default.DropdownMenuSeparator });
|
|
148
|
-
}
|
|
142
|
+
return ((0, jsx_runtime_1.jsxs)(ReactDropdownMenu.Sub, { children: [(0, jsx_runtime_1.jsx)(ReactDropdownMenu.SubTrigger, { className: DropdownMenu_module_scss_1.default.DropdownMenuSubTrigger, asChild: true, ref: ref, children: triggerTemplate ? triggerTemplate : (0, jsx_runtime_1.jsx)("div", { children: label }) }), (0, jsx_runtime_1.jsx)(ReactDropdownMenu.Portal, { container: root, children: (0, jsx_runtime_1.jsx)(ReactDropdownMenu.SubContent, { className: DropdownMenu_module_scss_1.default.DropdownMenuSubContent, children: children }) })] }));
|
|
143
|
+
});
|
|
144
|
+
exports.MenuSeparator = (0, react_1.forwardRef)(function MenuSeparator(props, ref) {
|
|
145
|
+
return (0, jsx_runtime_1.jsx)(ReactDropdownMenu.Separator, Object.assign({ ref: ref, className: DropdownMenu_module_scss_1.default.DropdownMenuSeparator }, props));
|
|
146
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
fixtures_1.test.describe("Basic Functionality", () => {
|
|
17
|
+
(0, fixtures_1.test)("component renders with default properties", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
|
|
18
|
+
yield initTestBed(`<EmojiSelector testId="emoji-selector" />`, {});
|
|
19
|
+
yield (0, fixtures_1.expect)(page.getByTestId("emoji-selector")).toBeVisible();
|
|
20
|
+
}));
|
|
21
|
+
(0, fixtures_1.test)("display selected emoji", (_a) => __awaiter(void 0, [_a], void 0, function* ({ page, initTestBed }) {
|
|
22
|
+
const EXPECTED_EMOTICON = "😀";
|
|
23
|
+
const { testStateDriver } = yield initTestBed(`
|
|
24
|
+
<EmojiSelector onSelect="(emoji) => { testState = emoji }" />
|
|
25
|
+
`);
|
|
26
|
+
yield page.getByText(EXPECTED_EMOTICON).click();
|
|
27
|
+
yield fixtures_1.expect.poll(testStateDriver.testState).toBe(EXPECTED_EMOTICON);
|
|
28
|
+
}));
|
|
29
|
+
});
|