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,444 @@
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
+ exports.expect = void 0;
13
+ const test_1 = require("@playwright/test");
14
+ const component_test_helpers_1 = require("./component-test-helpers");
15
+ // --- Extending Expect
16
+ exports.expect = test_1.expect.extend({
17
+ /**
18
+ * Asserts whether the Button component has the expected label either through the `label` property
19
+ * or as a text node child.
20
+ *
21
+ * **Usage**
22
+ *
23
+ * ```js
24
+ * await initTestBed(`<Button label="hello" />`);
25
+ * const driver = await createButtonDriver();
26
+ * await expect(driver.component).toHaveLabel("hello"); // <- resolves to true
27
+ * ```
28
+ *
29
+ * @param expected Expected string label
30
+ */
31
+ toHaveExplicitLabel(locator, expected) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const assertionName = "toHaveExplicitLabel";
34
+ let pass = false;
35
+ const label = yield locator.evaluate((element) => {
36
+ var _a;
37
+ return (_a = [...element.childNodes]
38
+ .filter((e) => e.nodeType === Node.TEXT_NODE && e.textContent.trim())
39
+ .map((e) => e.textContent.trim())) === null || _a === void 0 ? void 0 : _a[0];
40
+ });
41
+ if (label === expected) {
42
+ pass = true;
43
+ }
44
+ const message = pass
45
+ ? () => this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
46
+ "\n\n" +
47
+ `Expected: ${this.isNot ? "not" : ""}${this.utils.printExpected(expected)}\n` +
48
+ `Received: ${this.utils.printReceived(label)}`
49
+ : () => this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
50
+ "\n\n" +
51
+ `Expected: ${this.utils.printExpected(expected)}\n` +
52
+ `Received: ${this.utils.printReceived(label)}`;
53
+ return {
54
+ message,
55
+ pass,
56
+ name: assertionName,
57
+ expected,
58
+ actual: undefined,
59
+ };
60
+ });
61
+ },
62
+ /**
63
+ * Compares two numbers with an optional tolerance value. If the tolerance is set to 0 the comparator acts as `toEqual`.
64
+ * Used to compare element dimensions on different platforms because of half pixel rendering.
65
+ *
66
+ * **Usage**
67
+ *
68
+ * ```js
69
+ * const value = 8;
70
+ * expect(value).toEqualWithTolerance(10, 2); // true
71
+ * ```
72
+ *
73
+ * @param expected Expected value
74
+ * @param tolerance Tolerance value, **default is 1**
75
+ */
76
+ toEqualWithTolerance(provided, expected, tolerance = 1) {
77
+ const assertionName = "toEqualWithTolerance";
78
+ let pass = false;
79
+ if (provided >= expected - (tolerance || 0) && provided <= expected + (tolerance || 0)) {
80
+ pass = true;
81
+ }
82
+ const message = pass
83
+ ? () => this.utils.matcherHint(assertionName, provided, expected, { isNot: this.isNot }) +
84
+ "\n\n" +
85
+ `Expected: ${this.isNot ? "not" : ""}${this.utils.printExpected(expected)}\n` +
86
+ `Received: ${this.utils.printReceived(provided)}`
87
+ : () => this.utils.matcherHint(assertionName, provided, expected, { isNot: this.isNot }) +
88
+ "\n\n" +
89
+ `Expected: ${this.utils.printExpected(expected)}\n` +
90
+ `Received: ${this.utils.printReceived(provided)}`;
91
+ return {
92
+ message,
93
+ pass,
94
+ name: assertionName,
95
+ expected,
96
+ actual: undefined,
97
+ };
98
+ },
99
+ // ---
100
+ // --- NOTE: Assertations below this line are experimental and are reserved for future test cases (ex. comparison tests)
101
+ // ---
102
+ /**
103
+ * Asserts whether a component has the correct CSS `border-color` styling.
104
+ *
105
+ * @param expected Expected CSS color
106
+ * @param border Border side(s), Default: **"all"**
107
+ *
108
+ * ---
109
+ * **Usage**
110
+ *
111
+ * ```js
112
+ * await initTestBed(`<Button label="hello" />`, {
113
+ * testThemeVars: { "borderLeftColor-Button": "rgb(0, 0, 0)" },
114
+ * });
115
+ * const driver = await createButtonDriver();
116
+ * await expect(driver.component).toHaveBorderColor("rgb(0, 0, 0)", "left");
117
+ * ```
118
+ */
119
+ toHaveBorderColor(locator_1, expected_1) {
120
+ return __awaiter(this, arguments, void 0, function* (locator, expected, border = "all") {
121
+ const assertionName = "toHaveBorder";
122
+ let expectedBorderColor;
123
+ try {
124
+ expectedBorderColor = (0, component_test_helpers_1.parseAsCSSColor)(expected);
125
+ if (Object.values(expectedBorderColor).length === 0) {
126
+ throw new Error("Empty color!");
127
+ }
128
+ }
129
+ catch (e) {
130
+ return {
131
+ message: () => "In " +
132
+ this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
133
+ ":\n" +
134
+ (e instanceof Error ? e.message : String(e)) +
135
+ "\n\n" +
136
+ `Expected: Correct CSS border color to expect (e.g. "red", "rgb(0, 0, 0)", "#AA0011")\n` +
137
+ `Received: ${this.utils.printReceived(expected)}`,
138
+ pass: false,
139
+ name: assertionName,
140
+ expected,
141
+ actual: undefined,
142
+ };
143
+ }
144
+ let _border = [];
145
+ if (typeof border === "string") {
146
+ if (border === "all") {
147
+ _border = ["top", "bottom", "left", "right"];
148
+ }
149
+ else {
150
+ _border = [border];
151
+ }
152
+ }
153
+ else {
154
+ _border = Array.from(new Set(border)).filter(component_test_helpers_1.isBorderSide);
155
+ }
156
+ let pass = true;
157
+ let matcherResult;
158
+ const colorStr = `rgb(${expectedBorderColor.rgb().join(", ")})`;
159
+ try {
160
+ for (let b of _border) {
161
+ yield (0, test_1.expect)(locator).toHaveCSS(`border-${b}-color`, colorStr);
162
+ }
163
+ }
164
+ catch (e) {
165
+ matcherResult = e.matcherResult;
166
+ pass = false;
167
+ }
168
+ const message = pass
169
+ ? () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
170
+ "\n\n" +
171
+ `Expected: not ${this.utils.printExpected(expected)}\n` +
172
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "")
173
+ : () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
174
+ "\n\n" +
175
+ `Expected: ${this.utils.printExpected(expected)}\n` +
176
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "");
177
+ return {
178
+ message,
179
+ pass,
180
+ name: assertionName,
181
+ expected,
182
+ actual: matcherResult === null || matcherResult === void 0 ? void 0 : matcherResult.actual,
183
+ };
184
+ });
185
+ },
186
+ /**
187
+ * Asserts whether a component has the correct CSS `border-width` styling.
188
+ *
189
+ * @param expected Expected CSS size
190
+ * @param border Border side(s), Default: **"all"**
191
+ *
192
+ * ---
193
+ * **Usage**
194
+ *
195
+ * ```js
196
+ * await initTestBed(`<Button label="hello" />`, {
197
+ * testThemeVars: { "borderLeftWidth-Button": "12px" },
198
+ * });
199
+ * const driver = await createButtonDriver();
200
+ * await expect(driver.component).toHaveBorderWidth("12px", "left");
201
+ * ```
202
+ */
203
+ toHaveBorderWidth(locator_1, expected_1) {
204
+ return __awaiter(this, arguments, void 0, function* (locator, expected, border = "all") {
205
+ const assertionName = "toHaveBorder";
206
+ let expectedBorderWidth;
207
+ try {
208
+ expectedBorderWidth = (0, component_test_helpers_1.parseAsNumericCss)(expected);
209
+ if (Object.values(expectedBorderWidth).length === 0) {
210
+ throw new Error("Empty width!");
211
+ }
212
+ }
213
+ catch (e) {
214
+ return {
215
+ message: () => "In " +
216
+ this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
217
+ ":\n" +
218
+ (e instanceof Error ? e.message : String(e)) +
219
+ "\n\n" +
220
+ `Expected: Correct CSS border width to expect (e.g. "1px", "2rem")\n` +
221
+ `Received: ${this.utils.printReceived(expected)}`,
222
+ pass: false,
223
+ name: assertionName,
224
+ expected,
225
+ actual: undefined,
226
+ };
227
+ }
228
+ let _border = [];
229
+ if (typeof border === "string") {
230
+ if (border === "all") {
231
+ _border = ["top", "bottom", "left", "right"];
232
+ }
233
+ else {
234
+ _border = [border];
235
+ }
236
+ }
237
+ else {
238
+ _border = Array.from(new Set(border)).filter(component_test_helpers_1.isBorderSide);
239
+ }
240
+ let pass = true;
241
+ let matcherResult;
242
+ const widthStr = (0, component_test_helpers_1.numericCSSToString)(expectedBorderWidth);
243
+ try {
244
+ for (let b of _border) {
245
+ yield (0, test_1.expect)(locator).toHaveCSS(`border-${b}-width`, widthStr);
246
+ }
247
+ }
248
+ catch (e) {
249
+ matcherResult = e.matcherResult;
250
+ pass = false;
251
+ }
252
+ const message = pass
253
+ ? () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
254
+ "\n\n" +
255
+ `Expected: not ${this.utils.printExpected(expected)}\n` +
256
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "")
257
+ : () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
258
+ "\n\n" +
259
+ `Expected: ${this.utils.printExpected(expected)}\n` +
260
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "");
261
+ return {
262
+ message,
263
+ pass,
264
+ name: assertionName,
265
+ expected,
266
+ actual: matcherResult === null || matcherResult === void 0 ? void 0 : matcherResult.actual,
267
+ };
268
+ });
269
+ },
270
+ /**
271
+ * Asserts whether a component has the correct CSS `border-style` styling.
272
+ *
273
+ * @param expected Expected CSS border style
274
+ * @param border Border side(s), default: **"all"**
275
+ *
276
+ * ---
277
+ * **Usage**
278
+ *
279
+ * ```js
280
+ * await initTestBed(`<Button label="hello" />`, {
281
+ * testThemeVars: { "borderLeftStyle-Button": "dotted" },
282
+ * });
283
+ * const driver = await createButtonDriver();
284
+ * await expect(driver.component).toHaveBorderStyle("dotted", "left");
285
+ * ```
286
+ */
287
+ toHaveBorderStyle(locator_1, expected_1) {
288
+ return __awaiter(this, arguments, void 0, function* (locator, expected, border = "all") {
289
+ const assertionName = "toHaveBorder";
290
+ let expectedBorderStyle;
291
+ try {
292
+ expectedBorderStyle = (0, component_test_helpers_1.parseAsCSSBorderStyle)(expected);
293
+ if (Object.values(expectedBorderStyle).length === 0) {
294
+ throw new Error("Empty border style!");
295
+ }
296
+ }
297
+ catch (e) {
298
+ return {
299
+ message: () => "In " +
300
+ this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
301
+ ":\n" +
302
+ (e instanceof Error ? e.message : String(e)) +
303
+ "\n\n" +
304
+ `Expected: Correct CSS border style to expect (e.g. "1px solid black")\n` +
305
+ `Received: ${this.utils.printReceived(expected)}`,
306
+ pass: false,
307
+ name: assertionName,
308
+ expected,
309
+ actual: undefined,
310
+ };
311
+ }
312
+ let _border = [];
313
+ if (typeof border === "string") {
314
+ if (border === "all") {
315
+ _border = ["top", "bottom", "left", "right"];
316
+ }
317
+ else {
318
+ _border = [border];
319
+ }
320
+ }
321
+ else {
322
+ _border = Array.from(new Set(border)).filter(component_test_helpers_1.isBorderSide);
323
+ }
324
+ let pass = true;
325
+ let matcherResult;
326
+ try {
327
+ for (let b of _border) {
328
+ yield (0, test_1.expect)(locator).toHaveCSS(`border-${b}-style`, expectedBorderStyle);
329
+ }
330
+ }
331
+ catch (e) {
332
+ matcherResult = e.matcherResult;
333
+ pass = false;
334
+ }
335
+ const message = pass
336
+ ? () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
337
+ "\n\n" +
338
+ `Expected: not ${this.utils.printExpected(expected)}\n` +
339
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "")
340
+ : () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
341
+ "\n\n" +
342
+ `Expected: ${this.utils.printExpected(expected)}\n` +
343
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "");
344
+ return {
345
+ message,
346
+ pass,
347
+ name: assertionName,
348
+ expected,
349
+ actual: matcherResult === null || matcherResult === void 0 ? void 0 : matcherResult.actual,
350
+ };
351
+ });
352
+ },
353
+ /**
354
+ * Asserts whether a component has the correct CSS `border` shorthand set:
355
+ * `color`, `width`, `style`.
356
+ *
357
+ * @param expected Expected string label
358
+ * @param border Border side(s), Default: **"all"**
359
+ *
360
+ * ---
361
+ * **Usage**
362
+ *
363
+ * ```js
364
+ * await initTestBed(`<Button label="hello" />`, {
365
+ * testThemeVars: { "borderLeft-Button": "1px solid black" },
366
+ * });
367
+ * const driver = await createButtonDriver();
368
+ * await expect(driver.component).toHaveBorder("1px solid black", "left");
369
+ * ```
370
+ */
371
+ toHaveBorder(locator_1, expected_1) {
372
+ return __awaiter(this, arguments, void 0, function* (locator, expected, border = "all") {
373
+ const assertionName = "toHaveBorder";
374
+ let expectedBorder;
375
+ try {
376
+ expectedBorder = (0, component_test_helpers_1.parseAsCssBorder)(expected);
377
+ if (Object.values(expectedBorder).length === 0) {
378
+ throw new Error("Empty style!");
379
+ }
380
+ }
381
+ catch (e) {
382
+ return {
383
+ message: () => "In " +
384
+ this.utils.matcherHint(assertionName, locator, expected, { isNot: this.isNot }) +
385
+ ":\n" +
386
+ (e instanceof Error ? e.message : String(e)) +
387
+ "\n\n" +
388
+ `Expected: Correct CSS border style to expect (e.g. "1px solid black")\n` +
389
+ `Received: ${this.utils.printReceived(expected)}`,
390
+ pass: false,
391
+ name: assertionName,
392
+ expected,
393
+ actual: undefined,
394
+ };
395
+ }
396
+ let _border = [];
397
+ if (typeof border === "string") {
398
+ if (border === "all") {
399
+ _border = ["top", "bottom", "left", "right"];
400
+ }
401
+ else {
402
+ _border = [border];
403
+ }
404
+ }
405
+ else {
406
+ _border = Array.from(new Set(border)).filter(component_test_helpers_1.isBorderSide);
407
+ }
408
+ let pass = true;
409
+ let matcherResult;
410
+ try {
411
+ if (expectedBorder === null || expectedBorder === void 0 ? void 0 : expectedBorder.color) {
412
+ const colorStr = `rgb(${expectedBorder.color.rgb().join(", ")})`;
413
+ yield (0, exports.expect)(locator).toHaveBorderColor(colorStr, _border);
414
+ }
415
+ if (expectedBorder === null || expectedBorder === void 0 ? void 0 : expectedBorder.width) {
416
+ yield (0, exports.expect)(locator).toHaveBorderWidth((0, component_test_helpers_1.numericCSSToString)(expectedBorder.width), _border);
417
+ }
418
+ if (expectedBorder === null || expectedBorder === void 0 ? void 0 : expectedBorder.style) {
419
+ yield (0, exports.expect)(locator).toHaveBorderStyle(expectedBorder.style, _border);
420
+ }
421
+ }
422
+ catch (e) {
423
+ matcherResult = e.matcherResult;
424
+ pass = false;
425
+ }
426
+ const message = pass
427
+ ? () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
428
+ "\n\n" +
429
+ `Expected: not ${this.utils.printExpected(expected)}\n` +
430
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "")
431
+ : () => this.utils.matcherHint(assertionName, undefined, undefined, { isNot: this.isNot }) +
432
+ "\n\n" +
433
+ `Expected: ${this.utils.printExpected(expected)}\n` +
434
+ (matcherResult ? `Received: ${this.utils.printReceived(matcherResult.actual)}` : "");
435
+ return {
436
+ message,
437
+ pass,
438
+ name: assertionName,
439
+ expected,
440
+ actual: matcherResult === null || matcherResult === void 0 ? void 0 : matcherResult.actual,
441
+ };
442
+ });
443
+ },
444
+ });