@grafana/plugin-e2e 3.9.2 → 3.11.0

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 (59) hide show
  1. package/dist/_virtual/index.js +7 -0
  2. package/dist/_virtual/re.js +5 -0
  3. package/dist/fixtures/page.js +6 -0
  4. package/dist/index.d.ts +69 -49
  5. package/dist/index.js +12 -0
  6. package/dist/models/Components.js +18 -0
  7. package/dist/models/components/ColorPicker.js +13 -4
  8. package/dist/models/components/MultiSelect.js +12 -0
  9. package/dist/models/components/RadioGroup.js +14 -0
  10. package/dist/models/components/Select.js +11 -0
  11. package/dist/models/components/Switch.js +14 -0
  12. package/dist/models/components/UnitPicker.js +12 -0
  13. package/dist/node_modules/semver/classes/comparator.js +161 -0
  14. package/dist/node_modules/semver/classes/range.js +596 -0
  15. package/dist/node_modules/semver/classes/semver.js +367 -0
  16. package/dist/node_modules/semver/functions/clean.js +21 -0
  17. package/dist/node_modules/semver/functions/cmp.js +72 -0
  18. package/dist/node_modules/semver/functions/coerce.js +77 -0
  19. package/dist/node_modules/semver/functions/compare-build.js +22 -0
  20. package/dist/node_modules/semver/functions/compare-loose.js +18 -0
  21. package/dist/node_modules/semver/functions/compare.js +20 -0
  22. package/dist/node_modules/semver/functions/diff.js +73 -0
  23. package/dist/node_modules/semver/functions/eq.js +18 -0
  24. package/dist/node_modules/semver/functions/gt.js +18 -0
  25. package/dist/node_modules/semver/functions/gte.js +18 -0
  26. package/dist/node_modules/semver/functions/inc.js +34 -0
  27. package/dist/node_modules/semver/functions/lt.js +18 -0
  28. package/dist/node_modules/semver/functions/lte.js +18 -0
  29. package/dist/node_modules/semver/functions/major.js +18 -0
  30. package/dist/node_modules/semver/functions/minor.js +18 -0
  31. package/dist/node_modules/semver/functions/neq.js +18 -0
  32. package/dist/node_modules/semver/functions/parse.js +31 -0
  33. package/dist/node_modules/semver/functions/patch.js +18 -0
  34. package/dist/node_modules/semver/functions/prerelease.js +21 -0
  35. package/dist/node_modules/semver/functions/rcompare.js +18 -0
  36. package/dist/node_modules/semver/functions/rsort.js +18 -0
  37. package/dist/node_modules/semver/functions/satisfies.js +25 -0
  38. package/dist/node_modules/semver/functions/sort.js +18 -0
  39. package/dist/node_modules/semver/functions/truncate.js +63 -0
  40. package/dist/node_modules/semver/functions/valid.js +21 -0
  41. package/dist/node_modules/semver/index.js +147 -0
  42. package/dist/node_modules/semver/internal/constants.js +48 -0
  43. package/dist/node_modules/semver/internal/debug.js +22 -0
  44. package/dist/node_modules/semver/internal/identifiers.js +40 -0
  45. package/dist/node_modules/semver/internal/lrucache.js +53 -0
  46. package/dist/node_modules/semver/internal/parse-options.js +28 -0
  47. package/dist/node_modules/semver/internal/re.js +239 -0
  48. package/dist/node_modules/semver/ranges/gtr.js +19 -0
  49. package/dist/node_modules/semver/ranges/intersects.js +22 -0
  50. package/dist/node_modules/semver/ranges/ltr.js +19 -0
  51. package/dist/node_modules/semver/ranges/max-satisfying.js +41 -0
  52. package/dist/node_modules/semver/ranges/min-satisfying.js +40 -0
  53. package/dist/node_modules/semver/ranges/min-version.js +78 -0
  54. package/dist/node_modules/semver/ranges/outside.js +102 -0
  55. package/dist/node_modules/semver/ranges/simplify.js +63 -0
  56. package/dist/node_modules/semver/ranges/subset.js +265 -0
  57. package/dist/node_modules/semver/ranges/to-comparators.js +23 -0
  58. package/dist/node_modules/semver/ranges/valid.js +26 -0
  59. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ var index = require('../node_modules/semver/index.js');
4
+
5
+ var semverExports = index.__require();
6
+
7
+ exports.semverExports = semverExports;
@@ -0,0 +1,5 @@
1
+ 'use strict';
2
+
3
+ var re = {exports: {}};
4
+
5
+ exports.__module = re;
@@ -13,6 +13,12 @@ const page = async ({ page: page2, featureToggles, openFeature: openFeature$1, u
13
13
  if (hasFeatureToggles || hasUserPreferences) {
14
14
  try {
15
15
  await page2.addInitScript(overrideGrafanaBootData.overrideGrafanaBootData, { featureToggles, userPreferences });
16
+ await page2.route("**/apis/preferences.grafana.app/*/namespaces/*/preferences/merged", async (route) => {
17
+ const response = await route.fetch();
18
+ const json = await response.json();
19
+ json.spec = { ...json.spec, ...userPreferences };
20
+ await route.fulfill({ response, json });
21
+ });
16
22
  } catch (error) {
17
23
  console.error("Failed to set feature toggles", error);
18
24
  }
package/dist/index.d.ts CHANGED
@@ -171,6 +171,58 @@ declare class AppPage extends GrafanaPage {
171
171
  goto(options?: AppPageNavigateOptions): Promise<void>;
172
172
  }
173
173
 
174
+ type LocatorParams = Parameters<Locator['locator']>;
175
+ declare abstract class ComponentBase {
176
+ readonly ctx: PluginTestCtx;
177
+ protected readonly element: Locator;
178
+ constructor(ctx: PluginTestCtx, element: Locator);
179
+ locator(selectorOrLocator?: LocatorParams[0], options?: LocatorParams[1]): Locator;
180
+ }
181
+
182
+ type SelectOptionsType = Parameters<Locator['selectOption']>[1];
183
+ type CheckOptionsType = Parameters<Locator['check']>[0];
184
+
185
+ declare class ColorPicker extends ComponentBase {
186
+ constructor(ctx: PluginTestCtx, element: Locator);
187
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
188
+ within(root: Locator): ColorPicker;
189
+ selectOption(rgbOrHex: string, options?: SelectOptionsType): Promise<void>;
190
+ private getCustomTab;
191
+ private getPortalContainer;
192
+ }
193
+
194
+ declare class MultiSelect extends ComponentBase {
195
+ constructor(ctx: PluginTestCtx, element: Locator);
196
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
197
+ within(root: Locator): MultiSelect;
198
+ selectOptions(values: string[], options?: SelectOptionsType): Promise<string[]>;
199
+ }
200
+
201
+ declare class RadioGroup extends ComponentBase {
202
+ constructor(ctx: PluginTestCtx, element: Locator);
203
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
204
+ within(root: Locator): RadioGroup;
205
+ check(labelOrValue: string, options?: CheckOptionsType): Promise<void>;
206
+ }
207
+
208
+ declare class Select extends ComponentBase {
209
+ constructor(ctx: PluginTestCtx, element: Locator);
210
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
211
+ within(root: Locator): Select;
212
+ selectOption(values: string, options?: SelectOptionsType): Promise<string>;
213
+ }
214
+
215
+ declare class Switch extends ComponentBase {
216
+ private group;
217
+ constructor(ctx: PluginTestCtx, group: Locator);
218
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
219
+ within(root: Locator): Switch;
220
+ private static getElement;
221
+ check(options?: CheckOptionsType): Promise<void>;
222
+ uncheck(options?: CheckOptionsType): Promise<void>;
223
+ private getSwitch;
224
+ }
225
+
174
226
  declare class TimeRange extends ScopedComponent {
175
227
  /**
176
228
  * Opens the time picker and sets the time range to the provided values
@@ -178,6 +230,14 @@ declare class TimeRange extends ScopedComponent {
178
230
  set({ from, to, zone }: TimeRangeArgs): Promise<void>;
179
231
  }
180
232
 
233
+ declare class UnitPicker extends ComponentBase {
234
+ constructor(ctx: PluginTestCtx, element: Locator);
235
+ static getContainer(ctx: PluginTestCtx, root?: Locator): Locator;
236
+ within(root: Locator): UnitPicker;
237
+ selectOption(value: string, options?: SelectOptionsType): Promise<void>;
238
+ private getOption;
239
+ }
240
+
181
241
  /**
182
242
  * Factory for components that are not attached to a specific page.
183
243
  *
@@ -191,11 +251,19 @@ declare class TimeRange extends ScopedComponent {
191
251
  * ```typescript
192
252
  * await components.dataSourcePicker.set('prom');
193
253
  * await components.dataSourcePicker.within(panel).set('prom');
254
+ * await components.select.within(fieldLabel).selectOption('Europe/Stockholm');
255
+ * await components.switch.within(fieldLabel).check();
194
256
  * ```
195
257
  */
196
258
  declare class Components {
197
259
  readonly dataSourcePicker: DataSourcePicker;
198
260
  readonly timeRangePicker: TimeRange;
261
+ readonly select: Select;
262
+ readonly multiSelect: MultiSelect;
263
+ readonly switch: Switch;
264
+ readonly radioGroup: RadioGroup;
265
+ readonly unitPicker: UnitPicker;
266
+ readonly colorPicker: ColorPicker;
199
267
  constructor(ctx: PluginTestCtx);
200
268
  }
201
269
 
@@ -241,54 +309,6 @@ declare class Panel extends GrafanaPage {
241
309
  getErrorIcon(): Locator;
242
310
  }
243
311
 
244
- type LocatorParams = Parameters<Locator['locator']>;
245
- declare abstract class ComponentBase {
246
- readonly ctx: PluginTestCtx;
247
- protected readonly element: Locator;
248
- constructor(ctx: PluginTestCtx, element: Locator);
249
- locator(selectorOrLocator?: LocatorParams[0], options?: LocatorParams[1]): Locator;
250
- }
251
-
252
- type SelectOptionsType = Parameters<Locator['selectOption']>[1];
253
- type CheckOptionsType = Parameters<Locator['check']>[0];
254
-
255
- declare class ColorPicker extends ComponentBase {
256
- constructor(ctx: PluginTestCtx, element: Locator);
257
- selectOption(rgbOrHex: string, options?: SelectOptionsType): Promise<void>;
258
- private getCustomTab;
259
- private getContainer;
260
- }
261
-
262
- declare class UnitPicker extends ComponentBase {
263
- constructor(ctx: PluginTestCtx, element: Locator);
264
- selectOption(value: string, options?: SelectOptionsType): Promise<void>;
265
- private getOption;
266
- }
267
-
268
- declare class Select extends ComponentBase {
269
- constructor(ctx: PluginTestCtx, element: Locator);
270
- selectOption(values: string, options?: SelectOptionsType): Promise<string>;
271
- }
272
-
273
- declare class MultiSelect extends ComponentBase {
274
- constructor(ctx: PluginTestCtx, element: Locator);
275
- selectOptions(values: string[], options?: SelectOptionsType): Promise<string[]>;
276
- }
277
-
278
- declare class Switch extends ComponentBase {
279
- private group;
280
- constructor(ctx: PluginTestCtx, group: Locator);
281
- private static getElement;
282
- check(options?: CheckOptionsType): Promise<void>;
283
- uncheck(options?: CheckOptionsType): Promise<void>;
284
- private getSwitch;
285
- }
286
-
287
- declare class RadioGroup extends ComponentBase {
288
- constructor(ctx: PluginTestCtx, element: Locator);
289
- check(labelOrValue: string, options?: CheckOptionsType): Promise<void>;
290
- }
291
-
292
312
  declare class PanelEditOptionsGroup {
293
313
  private ctx;
294
314
  readonly element: Locator;
@@ -1629,5 +1649,5 @@ declare global {
1629
1649
  }
1630
1650
  }
1631
1651
 
1632
- export { AnnotationEditPage, AnnotationPage, AppConfigPage, AppPage, Components, DEFAULT_A11Y_TAGS, DashboardPage, DataSourceConfigPage, DataSourcePicker, ExplorePage, GrafanaPage, Panel, PanelEditPage, PluginConfigPage, ScopedComponent, TimeRange, VariableEditPage, VariablePage, eq, expect, gt, gte, isFeatureEnabled, isLegacyFeatureEnabled, lt, lte, satisfies, test };
1652
+ export { AnnotationEditPage, AnnotationPage, AppConfigPage, AppPage, ColorPicker, Components, DEFAULT_A11Y_TAGS, DashboardPage, DataSourceConfigPage, DataSourcePicker, ExplorePage, GrafanaPage, MultiSelect, Panel, PanelEditPage, PluginConfigPage, RadioGroup, ScopedComponent, Select, Switch, TimeRange, UnitPicker, VariableEditPage, VariablePage, eq, expect, gt, gte, isFeatureEnabled, isLegacyFeatureEnabled, lt, lte, satisfies, test };
1633
1653
  export type { A11yViolationsOptions, AlertPageOptions, AlertRule, AlertRuleArgs, AlertVariant$1 as AlertVariant, AppPageNavigateOptions, AxeScanContext, ContainTextOptions, CreateDataSourceArgs, CreateDataSourcePageArgs, Credentials, Dashboard, DashboardEditViewArgs, DashboardPageArgs, DataSourceSettings, E2ESelectorGroups, FeatureFlagValue, GotoAppConfigPageArgs, GotoAppPageArgs, GrafanaPageArgs, InternalFixtures, NavigateOptions, OrgRole, PlaywrightArgs, PluginFixture, PluginOptions, PluginPageArgs, PluginTestCtx, ReadProvisionedAlertRuleArgs, ReadProvisionedDashboardArgs, ReadProvisionedDataSourceArgs, RequestOptions, TimeRangeArgs, TriggerRequestOptions, User, UserPreferences, Visualization, getByGrafanaSelectorOptions };
package/dist/index.js CHANGED
@@ -45,10 +45,16 @@ var toHaveChecked = require('./matchers/toHaveChecked.js');
45
45
  var toHaveColor = require('./matchers/toHaveColor.js');
46
46
  var toHavePanelErrors = require('./matchers/toHavePanelErrors.js');
47
47
  var Components = require('./models/Components.js');
48
+ var ColorPicker = require('./models/components/ColorPicker.js');
48
49
  var DataSourcePicker = require('./models/components/DataSourcePicker.js');
50
+ var MultiSelect = require('./models/components/MultiSelect.js');
51
+ var RadioGroup = require('./models/components/RadioGroup.js');
49
52
  var ScopedComponent = require('./models/components/ScopedComponent.js');
53
+ var Select = require('./models/components/Select.js');
54
+ var Switch = require('./models/components/Switch.js');
50
55
  var Panel = require('./models/components/Panel.js');
51
56
  var TimeRange = require('./models/components/TimeRange.js');
57
+ var UnitPicker = require('./models/components/UnitPicker.js');
52
58
  var AnnotationEditPage = require('./models/pages/AnnotationEditPage.js');
53
59
  var AnnotationPage = require('./models/pages/AnnotationPage.js');
54
60
  var DashboardPage = require('./models/pages/DashboardPage.js');
@@ -122,10 +128,16 @@ exports.isFeatureEnabled = isFeatureToggleEnabled.isFeatureEnabled;
122
128
  exports.isLegacyFeatureEnabled = isFeatureToggleEnabled.isLegacyFeatureEnabled;
123
129
  exports.DEFAULT_A11Y_TAGS = scanForA11yViolations.DEFAULT_A11Y_TAGS;
124
130
  exports.Components = Components.Components;
131
+ exports.ColorPicker = ColorPicker.ColorPicker;
125
132
  exports.DataSourcePicker = DataSourcePicker.DataSourcePicker;
133
+ exports.MultiSelect = MultiSelect.MultiSelect;
134
+ exports.RadioGroup = RadioGroup.RadioGroup;
126
135
  exports.ScopedComponent = ScopedComponent.ScopedComponent;
136
+ exports.Select = Select.Select;
137
+ exports.Switch = Switch.Switch;
127
138
  exports.Panel = Panel.Panel;
128
139
  exports.TimeRange = TimeRange.TimeRange;
140
+ exports.UnitPicker = UnitPicker.UnitPicker;
129
141
  exports.AnnotationEditPage = AnnotationEditPage.AnnotationEditPage;
130
142
  exports.AnnotationPage = AnnotationPage.AnnotationPage;
131
143
  exports.DashboardPage = DashboardPage.DashboardPage;
@@ -1,7 +1,13 @@
1
1
  'use strict';
2
2
 
3
+ var ColorPicker = require('./components/ColorPicker.js');
3
4
  var DataSourcePicker = require('./components/DataSourcePicker.js');
5
+ var MultiSelect = require('./components/MultiSelect.js');
6
+ var RadioGroup = require('./components/RadioGroup.js');
7
+ var Select = require('./components/Select.js');
8
+ var Switch = require('./components/Switch.js');
4
9
  var TimeRange = require('./components/TimeRange.js');
10
+ var UnitPicker = require('./components/UnitPicker.js');
5
11
 
6
12
  var __defProp = Object.defineProperty;
7
13
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -10,8 +16,20 @@ class Components {
10
16
  constructor(ctx) {
11
17
  __publicField(this, "dataSourcePicker");
12
18
  __publicField(this, "timeRangePicker");
19
+ __publicField(this, "select");
20
+ __publicField(this, "multiSelect");
21
+ __publicField(this, "switch");
22
+ __publicField(this, "radioGroup");
23
+ __publicField(this, "unitPicker");
24
+ __publicField(this, "colorPicker");
13
25
  this.dataSourcePicker = new DataSourcePicker.DataSourcePicker(ctx);
14
26
  this.timeRangePicker = new TimeRange.TimeRange(ctx);
27
+ this.select = new Select.Select(ctx, Select.Select.getContainer(ctx));
28
+ this.multiSelect = new MultiSelect.MultiSelect(ctx, MultiSelect.MultiSelect.getContainer(ctx));
29
+ this.switch = new Switch.Switch(ctx, Switch.Switch.getContainer(ctx));
30
+ this.radioGroup = new RadioGroup.RadioGroup(ctx, RadioGroup.RadioGroup.getContainer(ctx));
31
+ this.unitPicker = new UnitPicker.UnitPicker(ctx, UnitPicker.UnitPicker.getContainer(ctx));
32
+ this.colorPicker = new ColorPicker.ColorPicker(ctx, ColorPicker.ColorPicker.getContainer(ctx));
15
33
  }
16
34
  }
17
35
 
@@ -8,20 +8,29 @@ class ColorPicker extends ComponentBase.ComponentBase {
8
8
  constructor(ctx, element) {
9
9
  super(ctx, element);
10
10
  }
11
+ static getContainer(ctx, root) {
12
+ if (root) {
13
+ return root;
14
+ }
15
+ return ctx.page.locator('[data-testid*="colorswatch"]').locator("xpath=..").first();
16
+ }
17
+ within(root) {
18
+ return new ColorPicker(this.ctx, root);
19
+ }
11
20
  async selectOption(rgbOrHex, options) {
12
21
  await this.element.getByRole("button").click(options);
13
22
  await this.getCustomTab().click(options);
14
- const colorInput = this.getContainer().getByTestId("input-wrapper").getByRole("textbox");
23
+ const colorInput = this.getPortalContainer().getByTestId("input-wrapper").getByRole("textbox");
15
24
  await colorInput.hover(options);
16
25
  await colorInput.fill(rgbOrHex, options);
17
26
  }
18
27
  getCustomTab() {
19
28
  if (version.gte(this.ctx.grafanaVersion, "11.6.0")) {
20
- return this.getContainer().getByRole("tab", { name: "Custom", exact: true });
29
+ return this.getPortalContainer().getByRole("tab", { name: "Custom", exact: true });
21
30
  }
22
- return this.getContainer().getByRole("button", { name: "Custom", exact: true });
31
+ return this.getPortalContainer().getByRole("button", { name: "Custom", exact: true });
23
32
  }
24
- getContainer() {
33
+ getPortalContainer() {
25
34
  const { grafanaVersion, page, selectors } = this.ctx;
26
35
  if (version.gte(grafanaVersion, "11.5.0")) {
27
36
  return page.locator(utils.resolveGrafanaSelector(selectors.components.Portal.container));
@@ -1,12 +1,24 @@
1
1
  'use strict';
2
2
 
3
+ var index = require('../../_virtual/index.js');
3
4
  var Select = require('./Select.js');
4
5
  var ComponentBase = require('./ComponentBase.js');
6
+ var utils = require('../utils.js');
5
7
 
6
8
  class MultiSelect extends ComponentBase.ComponentBase {
7
9
  constructor(ctx, element) {
8
10
  super(ctx, element);
9
11
  }
12
+ static getContainer(ctx, root) {
13
+ const base = root ?? ctx.page;
14
+ if (index.semverExports.gte(ctx.grafanaVersion, "13.1.0")) {
15
+ return base.locator(utils.resolveGrafanaSelector(ctx.selectors.components.MultiSelect.container)).locator("xpath=..").first();
16
+ }
17
+ return base.locator('[class*="-grafana-select-value-container-multi"]').locator("xpath=..").first();
18
+ }
19
+ within(root) {
20
+ return new MultiSelect(this.ctx, MultiSelect.getContainer(this.ctx, root));
21
+ }
10
22
  async selectOptions(values, options) {
11
23
  const menu = await Select.openSelect(this, options);
12
24
  const selected = [];
@@ -2,11 +2,25 @@
2
2
 
3
3
  var ComponentBase = require('./ComponentBase.js');
4
4
  var version = require('../../utils/version.js');
5
+ var utils = require('../utils.js');
5
6
 
6
7
  class RadioGroup extends ComponentBase.ComponentBase {
7
8
  constructor(ctx, element) {
8
9
  super(ctx, element);
9
10
  }
11
+ static getContainer(ctx, root) {
12
+ const base = root ?? ctx.page;
13
+ if (version.gte(ctx.grafanaVersion, "13.1.0")) {
14
+ return base.locator(utils.resolveGrafanaSelector(ctx.selectors.components.RadioGroup.container)).first();
15
+ }
16
+ if (version.gte(ctx.grafanaVersion, "10.0.0")) {
17
+ return base.locator('[role="radiogroup"]').first();
18
+ }
19
+ return base.locator('div:has(> input[type="radio"]), div:has(> div > input[type="radio"])').first();
20
+ }
21
+ within(root) {
22
+ return new RadioGroup(this.ctx, RadioGroup.getContainer(this.ctx, root));
23
+ }
10
24
  async check(labelOrValue, options) {
11
25
  if (version.gte(this.ctx.grafanaVersion, "10.2.0")) {
12
26
  return this.element.getByLabel(labelOrValue, { exact: true }).check(options);
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var index = require('../../_virtual/index.js');
3
4
  var ComponentBase = require('./ComponentBase.js');
4
5
  var utils = require('../utils.js');
5
6
 
@@ -7,6 +8,16 @@ class Select extends ComponentBase.ComponentBase {
7
8
  constructor(ctx, element) {
8
9
  super(ctx, element);
9
10
  }
11
+ static getContainer(ctx, root) {
12
+ const base = root ?? ctx.page;
13
+ if (index.semverExports.gte(ctx.grafanaVersion, "13.1.0")) {
14
+ return base.locator(utils.resolveGrafanaSelector(ctx.selectors.components.Select.container)).locator("xpath=..").first();
15
+ }
16
+ return base.locator('[class*="-grafana-select-value-container"]:not([class*="-grafana-select-value-container-multi"])').locator("xpath=..").first();
17
+ }
18
+ within(root) {
19
+ return new Select(this.ctx, Select.getContainer(this.ctx, root));
20
+ }
10
21
  async selectOption(values, options) {
11
22
  const menu = await openSelect(this, options);
12
23
  await this.locator().page().keyboard.type(values);
@@ -2,6 +2,7 @@
2
2
 
3
3
  var ComponentBase = require('./ComponentBase.js');
4
4
  var version = require('../../utils/version.js');
5
+ var utils = require('../utils.js');
5
6
 
6
7
  var __defProp = Object.defineProperty;
7
8
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -12,6 +13,19 @@ class Switch extends ComponentBase.ComponentBase {
12
13
  __publicField(this, "group");
13
14
  this.group = group;
14
15
  }
16
+ static getContainer(ctx, root) {
17
+ const base = root ?? ctx.page;
18
+ if (version.gte(ctx.grafanaVersion, "13.1.0")) {
19
+ return base.locator(utils.resolveGrafanaSelector(ctx.selectors.components.Switch.container)).first();
20
+ }
21
+ if (version.gte(ctx.grafanaVersion, "12.0.0")) {
22
+ return base.locator('div:has(> input[type="checkbox"][role="switch"])').first();
23
+ }
24
+ return base.locator('div:has(> input[type="checkbox"] + label)').first();
25
+ }
26
+ within(root) {
27
+ return new Switch(this.ctx, Switch.getContainer(this.ctx, root));
28
+ }
15
29
  static getElement(ctx, group) {
16
30
  if (version.gte(ctx.grafanaVersion, "11.5.0")) {
17
31
  return group.getByRole("switch");
@@ -1,11 +1,23 @@
1
1
  'use strict';
2
2
 
3
+ var index = require('../../_virtual/index.js');
3
4
  var ComponentBase = require('./ComponentBase.js');
5
+ var utils = require('../utils.js');
4
6
 
5
7
  class UnitPicker extends ComponentBase.ComponentBase {
6
8
  constructor(ctx, element) {
7
9
  super(ctx, element);
8
10
  }
11
+ static getContainer(ctx, root) {
12
+ const base = root ?? ctx.page;
13
+ if (index.semverExports.gte(ctx.grafanaVersion, "13.1.0")) {
14
+ return base.locator(utils.resolveGrafanaSelector(ctx.selectors.components.UnitPicker.container)).first();
15
+ }
16
+ return base.locator('div:has(> div > [data-testid="input-wrapper"] input[placeholder="Choose"])').first();
17
+ }
18
+ within(root) {
19
+ return new UnitPicker(this.ctx, UnitPicker.getContainer(this.ctx, root));
20
+ }
9
21
  async selectOption(value, options) {
10
22
  await this.element.getByRole("textbox").click();
11
23
  const option = await this.getOption(value, options);
@@ -0,0 +1,161 @@
1
+ 'use strict';
2
+
3
+ var parseOptions = require('../internal/parse-options.js');
4
+ var re = require('../internal/re.js');
5
+ var cmp = require('../functions/cmp.js');
6
+ var debug = require('../internal/debug.js');
7
+ var semver = require('./semver.js');
8
+ var range = require('./range.js');
9
+
10
+ var comparator;
11
+ var hasRequiredComparator;
12
+
13
+ function requireComparator () {
14
+ if (hasRequiredComparator) return comparator;
15
+ hasRequiredComparator = 1;
16
+
17
+ const ANY = Symbol('SemVer ANY');
18
+ // hoisted class for cyclic dependency
19
+ class Comparator {
20
+ static get ANY () {
21
+ return ANY
22
+ }
23
+
24
+ constructor (comp, options) {
25
+ options = parseOptions$1(options);
26
+
27
+ if (comp instanceof Comparator) {
28
+ if (comp.loose === !!options.loose) {
29
+ return comp
30
+ } else {
31
+ comp = comp.value;
32
+ }
33
+ }
34
+
35
+ comp = comp.trim().split(/\s+/).join(' ');
36
+ debug$1('comparator', comp, options);
37
+ this.options = options;
38
+ this.loose = !!options.loose;
39
+ this.parse(comp);
40
+
41
+ if (this.semver === ANY) {
42
+ this.value = '';
43
+ } else {
44
+ this.value = this.operator + this.semver.version;
45
+ }
46
+
47
+ debug$1('comp', this);
48
+ }
49
+
50
+ parse (comp) {
51
+ const r = this.options.loose ? re$1[t.COMPARATORLOOSE] : re$1[t.COMPARATOR];
52
+ const m = comp.match(r);
53
+
54
+ if (!m) {
55
+ throw new TypeError(`Invalid comparator: ${comp}`)
56
+ }
57
+
58
+ this.operator = m[1] !== undefined ? m[1] : '';
59
+ if (this.operator === '=') {
60
+ this.operator = '';
61
+ }
62
+
63
+ // if it literally is just '>' or '' then allow anything.
64
+ if (!m[2]) {
65
+ this.semver = ANY;
66
+ } else {
67
+ this.semver = new SemVer(m[2], this.options.loose);
68
+ }
69
+ }
70
+
71
+ toString () {
72
+ return this.value
73
+ }
74
+
75
+ test (version) {
76
+ debug$1('Comparator.test', version, this.options.loose);
77
+
78
+ if (this.semver === ANY || version === ANY) {
79
+ return true
80
+ }
81
+
82
+ if (typeof version === 'string') {
83
+ try {
84
+ version = new SemVer(version, this.options);
85
+ } catch (er) {
86
+ return false
87
+ }
88
+ }
89
+
90
+ return cmp$1(version, this.operator, this.semver, this.options)
91
+ }
92
+
93
+ intersects (comp, options) {
94
+ if (!(comp instanceof Comparator)) {
95
+ throw new TypeError('a Comparator is required')
96
+ }
97
+
98
+ if (this.operator === '') {
99
+ if (this.value === '') {
100
+ return true
101
+ }
102
+ return new Range(comp.value, options).test(this.value)
103
+ } else if (comp.operator === '') {
104
+ if (comp.value === '') {
105
+ return true
106
+ }
107
+ return new Range(this.value, options).test(comp.semver)
108
+ }
109
+
110
+ options = parseOptions$1(options);
111
+
112
+ // Special cases where nothing can possibly be lower
113
+ if (options.includePrerelease &&
114
+ (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
115
+ return false
116
+ }
117
+ if (!options.includePrerelease &&
118
+ (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
119
+ return false
120
+ }
121
+
122
+ // Same direction increasing (> or >=)
123
+ if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
124
+ return true
125
+ }
126
+ // Same direction decreasing (< or <=)
127
+ if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
128
+ return true
129
+ }
130
+ // same SemVer and both sides are inclusive (<= or >=)
131
+ if (
132
+ (this.semver.version === comp.semver.version) &&
133
+ this.operator.includes('=') && comp.operator.includes('=')) {
134
+ return true
135
+ }
136
+ // opposite directions less than
137
+ if (cmp$1(this.semver, '<', comp.semver, options) &&
138
+ this.operator.startsWith('>') && comp.operator.startsWith('<')) {
139
+ return true
140
+ }
141
+ // opposite directions greater than
142
+ if (cmp$1(this.semver, '>', comp.semver, options) &&
143
+ this.operator.startsWith('<') && comp.operator.startsWith('>')) {
144
+ return true
145
+ }
146
+ return false
147
+ }
148
+ }
149
+
150
+ comparator = Comparator;
151
+
152
+ const parseOptions$1 = parseOptions.__require();
153
+ const { safeRe: re$1, t } = re.__require();
154
+ const cmp$1 = cmp.__require();
155
+ const debug$1 = debug.__require();
156
+ const SemVer = semver.__require();
157
+ const Range = range.__require();
158
+ return comparator;
159
+ }
160
+
161
+ exports.__require = requireComparator;