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,543 @@
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
+ // =============================================================================
15
+ // BASIC FUNCTIONALITY TESTS
16
+ // =============================================================================
17
+ fixtures_1.test.describe("Basic Functionality", () => {
18
+ (0, fixtures_1.test)("renders with basic setup", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
19
+ yield initTestBed(`
20
+ <Splitter height="200px" testId="splitter">
21
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
22
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
23
+ </Splitter>
24
+ `);
25
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
26
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
27
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
28
+ }));
29
+ (0, fixtures_1.test)("renders with single child", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
30
+ yield initTestBed(`
31
+ <Splitter height="200px" testId="splitter">
32
+ <Stack backgroundColor="lightblue" height="100%" testId="single-child"/>
33
+ </Splitter>
34
+ `);
35
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
36
+ yield (0, fixtures_1.expect)(page.getByTestId("single-child")).toBeVisible();
37
+ }));
38
+ fixtures_1.test.describe("orientation property", () => {
39
+ (0, fixtures_1.test)("orientation='horizontal' arranges sections left to right", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
40
+ yield initTestBed(`
41
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
42
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
43
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
44
+ </Splitter>
45
+ `);
46
+ const primary = page.getByTestId("primary");
47
+ const secondary = page.getByTestId("secondary");
48
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
49
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
50
+ // In horizontal orientation, primary should be to the left of secondary
51
+ (0, fixtures_1.expect)(primaryBounds.right).toBeLessThanOrEqual(secondaryBounds.left + 10); // Allow for small overlap due to resizer
52
+ }));
53
+ (0, fixtures_1.test)("orientation='vertical' arranges sections top to bottom", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
54
+ yield initTestBed(`
55
+ <Splitter height="200px" width="400px" orientation="vertical" testId="splitter">
56
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
57
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
58
+ </Splitter>
59
+ `);
60
+ const primary = page.getByTestId("primary");
61
+ const secondary = page.getByTestId("secondary");
62
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
63
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
64
+ // In vertical orientation, primary should be above secondary
65
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10); // Allow for small overlap due to resizer
66
+ }));
67
+ (0, fixtures_1.test)("defaults to vertical orientation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
68
+ yield initTestBed(`
69
+ <Splitter height="200px" width="400px" testId="splitter">
70
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
71
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
72
+ </Splitter>
73
+ `);
74
+ const primary = page.getByTestId("primary");
75
+ const secondary = page.getByTestId("secondary");
76
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
77
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
78
+ // Default should be vertical (primary above secondary)
79
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10);
80
+ }));
81
+ });
82
+ fixtures_1.test.describe("swapped property", () => {
83
+ [
84
+ { swapped: false, orientation: "horizontal", description: "primary left, secondary right" },
85
+ { swapped: true, orientation: "horizontal", description: "secondary left, primary right" },
86
+ { swapped: false, orientation: "vertical", description: "primary top, secondary bottom" },
87
+ { swapped: true, orientation: "vertical", description: "secondary top, primary bottom" },
88
+ ].forEach(({ swapped, orientation, description }) => {
89
+ (0, fixtures_1.test)(`swapped=${swapped} with orientation=${orientation} renders ${description}`, (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
90
+ yield initTestBed(`
91
+ <Splitter height="200px" width="400px" orientation="${orientation}" swapped="${swapped}" testId="splitter">
92
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
93
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
94
+ </Splitter>
95
+ `);
96
+ const primary = page.getByTestId("primary");
97
+ const secondary = page.getByTestId("secondary");
98
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
99
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
100
+ if (orientation === "horizontal") {
101
+ if (swapped) {
102
+ // Secondary should be to the left of primary
103
+ (0, fixtures_1.expect)(secondaryBounds.right).toBeLessThanOrEqual(primaryBounds.left + 10);
104
+ }
105
+ else {
106
+ // Primary should be to the left of secondary
107
+ (0, fixtures_1.expect)(primaryBounds.right).toBeLessThanOrEqual(secondaryBounds.left + 10);
108
+ }
109
+ }
110
+ else {
111
+ if (swapped) {
112
+ // Secondary should be above primary
113
+ (0, fixtures_1.expect)(secondaryBounds.bottom).toBeLessThanOrEqual(primaryBounds.top + 10);
114
+ }
115
+ else {
116
+ // Primary should be above secondary
117
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10);
118
+ }
119
+ }
120
+ }));
121
+ });
122
+ });
123
+ fixtures_1.test.describe("initialPrimarySize property", () => {
124
+ (0, fixtures_1.test)("sets initial size with percentage", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
125
+ yield initTestBed(`
126
+ <Splitter height="200px" width="400px" orientation="horizontal" initialPrimarySize="25%" testId="splitter">
127
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
128
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
129
+ </Splitter>
130
+ `);
131
+ const splitter = page.getByTestId("splitter");
132
+ const primary = page.getByTestId("primary");
133
+ const splitterBounds = yield (0, component_test_helpers_1.getBounds)(splitter);
134
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
135
+ const expectedWidth = splitterBounds.width * 0.25;
136
+ const tolerance = 10; // Allow some tolerance for rounding/margins
137
+ (0, fixtures_1.expect)(Math.abs(primaryBounds.width - expectedWidth)).toBeLessThan(tolerance);
138
+ }));
139
+ (0, fixtures_1.test)("sets initial size with pixels", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
140
+ yield initTestBed(`
141
+ <Splitter height="200px" width="400px" orientation="horizontal" initialPrimarySize="100px" testId="splitter">
142
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
143
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
144
+ </Splitter>
145
+ `);
146
+ const primary = page.getByTestId("primary");
147
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
148
+ const tolerance = 10;
149
+ (0, fixtures_1.expect)(Math.abs(primaryBounds.width - 100)).toBeLessThan(tolerance);
150
+ }));
151
+ (0, fixtures_1.test)("defaults to 50%", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
152
+ yield initTestBed(`
153
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
154
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
155
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
156
+ </Splitter>
157
+ `);
158
+ const splitter = page.getByTestId("splitter");
159
+ const primary = page.getByTestId("primary");
160
+ const splitterBounds = yield (0, component_test_helpers_1.getBounds)(splitter);
161
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
162
+ const expectedWidth = splitterBounds.width * 0.5;
163
+ const tolerance = 15; // Allow some tolerance for default behavior
164
+ (0, fixtures_1.expect)(Math.abs(primaryBounds.width - expectedWidth)).toBeLessThan(tolerance);
165
+ }));
166
+ });
167
+ fixtures_1.test.describe("floating property", () => {
168
+ (0, fixtures_1.test)("floating=false shows resizer permanently", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
169
+ yield initTestBed(`
170
+ <Splitter height="200px" width="400px" orientation="horizontal" floating="false" testId="splitter">
171
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
172
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
173
+ </Splitter>
174
+ `);
175
+ const splitter = page.getByTestId("splitter");
176
+ const driver = yield createSplitterDriver(splitter);
177
+ const resizer = yield driver.getResizer();
178
+ yield (0, fixtures_1.expect)(resizer).toBeVisible();
179
+ }));
180
+ (0, fixtures_1.test)("floating=true hides resizer until hover", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
181
+ yield initTestBed(`
182
+ <Splitter height="200px" width="400px" orientation="horizontal" floating="true" testId="splitter">
183
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
184
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
185
+ </Splitter>
186
+ `);
187
+ const splitter = page.getByTestId("splitter");
188
+ // When floating=true, the regular resizer should not be visible
189
+ const regularResizer = splitter.locator('[class*="resizer"]:not([class*="floating"])');
190
+ const isRegularResizerVisible = yield regularResizer.isVisible().catch(() => false);
191
+ (0, fixtures_1.expect)(isRegularResizerVisible).toBe(false);
192
+ // The floating resizer should exist but be initially hidden (opacity 0)
193
+ const floatingResizer = splitter.locator('[class*="floating"]');
194
+ if ((yield floatingResizer.count()) > 0) {
195
+ const initialOpacity = yield floatingResizer.evaluate(el => window.getComputedStyle(el).opacity);
196
+ (0, fixtures_1.expect)(parseFloat(initialOpacity)).toBe(0);
197
+ }
198
+ }));
199
+ });
200
+ fixtures_1.test.describe("splitterTemplate property", () => {
201
+ (0, fixtures_1.test)("renders custom splitter template", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
202
+ yield initTestBed(`
203
+ <Splitter height="200px" width="400px" testId="splitter">
204
+ <property name="splitterTemplate">
205
+ <ContentSeparator backgroundColor="green" height="4px" testId="custom-separator"/>
206
+ </property>
207
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
208
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
209
+ </Splitter>
210
+ `);
211
+ yield (0, fixtures_1.expect)(page.getByTestId("custom-separator")).toBeVisible();
212
+ }));
213
+ });
214
+ fixtures_1.test.describe("resize functionality", () => {
215
+ (0, fixtures_1.test)("drag resizer changes panel sizes in horizontal orientation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
216
+ yield initTestBed(`
217
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
218
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
219
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
220
+ </Splitter>
221
+ `);
222
+ const splitter = page.getByTestId("splitter");
223
+ const primary = page.getByTestId("primary");
224
+ const driver = yield createSplitterDriver(splitter);
225
+ // Get initial size
226
+ const initialBounds = yield (0, component_test_helpers_1.getBounds)(primary);
227
+ // Drag resizer to the right by 50 pixels
228
+ yield driver.dragResizer(50, 0);
229
+ // Get new size and verify it changed
230
+ const newBounds = yield (0, component_test_helpers_1.getBounds)(primary);
231
+ (0, fixtures_1.expect)(newBounds.width).toBeGreaterThan(initialBounds.width + 30); // Allow some tolerance
232
+ }));
233
+ (0, fixtures_1.test)("drag resizer changes panel sizes in vertical orientation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
234
+ yield initTestBed(`
235
+ <Splitter height="200px" width="400px" orientation="vertical" testId="splitter">
236
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
237
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
238
+ </Splitter>
239
+ `);
240
+ const splitter = page.getByTestId("splitter");
241
+ const primary = page.getByTestId("primary");
242
+ const driver = yield createSplitterDriver(splitter);
243
+ // Get initial size
244
+ const initialBounds = yield (0, component_test_helpers_1.getBounds)(primary);
245
+ // Drag resizer down by 30 pixels
246
+ yield driver.dragResizer(0, 30);
247
+ // Get new size and verify it changed
248
+ const newBounds = yield (0, component_test_helpers_1.getBounds)(primary);
249
+ (0, fixtures_1.expect)(newBounds.height).toBeGreaterThan(initialBounds.height + 15); // Allow some tolerance
250
+ }));
251
+ });
252
+ fixtures_1.test.describe("size constraint properties", () => {
253
+ (0, fixtures_1.test)("minPrimarySize constrains minimum size", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
254
+ yield initTestBed(`
255
+ <Splitter height="200px" width="400px" orientation="horizontal" minPrimarySize="100px" testId="splitter">
256
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
257
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
258
+ </Splitter>
259
+ `);
260
+ const splitter = page.getByTestId("splitter");
261
+ const primary = page.getByTestId("primary");
262
+ const driver = yield createSplitterDriver(splitter);
263
+ // Try to drag resizer far to the left
264
+ yield driver.dragResizer(-300, 0);
265
+ // Primary should not be smaller than minimum
266
+ const bounds = yield (0, component_test_helpers_1.getBounds)(primary);
267
+ (0, fixtures_1.expect)(bounds.width).toBeGreaterThanOrEqual(90); // Allow small tolerance
268
+ }));
269
+ (0, fixtures_1.test)("maxPrimarySize constrains maximum size", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
270
+ yield initTestBed(`
271
+ <Splitter height="200px" width="400px" orientation="horizontal" maxPrimarySize="300px" testId="splitter">
272
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
273
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
274
+ </Splitter>
275
+ `);
276
+ const splitter = page.getByTestId("splitter");
277
+ const primary = page.getByTestId("primary");
278
+ const driver = yield createSplitterDriver(splitter);
279
+ // Try to drag resizer far to the right
280
+ yield driver.dragResizer(300, 0);
281
+ // Primary should not be larger than maximum
282
+ const bounds = yield (0, component_test_helpers_1.getBounds)(primary);
283
+ (0, fixtures_1.expect)(bounds.width).toBeLessThanOrEqual(310); // Allow small tolerance
284
+ }));
285
+ });
286
+ fixtures_1.test.describe("resize event", () => {
287
+ (0, fixtures_1.test)("fires resize event when dragging", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
288
+ const { testStateDriver } = yield initTestBed(`
289
+ <Splitter height="200px" width="400px" orientation="horizontal" onResize="arg => testState = arg" testId="splitter">
290
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
291
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
292
+ </Splitter>
293
+ `);
294
+ const splitter = page.getByTestId("splitter");
295
+ const driver = yield createSplitterDriver(splitter);
296
+ // Drag resizer
297
+ yield driver.dragResizer(50, 0);
298
+ // Verify resize event was called with array of percentages
299
+ yield fixtures_1.expect.poll(testStateDriver.testState).toBeDefined();
300
+ const resizeData = yield testStateDriver.testState();
301
+ (0, fixtures_1.expect)(Array.isArray(resizeData)).toBe(true);
302
+ (0, fixtures_1.expect)(resizeData).toHaveLength(2);
303
+ (0, fixtures_1.expect)(typeof resizeData[0]).toBe("number");
304
+ (0, fixtures_1.expect)(typeof resizeData[1]).toBe("number");
305
+ }));
306
+ });
307
+ fixtures_1.test.describe("edge cases", () => {
308
+ (0, fixtures_1.test)("handles null properties gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
309
+ yield initTestBed(`
310
+ <Splitter
311
+ height="200px"
312
+ initialPrimarySize="50px"
313
+ minPrimarySize="10px"
314
+ maxPrimarySize="180px"
315
+ testId="splitter"
316
+ >
317
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
318
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
319
+ </Splitter>
320
+ `);
321
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
322
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
323
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
324
+ }));
325
+ (0, fixtures_1.test)("handles undefined properties gracefully", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
326
+ yield initTestBed(`
327
+ <Splitter
328
+ height="200px"
329
+ width="400px"
330
+ testId="splitter"
331
+ >
332
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
333
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
334
+ </Splitter>
335
+ `);
336
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
337
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
338
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
339
+ }));
340
+ (0, fixtures_1.test)("handles invalid size values", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
341
+ yield initTestBed(`
342
+ <Splitter
343
+ height="200px"
344
+ width="400px"
345
+ initialPrimarySize="50%"
346
+ testId="splitter"
347
+ >
348
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
349
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
350
+ </Splitter>
351
+ `);
352
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
353
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
354
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
355
+ }));
356
+ (0, fixtures_1.test)("handles object values for string properties", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
357
+ yield initTestBed(`
358
+ <Splitter
359
+ height="200px"
360
+ width="400px"
361
+ orientation="horizontal"
362
+ initialPrimarySize="50%"
363
+ testId="splitter"
364
+ >
365
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
366
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
367
+ </Splitter>
368
+ `);
369
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
370
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
371
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
372
+ }));
373
+ });
374
+ });
375
+ // =============================================================================
376
+ // ACCESSIBILITY TESTS
377
+ // =============================================================================
378
+ fixtures_1.test.describe("Accessibility", () => {
379
+ (0, fixtures_1.test)("resizer has appropriate cursor styles", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
380
+ yield initTestBed(`
381
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
382
+ <Stack backgroundColor="lightblue" height="100%"/>
383
+ <Stack backgroundColor="darksalmon" height="100%"/>
384
+ </Splitter>
385
+ `);
386
+ const splitter = page.getByTestId("splitter");
387
+ const driver = yield createSplitterDriver(splitter);
388
+ const resizer = yield driver.getResizer();
389
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("cursor", "ew-resize");
390
+ }));
391
+ (0, fixtures_1.test)("vertical resizer has appropriate cursor style", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
392
+ yield initTestBed(`
393
+ <Splitter height="200px" width="400px" orientation="vertical" testId="splitter">
394
+ <Stack backgroundColor="lightblue" height="100%"/>
395
+ <Stack backgroundColor="darksalmon" height="100%"/>
396
+ </Splitter>
397
+ `);
398
+ const splitter = page.getByTestId("splitter");
399
+ const driver = yield createSplitterDriver(splitter);
400
+ const resizer = yield driver.getResizer();
401
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("cursor", "ns-resize");
402
+ }));
403
+ (0, fixtures_1.test)("splitter prevents text selection during drag", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
404
+ yield initTestBed(`
405
+ <Splitter height="200px" width="400px" testId="splitter">
406
+ <Stack backgroundColor="lightblue" height="100%"/>
407
+ <Stack backgroundColor="darksalmon" height="100%"/>
408
+ </Splitter>
409
+ `);
410
+ const splitter = page.getByTestId("splitter");
411
+ yield (0, fixtures_1.expect)(splitter).toHaveCSS("user-select", "none");
412
+ }));
413
+ });
414
+ // =============================================================================
415
+ // THEME VARIABLE TESTS
416
+ // =============================================================================
417
+ fixtures_1.test.describe("Theme Variables", () => {
418
+ (0, fixtures_1.test)("applies backgroundColor-resizer-Splitter theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
419
+ yield initTestBed(`
420
+ <Splitter height="200px" width="400px" testId="splitter">
421
+ <Stack backgroundColor="lightblue" height="100%"/>
422
+ <Stack backgroundColor="darksalmon" height="100%"/>
423
+ </Splitter>
424
+ `, {
425
+ testThemeVars: { "backgroundColor-resizer-Splitter": "rgb(255, 0, 0)" },
426
+ });
427
+ const splitter = page.getByTestId("splitter");
428
+ const driver = yield createSplitterDriver(splitter);
429
+ const resizer = yield driver.getResizer();
430
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("background-color", "rgb(255, 0, 0)");
431
+ }));
432
+ (0, fixtures_1.test)("applies thickness-resizer-Splitter theme variable for horizontal", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
433
+ yield initTestBed(`
434
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
435
+ <Stack backgroundColor="lightblue" height="100%"/>
436
+ <Stack backgroundColor="darksalmon" height="100%"/>
437
+ </Splitter>
438
+ `, {
439
+ testThemeVars: { "thickness-resizer-Splitter": "10px" },
440
+ });
441
+ const splitter = page.getByTestId("splitter");
442
+ const driver = yield createSplitterDriver(splitter);
443
+ const resizer = yield driver.getResizer();
444
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("width", "10px");
445
+ }));
446
+ (0, fixtures_1.test)("applies thickness-resizer-Splitter theme variable for vertical", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
447
+ yield initTestBed(`
448
+ <Splitter height="200px" width="400px" orientation="vertical" testId="splitter">
449
+ <Stack backgroundColor="lightblue" height="100%"/>
450
+ <Stack backgroundColor="darksalmon" height="100%"/>
451
+ </Splitter>
452
+ `, {
453
+ testThemeVars: { "thickness-resizer-Splitter": "10px" },
454
+ });
455
+ const splitter = page.getByTestId("splitter");
456
+ const driver = yield createSplitterDriver(splitter);
457
+ const resizer = yield driver.getResizer();
458
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("height", "10px");
459
+ }));
460
+ (0, fixtures_1.test)("applies cursor-resizer-horizontal-Splitter theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
461
+ yield initTestBed(`
462
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
463
+ <Stack backgroundColor="lightblue" height="100%"/>
464
+ <Stack backgroundColor="darksalmon" height="100%"/>
465
+ </Splitter>
466
+ `, {
467
+ testThemeVars: { "cursor-resizer-horizontal-Splitter": "col-resize" },
468
+ });
469
+ const splitter = page.getByTestId("splitter");
470
+ const driver = yield createSplitterDriver(splitter);
471
+ const resizer = yield driver.getResizer();
472
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("cursor", "col-resize");
473
+ }));
474
+ (0, fixtures_1.test)("applies cursor-resizer-vertical-Splitter theme variable", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
475
+ yield initTestBed(`
476
+ <Splitter height="200px" width="400px" orientation="vertical" testId="splitter">
477
+ <Stack backgroundColor="lightblue" height="100%"/>
478
+ <Stack backgroundColor="darksalmon" height="100%"/>
479
+ </Splitter>
480
+ `, {
481
+ testThemeVars: { "cursor-resizer-vertical-Splitter": "row-resize" },
482
+ });
483
+ const splitter = page.getByTestId("splitter");
484
+ const driver = yield createSplitterDriver(splitter);
485
+ const resizer = yield driver.getResizer();
486
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("cursor", "row-resize");
487
+ }));
488
+ });
489
+ // =============================================================================
490
+ // OTHER EDGE CASE TESTS
491
+ // =============================================================================
492
+ fixtures_1.test.describe("Other Edge Cases", () => {
493
+ (0, fixtures_1.test)("handles very small container dimensions", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
494
+ yield initTestBed(`
495
+ <Splitter height="20px" width="20px" testId="splitter">
496
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
497
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
498
+ </Splitter>
499
+ `);
500
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
501
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
502
+ // Secondary might be hidden in very small containers due to space constraints
503
+ const secondary = page.getByTestId("secondary");
504
+ const isSecondaryVisible = yield secondary.isVisible();
505
+ if (isSecondaryVisible) {
506
+ yield (0, fixtures_1.expect)(secondary).toBeVisible();
507
+ }
508
+ }));
509
+ (0, fixtures_1.test)("handles very large initial size values", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
510
+ yield initTestBed(`
511
+ <Splitter height="200px" width="400px" initialPrimarySize="90%" testId="splitter">
512
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
513
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
514
+ </Splitter>
515
+ `);
516
+ yield (0, fixtures_1.expect)(page.getByTestId("splitter")).toBeVisible();
517
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
518
+ // Secondary might be very small but should still be visible
519
+ const secondary = page.getByTestId("secondary");
520
+ const isSecondaryVisible = yield secondary.isVisible();
521
+ if (isSecondaryVisible) {
522
+ yield (0, fixtures_1.expect)(secondary).toBeVisible();
523
+ }
524
+ }));
525
+ (0, fixtures_1.test)("handles rapid resize operations", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
526
+ yield initTestBed(`
527
+ <Splitter height="200px" width="400px" orientation="horizontal" testId="splitter">
528
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
529
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
530
+ </Splitter>
531
+ `);
532
+ const splitter = page.getByTestId("splitter");
533
+ const driver = yield createSplitterDriver(splitter);
534
+ // Perform multiple rapid drag operations
535
+ yield driver.dragResizer(20, 0);
536
+ yield driver.dragResizer(-30, 0);
537
+ yield driver.dragResizer(40, 0);
538
+ yield driver.dragResizer(-10, 0);
539
+ // Should still be functional
540
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
541
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
542
+ }));
543
+ });
@@ -0,0 +1,104 @@
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
+ // =============================================================================
15
+ // BASIC FUNCTIONALITY TESTS
16
+ // =============================================================================
17
+ fixtures_1.test.describe("Basic Functionality", () => {
18
+ (0, fixtures_1.test)("renders with basic setup", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
19
+ yield initTestBed(`
20
+ <VSplitter height="200px" width="400px" testId="vsplitter">
21
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
22
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
23
+ </VSplitter>
24
+ `);
25
+ yield (0, fixtures_1.expect)(page.getByTestId("vsplitter")).toBeVisible();
26
+ yield (0, fixtures_1.expect)(page.getByTestId("primary")).toBeVisible();
27
+ yield (0, fixtures_1.expect)(page.getByTestId("secondary")).toBeVisible();
28
+ }));
29
+ (0, fixtures_1.test)("defaults to vertical orientation", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
30
+ yield initTestBed(`
31
+ <VSplitter height="200px" width="400px" testId="vsplitter">
32
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
33
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
34
+ </VSplitter>
35
+ `);
36
+ const primary = page.getByTestId("primary");
37
+ const secondary = page.getByTestId("secondary");
38
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
39
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
40
+ // In vertical orientation, primary should be above secondary
41
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10); // Allow for small overlap due to resizer
42
+ }));
43
+ (0, fixtures_1.test)("ignores orientation property when explicitly set", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
44
+ yield initTestBed(`
45
+ <VSplitter height="200px" width="400px" orientation="horizontal" testId="vsplitter">
46
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
47
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
48
+ </VSplitter>
49
+ `);
50
+ const primary = page.getByTestId("primary");
51
+ const secondary = page.getByTestId("secondary");
52
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
53
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
54
+ // Even with orientation="horizontal", VSplitter should still be vertical
55
+ // Primary should be above secondary, NOT to the left of it
56
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10);
57
+ }));
58
+ (0, fixtures_1.test)("works with swapped property", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
59
+ yield initTestBed(`
60
+ <VSplitter height="200px" width="400px" swapped="true" testId="vsplitter">
61
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
62
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
63
+ </VSplitter>
64
+ `);
65
+ const primary = page.getByTestId("primary");
66
+ const secondary = page.getByTestId("secondary");
67
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
68
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
69
+ // With swapped=true, secondary should be above primary
70
+ (0, fixtures_1.expect)(secondaryBounds.bottom).toBeLessThanOrEqual(primaryBounds.top + 10);
71
+ }));
72
+ (0, fixtures_1.test)("maintains vertical orientation even with invalid orientation values", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page }) {
73
+ yield initTestBed(`
74
+ <VSplitter height="200px" width="400px" orientation="invalid-value" testId="vsplitter">
75
+ <Stack backgroundColor="lightblue" height="100%" testId="primary"/>
76
+ <Stack backgroundColor="darksalmon" height="100%" testId="secondary"/>
77
+ </VSplitter>
78
+ `);
79
+ const primary = page.getByTestId("primary");
80
+ const secondary = page.getByTestId("secondary");
81
+ const primaryBounds = yield (0, component_test_helpers_1.getBounds)(primary);
82
+ const secondaryBounds = yield (0, component_test_helpers_1.getBounds)(secondary);
83
+ // Should still be vertical regardless of invalid orientation value
84
+ (0, fixtures_1.expect)(primaryBounds.bottom).toBeLessThanOrEqual(secondaryBounds.top + 10);
85
+ }));
86
+ });
87
+ // =============================================================================
88
+ // ACCESSIBILITY TESTS
89
+ // =============================================================================
90
+ fixtures_1.test.describe("Accessibility", () => {
91
+ (0, fixtures_1.test)("resizer has vertical cursor style", (_a) => __awaiter(void 0, [_a], void 0, function* ({ initTestBed, page, createSplitterDriver }) {
92
+ yield initTestBed(`
93
+ <VSplitter height="200px" width="400px" testId="vsplitter">
94
+ <Stack backgroundColor="lightblue" height="100%"/>
95
+ <Stack backgroundColor="darksalmon" height="100%"/>
96
+ </VSplitter>
97
+ `);
98
+ const vsplitter = page.getByTestId("vsplitter");
99
+ const driver = yield createSplitterDriver(vsplitter);
100
+ const resizer = yield driver.getResizer();
101
+ // VSplitter should always use vertical cursor (ns-resize)
102
+ yield (0, fixtures_1.expect)(resizer).toHaveCSS("cursor", "ns-resize");
103
+ }));
104
+ });