xmlui 0.10.13 → 0.10.14

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 (186) hide show
  1. package/dist/lib/{index-Db5iQkFp.mjs → index-779mp2Bm.mjs} +943 -736
  2. package/dist/lib/index.css +1 -1
  3. package/dist/lib/{initMock-B9LtmFJG.mjs → initMock-CAXdczCj.mjs} +1 -1
  4. package/dist/lib/xmlui.d.ts +16 -1
  5. package/dist/lib/xmlui.mjs +33 -32
  6. package/dist/metadata/{collectedComponentMetadata-BN8eg9Gr.mjs → collectedComponentMetadata-7DFXlw-J.mjs} +15057 -14865
  7. package/dist/metadata/{initMock-J7pN8owj.mjs → initMock-AFWEftc6.mjs} +1 -1
  8. package/dist/metadata/style.css +1 -1
  9. package/dist/metadata/xmlui-metadata.mjs +1 -1
  10. package/dist/metadata/xmlui-metadata.umd.js +3 -3
  11. package/dist/scripts/bin/build-lib.js +21 -13
  12. package/dist/scripts/bin/viteConfig.js +3 -1
  13. package/dist/scripts/package.json +1 -1
  14. package/dist/scripts/src/abstractions/scripting/Token.js +2 -0
  15. package/dist/scripts/src/abstractions/scripting/TryScope.js +2 -0
  16. package/dist/scripts/src/abstractions/scripting/modules.js +2 -0
  17. package/dist/scripts/src/components/APICall/APICall.spec.js +910 -0
  18. package/dist/scripts/src/components/Accordion/Accordion.spec.js +969 -0
  19. package/dist/scripts/src/components/Animation/Animation.js +50 -0
  20. package/dist/scripts/src/components/App/App.spec.js +219 -0
  21. package/dist/scripts/src/components/AppHeader/AppHeader.spec.js +169 -0
  22. package/dist/scripts/src/components/AppState/AppState.spec.js +268 -0
  23. package/dist/scripts/src/components/AutoComplete/AutoComplete.spec.js +383 -0
  24. package/dist/scripts/src/components/Avatar/Avatar.spec.js +1543 -0
  25. package/dist/scripts/src/components/Backdrop/Backdrop.spec.js +131 -0
  26. package/dist/scripts/src/components/Badge/Badge.spec.js +2214 -0
  27. package/dist/scripts/src/components/Bookmark/Bookmark.spec.js +230 -0
  28. package/dist/scripts/src/components/Breakout/Breakout.spec.js +56 -0
  29. package/dist/scripts/src/components/Button/Button-style.spec.js +274 -0
  30. package/dist/scripts/src/components/Button/Button.spec.js +454 -0
  31. package/dist/scripts/src/components/Card/Card.spec.js +150 -0
  32. package/dist/scripts/src/components/Carousel/Carousel.spec.js +343 -0
  33. package/dist/scripts/src/components/Carousel/CarouselNative.js +2 -2
  34. package/dist/scripts/src/components/ChangeListener/ChangeListener.spec.js +169 -0
  35. package/dist/scripts/src/components/Charts/AreaChart/AreaChart.spec.js +999 -0
  36. package/dist/scripts/src/components/Charts/BarChart/BarChart.spec.js +597 -0
  37. package/dist/scripts/src/components/Charts/DonutChart/DonutChart.spec.js +608 -0
  38. package/dist/scripts/src/components/Charts/LabelList/LabelList.spec.js +539 -0
  39. package/dist/scripts/src/components/Charts/Legend/Legend.spec.js +558 -0
  40. package/dist/scripts/src/components/Charts/LineChart/LineChart.spec.js +450 -0
  41. package/dist/scripts/src/components/Charts/PieChart/PieChart.spec.js +584 -0
  42. package/dist/scripts/src/components/Charts/RadarChart/RadarChart.spec.js +571 -0
  43. package/dist/scripts/src/components/Charts/Tooltip/TooltipContent.spec.js +449 -0
  44. package/dist/scripts/src/components/Checkbox/Checkbox.spec.js +964 -0
  45. package/dist/scripts/src/components/CodeBlock/CodeBlock.spec.js +196 -0
  46. package/dist/scripts/src/components/ColorPicker/ColorPicker.spec.js +283 -0
  47. package/dist/scripts/src/components/ColorPicker/ColorPickerNative.js +9 -26
  48. package/dist/scripts/src/components/Column/doc-resources/list-component-data.js +53 -0
  49. package/dist/scripts/src/components/ComponentProvider.js +6 -2
  50. package/dist/scripts/src/components/ContentSeparator/ContentSeparator.spec.js +338 -0
  51. package/dist/scripts/src/components/DateInput/DateInput.spec.js +918 -0
  52. package/dist/scripts/src/components/DatePicker/DatePicker.spec.js +362 -0
  53. package/dist/scripts/src/components/DatePicker/DatePickerNative.js +3 -3
  54. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.spec.js +331 -0
  55. package/dist/scripts/src/components/EmojiSelector/EmojiSelector.spec.js +29 -0
  56. package/dist/scripts/src/components/ExpandableItem/ExpandableItem.spec.js +435 -0
  57. package/dist/scripts/src/components/FileInput/FileInput.spec.js +249 -0
  58. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.spec.js +296 -0
  59. package/dist/scripts/src/components/FlowLayout/FlowLayout.spec.js +518 -0
  60. package/dist/scripts/src/components/Footer/Footer.spec.js +991 -0
  61. package/dist/scripts/src/components/Form/Form.spec.js +1257 -0
  62. package/dist/scripts/src/components/FormItem/FormItem.spec.js +723 -0
  63. package/dist/scripts/src/components/FormSection/FormSection.js +6 -31
  64. package/dist/scripts/src/components/Fragment/Fragment.spec.js +50 -0
  65. package/dist/scripts/src/components/Heading/H1.spec.js +66 -0
  66. package/dist/scripts/src/components/Heading/H2.spec.js +66 -0
  67. package/dist/scripts/src/components/Heading/H3.spec.js +66 -0
  68. package/dist/scripts/src/components/Heading/H4.spec.js +66 -0
  69. package/dist/scripts/src/components/Heading/H5.spec.js +66 -0
  70. package/dist/scripts/src/components/Heading/H6.spec.js +66 -0
  71. package/dist/scripts/src/components/Heading/Heading.spec.js +897 -0
  72. package/dist/scripts/src/components/HtmlTags/HtmlTags.spec.js +69 -0
  73. package/dist/scripts/src/components/IFrame/IFrame.spec.js +527 -0
  74. package/dist/scripts/src/components/Icon/ArrowDropDown.js +11 -0
  75. package/dist/scripts/src/components/Icon/ArrowDropUp.js +11 -0
  76. package/dist/scripts/src/components/Icon/ArrowLeft.js +11 -0
  77. package/dist/scripts/src/components/Icon/ArrowRight.js +11 -0
  78. package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
  79. package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
  80. package/dist/scripts/src/components/Icon/Icon.spec.js +527 -0
  81. package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
  82. package/dist/scripts/src/components/Image/Image.js +2 -1
  83. package/dist/scripts/src/components/Image/Image.spec.js +198 -0
  84. package/dist/scripts/src/components/Image/ImageNative.js +30 -2
  85. package/dist/scripts/src/components/Input/InputLabel.js +25 -0
  86. package/dist/scripts/src/components/Input/index.js +5 -0
  87. package/dist/scripts/src/components/Items/Items.spec.js +397 -0
  88. package/dist/scripts/src/components/Link/Link.spec.js +894 -0
  89. package/dist/scripts/src/components/List/List.spec.js +927 -0
  90. package/dist/scripts/src/components/List/doc-resources/list-component-data.js +53 -0
  91. package/dist/scripts/src/components/Markdown/Markdown.spec.js +188 -0
  92. package/dist/scripts/src/components/ModalDialog/ModalDialog.spec.js +162 -0
  93. package/dist/scripts/src/components/NavGroup/NavGroup.spec.js +153 -0
  94. package/dist/scripts/src/components/NavGroup/NavGroupNative.js +2 -2
  95. package/dist/scripts/src/components/NavLink/NavLink.spec.js +864 -0
  96. package/dist/scripts/src/components/NavPanel/NavPanel.spec.js +864 -0
  97. package/dist/scripts/src/components/NoResult/NoResult.spec.js +863 -0
  98. package/dist/scripts/src/components/NumberBox/NumberBox.spec.js +1231 -0
  99. package/dist/scripts/src/components/Option/Option.spec.js +472 -0
  100. package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.spec.js +80 -0
  101. package/dist/scripts/src/components/Pagination/Pagination.spec.js +1003 -0
  102. package/dist/scripts/src/components/ProfileMenu/ProfileMenu.js +20 -0
  103. package/dist/scripts/src/components/ProgressBar/ProgressBar.spec.js +166 -0
  104. package/dist/scripts/src/components/Queue/Queue.spec.js +626 -0
  105. package/dist/scripts/src/components/RadioGroup/RadioGroup.spec.js +479 -0
  106. package/dist/scripts/src/components/Redirect/Redirect.spec.js +527 -0
  107. package/dist/scripts/src/components/ResponsiveBar/ResponsiveBar.spec.js +76 -0
  108. package/dist/scripts/src/components/Select/Select.spec.js +527 -0
  109. package/dist/scripts/src/components/Slider/Slider.js +2 -0
  110. package/dist/scripts/src/components/Slider/Slider.spec.js +574 -0
  111. package/dist/scripts/src/components/Slider/SliderNative.js +62 -25
  112. package/dist/scripts/src/components/Slot/Slot.spec.js +368 -0
  113. package/dist/scripts/src/components/SpaceFiller/SpaceFiller.spec.js +184 -0
  114. package/dist/scripts/src/components/Spinner/Spinner.spec.js +161 -0
  115. package/dist/scripts/src/components/Splitter/HSplitter.spec.js +104 -0
  116. package/dist/scripts/src/components/Splitter/Splitter.spec.js +543 -0
  117. package/dist/scripts/src/components/Splitter/VSplitter.spec.js +104 -0
  118. package/dist/scripts/src/components/Stack/CHStack.spec.js +86 -0
  119. package/dist/scripts/src/components/Stack/CVStack.spec.js +86 -0
  120. package/dist/scripts/src/components/Stack/HStack.spec.js +67 -0
  121. package/dist/scripts/src/components/Stack/Stack.spec.js +654 -0
  122. package/dist/scripts/src/components/Stack/VStack.spec.js +67 -0
  123. package/dist/scripts/src/components/Switch/Switch.spec.js +829 -0
  124. package/dist/scripts/src/components/Table/Table.spec.js +555 -0
  125. package/dist/scripts/src/components/Table/doc-resources/list-component-data.js +53 -0
  126. package/dist/scripts/src/components/TableOfContents/TableOfContents.spec.js +838 -0
  127. package/dist/scripts/src/components/Tabs/Tabs.spec.js +875 -0
  128. package/dist/scripts/src/components/Text/Text.spec.js +1075 -0
  129. package/dist/scripts/src/components/TextArea/TextArea.spec.js +714 -0
  130. package/dist/scripts/src/components/TextBox/TextBox.spec.js +643 -0
  131. package/dist/scripts/src/components/Theme/Theme.spec.js +124 -0
  132. package/dist/scripts/src/components/TimeInput/TimeInput.spec.js +1122 -0
  133. package/dist/scripts/src/components/Timer/Timer.spec.js +358 -0
  134. package/dist/scripts/src/components/ToneChangerButton/ToneChangerButton.spec.js +414 -0
  135. package/dist/scripts/src/components/ToneSwitch/ToneSwitch.spec.js +89 -0
  136. package/dist/scripts/src/components/Tooltip/Tooltip.spec.js +418 -0
  137. package/dist/scripts/src/components/chart-color-schemes.js +43 -0
  138. package/dist/scripts/src/components-core/CompoundComponent.js +1 -1
  139. package/dist/scripts/src/components-core/RestApiProxy.js +85 -8
  140. package/dist/scripts/src/components-core/devtools/InspectorDialogVisibilityContext.js +8 -0
  141. package/dist/scripts/src/components-core/renderers.js +31 -0
  142. package/dist/scripts/src/components-core/script-runner/simplify-expression.js +386 -0
  143. package/dist/scripts/src/components-core/theming/component-layout-resolver.js +153 -0
  144. package/dist/scripts/src/components-core/theming/parse-layout-props.js +98 -0
  145. package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
  146. package/dist/scripts/src/components-core/utils/audio-utils.js +83 -0
  147. package/dist/scripts/src/index-standalone.js +61 -0
  148. package/dist/scripts/src/index.js +2 -1
  149. package/dist/scripts/src/language-server/server-common.js +151 -0
  150. package/dist/scripts/src/language-server/server-web-worker.js +47 -0
  151. package/dist/scripts/src/language-server/server.js +42 -0
  152. package/dist/scripts/src/language-server/services/common/docs-generation.js +73 -0
  153. package/dist/scripts/src/language-server/services/common/lsp-utils.js +9 -0
  154. package/dist/scripts/src/language-server/services/common/syntax-node-utilities.js +135 -0
  155. package/dist/scripts/src/language-server/services/completion.js +270 -0
  156. package/dist/scripts/src/language-server/services/diagnostic.js +19 -0
  157. package/dist/scripts/src/language-server/services/format.js +430 -0
  158. package/dist/scripts/src/language-server/services/hover.js +164 -0
  159. package/dist/scripts/src/language-server/xmlui-metadata-generated.mjs +16266 -0
  160. package/dist/scripts/src/logging/xmlui.js +21 -0
  161. package/dist/scripts/src/parsers/common/utils.js +19 -0
  162. package/dist/scripts/src/syntax/monaco/grammar.monacoLanguage.js +286 -0
  163. package/dist/scripts/src/syntax/monaco/index.js +14 -0
  164. package/dist/scripts/src/syntax/monaco/xmlui-dark.js +25 -0
  165. package/dist/scripts/src/syntax/monaco/xmlui-light.js +25 -0
  166. package/dist/scripts/src/syntax/monaco/xmluiscript.monacoLanguage.js +310 -0
  167. package/dist/scripts/src/syntax/textMate/index.js +14 -0
  168. package/dist/scripts/src/syntax/textMate/xmlui-dark.json +631 -0
  169. package/dist/scripts/src/syntax/textMate/xmlui-light.json +565 -0
  170. package/dist/scripts/src/syntax/textMate/xmlui.json +564 -0
  171. package/dist/scripts/src/syntax/textMate/xmlui.tmLanguage.json +341 -0
  172. package/dist/scripts/src/testing/ComponentDrivers.js +1355 -0
  173. package/dist/scripts/src/testing/assertions.js +444 -0
  174. package/dist/scripts/src/testing/component-test-helpers.js +389 -0
  175. package/dist/scripts/src/testing/drivers/DateInputDriver.js +19 -0
  176. package/dist/scripts/src/testing/drivers/ModalDialogDriver.js +10 -0
  177. package/dist/scripts/src/testing/drivers/TimeInputDriver.js +22 -0
  178. package/dist/scripts/src/testing/drivers/TimerDriver.js +64 -0
  179. package/dist/scripts/src/testing/fixtures.js +487 -0
  180. package/dist/scripts/src/testing/infrastructure/TestBed.js +17 -0
  181. package/dist/scripts/src/testing/infrastructure/main.js +9 -0
  182. package/dist/scripts/src/testing/infrastructure/public/mockServiceWorker.js +266 -0
  183. package/dist/scripts/src/testing/themed-app-test-helpers.js +139 -0
  184. package/dist/standalone/xmlui-standalone.es.d.ts +18 -1
  185. package/dist/standalone/xmlui-standalone.umd.js +36 -36
  186. package/package.json +1 -1
@@ -0,0 +1,389 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.BorderSideValues = exports.SKIP_REASON = void 0;
16
+ exports.mapObject = mapObject;
17
+ exports.getComponentTagName = getComponentTagName;
18
+ exports.parseComponentIfNecessary = parseComponentIfNecessary;
19
+ exports.scaleByPercent = scaleByPercent;
20
+ exports.getBoundingRect = getBoundingRect;
21
+ exports.getElementStyle = getElementStyle;
22
+ exports.getElementStyles = getElementStyles;
23
+ exports.isIndeterminate = isIndeterminate;
24
+ exports.overflows = overflows;
25
+ exports.getStyles = getStyles;
26
+ exports.getPseudoStyles = getPseudoStyles;
27
+ exports.getHtmlAttributes = getHtmlAttributes;
28
+ exports.getPaddings = getPaddings;
29
+ exports.getBorders = getBorders;
30
+ exports.getMargins = getMargins;
31
+ exports.getBounds = getBounds;
32
+ exports.pixelStrToNum = pixelStrToNum;
33
+ exports.parseAsCssBorder = parseAsCssBorder;
34
+ exports.isNumericCSS = isNumericCSS;
35
+ exports.parseAsNumericCss = parseAsNumericCss;
36
+ exports.numericCSSToString = numericCSSToString;
37
+ exports.isCSSColor = isCSSColor;
38
+ exports.parseAsCSSColor = parseAsCSSColor;
39
+ exports.isCSSBorderStyle = isCSSBorderStyle;
40
+ exports.parseAsCSSBorderStyle = parseAsCSSBorderStyle;
41
+ exports.isBorderSide = isBorderSide;
42
+ const xmlui_parser_1 = require("../components-core/xmlui-parser");
43
+ const chroma_js_1 = __importDefault(require("chroma-js"));
44
+ const ComponentDrivers_1 = require("./ComponentDrivers");
45
+ function mapObject(obj, valFn = ((val) => val), keyFn = ((val) => val)) {
46
+ const newObject = {};
47
+ Object.entries(obj).forEach(([key, value]) => {
48
+ newObject[keyFn(key)] = valFn(value);
49
+ });
50
+ return newObject;
51
+ }
52
+ function getComponentTagName(locator) {
53
+ return __awaiter(this, void 0, void 0, function* () {
54
+ return locator.evaluate((el) => el.tagName.toLowerCase());
55
+ });
56
+ }
57
+ function parseComponentIfNecessary(rawComponent) {
58
+ if (typeof rawComponent === "string") {
59
+ return (0, xmlui_parser_1.xmlUiMarkupToComponent)(rawComponent);
60
+ }
61
+ return {
62
+ component: rawComponent,
63
+ errors: [],
64
+ erroneousCompoundComponentName: undefined,
65
+ };
66
+ }
67
+ /**
68
+ * Scales a value by a percentage, using NumericCSS for parsing and clarity.
69
+ * @param scalarOf100Percent The value representing 100%.
70
+ * @param percentage A percentage string in the format "NN%", e.g., "40%". Must end with '%'.
71
+ * @returns The scaled value.
72
+ */
73
+ function scaleByPercent(scalarOf100Percent, percentage) {
74
+ const parsed = parseAsNumericCss(percentage);
75
+ if (parsed.unit !== "%") {
76
+ throw new Error(`Expected percentage unit (%), got: ${parsed.unit}`);
77
+ }
78
+ return (scalarOf100Percent / 100) * parsed.value;
79
+ }
80
+ function getBoundingRect(locator) {
81
+ return __awaiter(this, void 0, void 0, function* () {
82
+ return locator.evaluate((element) => element.getBoundingClientRect());
83
+ });
84
+ }
85
+ function getElementStyle(specifier, style) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ return specifier.evaluate((element, style) => window.getComputedStyle(element).getPropertyValue(style), style);
88
+ });
89
+ }
90
+ /**
91
+ * Retreives all the provided style properties from the locator
92
+ * @returns an object with the keys being the elements of the styles argument
93
+ */
94
+ function getElementStyles(locator_1) {
95
+ return __awaiter(this, arguments, void 0, function* (locator, styles = []) {
96
+ return locator.evaluate((element, styles) => Object.fromEntries(styles.map((styleName) => [
97
+ styleName,
98
+ window.getComputedStyle(element).getPropertyValue(styleName),
99
+ ])), styles);
100
+ });
101
+ }
102
+ function isIndeterminate(specifier) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ if (specifier instanceof ComponentDrivers_1.ComponentDriver)
105
+ specifier = specifier.component;
106
+ return specifier.evaluate((el) => el.indeterminate);
107
+ });
108
+ }
109
+ function overflows(locator_1) {
110
+ return __awaiter(this, arguments, void 0, function* (locator, direction = "both") {
111
+ const [width, height, scrollWidth, scrollHeight] = yield locator.evaluate((element) => [
112
+ element.clientWidth,
113
+ element.clientHeight,
114
+ element.scrollWidth,
115
+ element.scrollHeight,
116
+ ]);
117
+ if (direction === "x")
118
+ return scrollWidth > width;
119
+ if (direction === "y")
120
+ return scrollHeight > height;
121
+ return scrollWidth > width && scrollHeight > height;
122
+ });
123
+ }
124
+ // ----------------------------------
125
+ // ComponentDriver style helpers
126
+ // ----------------------------------
127
+ function getStyles(specifier, style) {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ if (specifier instanceof ComponentDrivers_1.ComponentDriver)
130
+ specifier = specifier.component;
131
+ style = Array.isArray(style) ? style : [style];
132
+ return specifier.evaluate((element, styles) => Object.fromEntries(styles.map((styleName) => [
133
+ styleName
134
+ .trim()
135
+ .split("-")
136
+ .map((n, idx) => (idx === 0 ? n : n[0].toUpperCase() + n.slice(1)))
137
+ .join(""),
138
+ window.getComputedStyle(element).getPropertyValue(styleName),
139
+ ])), style);
140
+ });
141
+ }
142
+ function getPseudoStyles(specifier, pseudoElement, style) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ if (specifier instanceof ComponentDrivers_1.ComponentDriver)
145
+ specifier = specifier.component;
146
+ style = Array.isArray(style) ? style : [style];
147
+ return specifier.evaluate((element, obj) => Object.fromEntries(obj.style.map((styleName) => [
148
+ styleName
149
+ .trim()
150
+ .split("-")
151
+ .map((n, idx) => (idx === 0 ? n : n[0].toUpperCase() + n.slice(1)))
152
+ .join(""),
153
+ window.getComputedStyle(element, obj.pseudoElement).getPropertyValue(styleName),
154
+ ])), { style, pseudoElement });
155
+ });
156
+ }
157
+ function getHtmlAttributes(specifier, attributes) {
158
+ return __awaiter(this, void 0, void 0, function* () {
159
+ if (specifier instanceof ComponentDrivers_1.ComponentDriver)
160
+ specifier = specifier.component;
161
+ attributes = Array.isArray(attributes) ? attributes : [attributes];
162
+ const mapped = yield Promise.all(attributes.map((attr) => __awaiter(this, void 0, void 0, function* () {
163
+ return [attr, yield specifier.getAttribute(attr)];
164
+ })));
165
+ return Object.fromEntries(mapped);
166
+ });
167
+ }
168
+ function getPaddings(specifier) {
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ const paddings = mapObject(yield getStyles(specifier, ["padding-left", "padding-right", "padding-top", "padding-bottom"]), parseAsNumericCss);
171
+ return {
172
+ left: paddings.paddingLeft,
173
+ right: paddings.paddingRight,
174
+ top: paddings.paddingTop,
175
+ bottom: paddings.paddingBottom,
176
+ };
177
+ });
178
+ }
179
+ function getBorders(specifier) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ const borders = mapObject(yield getStyles(specifier, ["border-left", "border-right", "border-top", "border-bottom"]), parseAsCssBorder);
182
+ return {
183
+ left: borders.borderLeft,
184
+ right: borders.borderRight,
185
+ top: borders.borderTop,
186
+ bottom: borders.borderBottom,
187
+ };
188
+ });
189
+ }
190
+ function getMargins(specifier) {
191
+ return __awaiter(this, void 0, void 0, function* () {
192
+ return getStyles(specifier, ["margin-left", "margin-right", "margin-top", "margin-bottom"]);
193
+ });
194
+ }
195
+ /**
196
+ * Retrieves the bounding rectangle of the component including **margins** and **padding**
197
+ * added to the dimensions.
198
+ */
199
+ function getBounds(specifier) {
200
+ return __awaiter(this, void 0, void 0, function* () {
201
+ if (specifier instanceof ComponentDrivers_1.ComponentDriver)
202
+ specifier = specifier.component;
203
+ const boundingRect = yield specifier.evaluate((element) => element.getBoundingClientRect());
204
+ const m = mapObject(yield getMargins(specifier), parseFloat);
205
+ const width = boundingRect.width + m.marginLeft + m.marginRight;
206
+ const height = boundingRect.height + m.marginTop + m.marginBottom;
207
+ const left = boundingRect.left - m.marginLeft;
208
+ const right = boundingRect.right + m.marginRight;
209
+ const top = boundingRect.top - m.marginTop;
210
+ const bottom = boundingRect.bottom + m.marginBottom;
211
+ return {
212
+ width,
213
+ height,
214
+ left,
215
+ right,
216
+ top,
217
+ bottom,
218
+ };
219
+ });
220
+ }
221
+ /**
222
+ * Provides annotations for skipped tests and the ability to specify a reason.
223
+ * Use it via the SKIP_REASON exported variable.
224
+ */
225
+ class TestSkipReason {
226
+ addAnnotation(type, description) {
227
+ return {
228
+ annotation: {
229
+ type,
230
+ description: description !== null && description !== void 0 ? description : "",
231
+ },
232
+ };
233
+ }
234
+ NOT_IMPLEMENTED_XMLUI(description) {
235
+ return this.addAnnotation("not implemented in xmlui", description);
236
+ }
237
+ TO_BE_IMPLEMENTED(description) {
238
+ return this.addAnnotation("to be implemented", description);
239
+ }
240
+ XMLUI_BUG(description) {
241
+ return this.addAnnotation("xmlui bug", description);
242
+ }
243
+ TEST_INFRA_BUG(description) {
244
+ return this.addAnnotation("test infra bug", description);
245
+ }
246
+ TEST_NOT_WORKING(description) {
247
+ return this.addAnnotation("test not working", description);
248
+ }
249
+ TEST_INFRA_NOT_IMPLEMENTED(description) {
250
+ return this.addAnnotation("test infra not implemented", description);
251
+ }
252
+ REFACTOR(description) {
253
+ return this.addAnnotation("refactor", description);
254
+ }
255
+ // Need to specify a reason here!
256
+ UNSURE(description) {
257
+ return this.addAnnotation("unsure", description);
258
+ }
259
+ }
260
+ /**
261
+ * Provides annotations for skipped tests and the ability to specify a reason.
262
+ *
263
+ * Usage:
264
+ *
265
+ * ```ts
266
+ * import { SKIP_REASON } from "./tests/component-test-helpers";
267
+ *
268
+ * test.skip(
269
+ * "test name",
270
+ * SKIP_REASON.NOT_IMPLEMENTED_XMLUI("This test is not implemented in xmlui")
271
+ * async ({}) => {},
272
+ * );
273
+ * ```
274
+ */
275
+ exports.SKIP_REASON = new TestSkipReason();
276
+ // --- CSS types and parsers
277
+ function pixelStrToNum(pixelStr) {
278
+ return Number(pixelStr.replace("px", ""));
279
+ }
280
+ function parseAsCssBorder(str) {
281
+ const parts = str.split(/\s+(?=[a-z]+|\()/i);
282
+ if (parts.length > 3) {
283
+ throw new Error(`Provided value ${str} cannot be parsed as a CSS border`);
284
+ }
285
+ const style = parts.filter(isCSSBorderStyle);
286
+ if (style.length > 1) {
287
+ throw new Error(`Too many border styles provided in ${str}`);
288
+ }
289
+ const width = parts.filter(isNumericCSS);
290
+ if (width.length > 1) {
291
+ throw new Error(`Too many border widths provided in ${str}`);
292
+ }
293
+ const color = parts.filter((p) => chroma_js_1.default.valid(p));
294
+ if (color.length > 1) {
295
+ throw new Error(`Too many border colors provided in ${str}`);
296
+ }
297
+ const result = {
298
+ width: !!width[0] ? parseAsNumericCss(width[0]) : undefined,
299
+ style: style[0],
300
+ color: (0, chroma_js_1.default)(color[0]),
301
+ };
302
+ return result;
303
+ }
304
+ const numericCSSRegex = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;
305
+ function isNumericCSS(str) {
306
+ const parts = str.match(numericCSSRegex);
307
+ if (!parts)
308
+ return false;
309
+ if (parts.length < 3)
310
+ return false;
311
+ if (isNaN(parseFloat(parts[1])))
312
+ return false;
313
+ if (!isCSSUnit(parts[2]))
314
+ return false;
315
+ return true;
316
+ }
317
+ function parseAsNumericCss(str) {
318
+ const parts = str.match(numericCSSRegex);
319
+ if (!parts) {
320
+ throw new Error(`Provided value ${str} cannot be parsed as a numeric CSS value`);
321
+ }
322
+ if (parts.length < 3) {
323
+ throw new Error(`${parts[0]} is not a correct numeric CSS value`);
324
+ }
325
+ const value = parseFloat(parts[1]);
326
+ if (isNaN(value)) {
327
+ throw new Error(`${value} is not a valid number in ${str}`);
328
+ }
329
+ const unit = parts[2];
330
+ if (!isCSSUnit(unit)) {
331
+ throw new Error(`${unit} is not have a valid CSS unit in ${str}`);
332
+ }
333
+ const result = { value, unit };
334
+ return result;
335
+ }
336
+ function numericCSSToString(cssValue) {
337
+ return `${cssValue.value}${cssValue.unit}`;
338
+ }
339
+ function isCSSColor(str) {
340
+ return chroma_js_1.default.valid(str);
341
+ }
342
+ function parseAsCSSColor(str) {
343
+ return (0, chroma_js_1.default)(str);
344
+ }
345
+ const CSSUnitValues = [
346
+ "px",
347
+ "em",
348
+ "rem",
349
+ "vh",
350
+ "vw",
351
+ "%",
352
+ "cm",
353
+ "mm",
354
+ "in",
355
+ "pt",
356
+ "pc",
357
+ "ex",
358
+ "ch",
359
+ "vmin",
360
+ "vmax",
361
+ ];
362
+ function isCSSUnit(str) {
363
+ return CSSUnitValues.includes(str);
364
+ }
365
+ const CSSBorderStyleValues = [
366
+ "solid",
367
+ "dotted",
368
+ "dashed",
369
+ "double",
370
+ "none",
371
+ "hidden",
372
+ "groove",
373
+ "ridge",
374
+ "inset",
375
+ "outset",
376
+ ];
377
+ function isCSSBorderStyle(str) {
378
+ return CSSBorderStyleValues.includes(str);
379
+ }
380
+ function parseAsCSSBorderStyle(str) {
381
+ if (!isCSSBorderStyle(str)) {
382
+ throw new Error(`Provided value ${str} cannot be parsed as a CSS border style`);
383
+ }
384
+ return str;
385
+ }
386
+ exports.BorderSideValues = ["top", "bottom", "left", "right"];
387
+ function isBorderSide(str) {
388
+ return exports.BorderSideValues.includes(str);
389
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DateInputDriver = void 0;
4
+ const ComponentDrivers_1 = require("../ComponentDrivers");
5
+ class DateInputDriver extends ComponentDrivers_1.InputComponentDriver {
6
+ get dayInput() {
7
+ return this.getByPartName("day");
8
+ }
9
+ get monthInput() {
10
+ return this.getByPartName("month");
11
+ }
12
+ get yearInput() {
13
+ return this.getByPartName("year");
14
+ }
15
+ get clearButton() {
16
+ return this.getByPartName("clearButton");
17
+ }
18
+ }
19
+ exports.DateInputDriver = DateInputDriver;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModalDialogDriver = void 0;
4
+ const ComponentDrivers_1 = require("../ComponentDrivers");
5
+ class ModalDialogDriver extends ComponentDrivers_1.ComponentDriver {
6
+ get titlePart() {
7
+ return this.getByPartName("title");
8
+ }
9
+ }
10
+ exports.ModalDialogDriver = ModalDialogDriver;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TimeInputDriver = void 0;
4
+ const ComponentDrivers_1 = require("../ComponentDrivers");
5
+ class TimeInputDriver extends ComponentDrivers_1.InputComponentDriver {
6
+ get hourInput() {
7
+ return this.getByPartName("hour");
8
+ }
9
+ get minuteInput() {
10
+ return this.getByPartName("minute");
11
+ }
12
+ get secondInput() {
13
+ return this.getByPartName("second");
14
+ }
15
+ get amPmInput() {
16
+ return this.getByPartName("ampm");
17
+ }
18
+ get clearButton() {
19
+ return this.getByPartName("clearButton");
20
+ }
21
+ }
22
+ exports.TimeInputDriver = TimeInputDriver;
@@ -0,0 +1,64 @@
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.TimerDriver = void 0;
13
+ const ComponentDrivers_1 = require("../ComponentDrivers");
14
+ class TimerDriver extends ComponentDrivers_1.ComponentDriver {
15
+ isEnabled() {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ const enabled = yield this.component.getAttribute("data-timer-enabled");
18
+ return enabled === "true";
19
+ });
20
+ }
21
+ isRunning() {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const running = yield this.component.getAttribute("data-timer-running");
24
+ return running === "true";
25
+ });
26
+ }
27
+ isPaused() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const paused = yield this.component.getAttribute("data-timer-paused");
30
+ return paused === "true";
31
+ });
32
+ }
33
+ isInInitialDelay() {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const inDelay = yield this.component.getAttribute("data-timer-in-initial-delay");
36
+ return inDelay === "true";
37
+ });
38
+ }
39
+ getInterval() {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const interval = yield this.component.getAttribute("data-timer-interval");
42
+ return parseInt(interval || "0", 10);
43
+ });
44
+ }
45
+ getInitialDelay() {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const delay = yield this.component.getAttribute("data-timer-initial-delay");
48
+ return parseInt(delay || "0", 10);
49
+ });
50
+ }
51
+ isOnce() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const once = yield this.component.getAttribute("data-timer-once");
54
+ return once === "true";
55
+ });
56
+ }
57
+ hasExecuted() {
58
+ return __awaiter(this, void 0, void 0, function* () {
59
+ const executed = yield this.component.getAttribute("data-timer-has-executed");
60
+ return executed === "true";
61
+ });
62
+ }
63
+ }
64
+ exports.TimerDriver = TimerDriver;